tomcat之Connector的结构

Connector的结构

Connector中具体用ProtocolHandler来处理请求的,不同的ProtocolHandler代表不同的连接类型(如Http11Protocol使用普通的Socket来连接,Http11NioProtocol使用NioSocket连接)

ProtocolHandler的三个重要组件:Endpoint(用于处理底层Socket的网络连接,用来实现TCP/IP协议) Processor(用于将Endpoint接收到的Socket封装成Request,用来实现HTTP协议) Adapter(用于将Request交给Container进行具体处理,即将请求适配到Servlet容器)

Endpoint的抽象实现AbstractEndpoint中定义了两个内部类Acceptor(监听请求)和AsyncTimeout(检查异步request的超时)和一个接口Handler(处理接收到的Socket在内部调用Processor进行处理)

NioEndpoint继承自AbstractEndpoint,新添加了Poller和SocketProcessor内部类(放在在上图的Acceptor和Handler之间)

 

Processor的两个抽象继承类:

 

org.apache.coyote.AbstractProtocol(正常处理协议使用的)

org.apache.coyote.http11.upgrade.AbstractProtocol(Servlet3.1后新增,用于处理HTTP的升级协议,指WebSocket协议)

具体实现应用层协议处理请求的是AbstractAjpProsessor和AbstractHttp11Prosessor中的process()方法

 

适配器Adapter只有一个实现类org.apache.catalina.connector.CoyoteAdapter

Processor的process()会调用Adapter的service()来处理请求,Adapter的service()主要调用Container管道中的invoke()方法来处理请求(管道将逐层调用各层容器中Value的invoke(),直到最后调用Wrapper管道中的BaseValue/StandardWrapperValue来处理Filter和Servlet)

 

posted @ 2018-10-03 15:51  code2038  阅读(598)  评论(0编辑  收藏  举报