tomcat之Connector的结构
Posted code2038
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
以上是关于tomcat之Connector的结构的主要内容,如果未能解决你的问题,请参考以下文章