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的结构的主要内容,如果未能解决你的问题,请参考以下文章

tomcat源码之connector配置

Day676.Jetty架构之Connector组件 -深入拆解 Tomcat & Jetty

Tomcat源码之连接器Connector解析

tomcat体系结构

Tomcat的结构及工作原理

Tomcat的BIO Connector和NIO Connector有啥区别?