架构分析
虽然网上对于tomcat架构描述已经十分详细了,但在这里还是要先讲讲 架构
总体设计
Tomcat顶层架构.jpg先来看Connector和Container - 两个Tomcat的心脏:
- Connector用于处理连接相关的事情,并提供Socket与Request和Response相关的转化;
- Container用于封装和管理Servlet,以及具体处理Request请求;
Service - 面向外界的连接体
- 主要结合Connector和Container,实现封装,向外提供功能
- 一个service只能有一个container,但可以有多个connector
Server
- 掌控Service的生杀大权,管理整个tomcat生命周期
请求流程
请求进入tomcat,经由Service交付到Connector,Connector将接收的请求封装为Request和Response,然后讲封装后的数据传递到Container处理,处理完成后返回Connector,通过Socket将结果返还给客户端。
Tomcat连接示意图.jpgConnector
Connector最底层使用的是(Tcp/Ip)Socket来进行连接的,Request和Response是按照HTTP协议来封装的。
Connector结构图.jpg- 通过不同类型的ProtocolHandler,Connector可以处理类型的连接请求,比如socket、nio等连接
- 每个ProtocolHandler都包含了三个组件:Endpoint、Processor、Adapter
- Endpoint实现TCP/IP协议,Processor实现HTTP协议的并将Endpoint接收到的Socket封装成Request,Adapter将Request适配大宋Container进行具体的处理
- 在Endpoint中,其抽象实现AbstractEndpoint里包含Acceptor(监听请求)和AsyncTimeout(检查异步Request的超时)两个内部类和Handler(处理接收到的Socket,并调用Processor进行处理)接口。
Container
管理Servlet,处理Request请求
Container结构图.jpg- Engine可以管理多个主机,一个Service最多只能有一个Engine;
- Host是虚拟主机,通过配置Host就可以添加多台主机;
- Context就意味着一个WEB应用程序;
- Wrapper是Tomcat对Servlet的一层封装;
Container处理请求的方式 - 管道流与阀门
- 像普通的责任链设计模式一样,上一个处理者将处理过的请求移交到下一个继续处理。
- Pipeline-Valve与责任链模式存在一些差异:
- 每一个Pipeline都有一个特定的Valve,这个Valve处于责任链的末端
- 上面讲的四个容器都对应有自己特定的Valve:StandardEngineValve、StandardHostValve、StandardContextValve、StandardWrapperValve。
- 在这个特定的Valve中会调用下层级的管道,比如:EnginePipeline1 -> EnginePipeline2 -> StandardEngineValve(调用下级Pipeline) -> HostValve1 -> ... -> StandardHostValve -> ... -> StandardWrapperValve
- 当执行到最后一个Pipeline的特定Valve时,比如这里的StandardWrapperValve,会在StandardWrapperValve中创建FilterChain,其包含了配置的与请求相匹配的Filter和Servlet,并调用其doFilter方法来处理请求,其doFilter方法会依次调用所有的Filter的doFilter方法和Servlet的service方法,从而完成请求的处理,然后将结果返回给Connector,返还给客户端。
网友评论