Connector连接器
Coyote是Tomcat连接器框架的名称,是Tomcat服务器提供的供客户端访问的外部接口。客户端通过Coyote与服务器建立连接、发送请求并接收响应。
Connector封装了底层的网络通信(Socket请求和响应),为Catalina容器提供了统一的接口,使Catalina容器与具体的请求协议及I/O方式解耦。Connector将Socket输入转换为Request对象,交由Catalina容器进行处理,处理完成后,Catalina通过Connector提供的Response对象将结果写入到输出流
Connector中,Tomcat支持3种传输协议
HTTP/1.1 主要用于Tomcat单独运行(不与Web服务器集成)的情况
AJP协议 用于和Web服务器集成,以实现针对静态资源的优化以及集群部署
HTTP/2.0 新的HTTP协议(Tomcat8.5之后开始支持)
针对HTTP和AJP协议,Connector又按照I/O方式提供了几种方案(8.5之后移除了对BIO的支持)
- NIO 采用Java NIO类库实现
- NIO2 采用JDK7中最新的NIO2实现
- APR 采用APR实现。是使用C/C++编写的本地库,如果选择该方案,需要单独安装APR库
Connector结构

ProtocolHandler
Connector协议接口,通过封装Endpoint和Processor,实现针对具体协议的处理功能。使用ProtocolHandler来处理请求,不同的ProtocolHandler表示不同的连接类型,如Http11NioProtocol、Http11AprProtocol等
1 | // Connector中设置协议 |
根据不同的协议来实例化不同的ProtocolHandler对象
1 | ProtocolHandler p = null; |
Endpoint
Connector通信端点,即通信监听的接口,是具体的Socket接收处理类,是对传输层的抽象,用来处理底层Socket的网络连接。AbstractEndpoint抽象类,对于不同的I/O方式有不同的子类,NioEndpoint(NIO)、AprEndpoint(APR)以及Nio2Endpoint,相当于实现了TCP/IP协议
Processor
Connector协议处理接口,负责将Endpoint接收到的Socket封装成Request,并通过Adapter将其提交到Container容器处理,是对应用层的抽象。Processor是单线程的,Tomcat在同一次连接中复用Processor。相当于实现了HTTP协议
Adapter
Adapter用于将封装好的Request交给Container进行具体的处理,将请求适配到Servlet容器进行具体的处理