Connector代表连接器,负责接收客户端连接,Connector属于Service,一个Service中可以有多个Connector,每个Connector需要监听不同的端口
下图为Connector的内部组成:
- Protocol代表一个协议,比如Http、AJP
- Endpoint代表一个请求接收端,不同的I/O模型对应不同类型的Endpoint,比如BIO对应JIoEndpoint,NIO对应NioEndpoint,和本地IO的AprEndpoint
- Acceptor是用来接收请求的接收器
- Executor表示执行请求的线程池,如果在Service中配置了线程池,则所有Connector会共享该线程池,如果没有配置线程池,则每个Connector会模式使用自己的线程池
- Processors负责处理请求,不同的协议加上不同的IO模型对应不同的Processors
- Mapper负责对请求进行路由,根据请求的URL将请求发送到对应的Host 组件、Context 组件、Wrapper 组件,也可以理解为将请求发送某个虚拟主机下某个Web应用的某个Servlet
- CoyoteAdaptor是一个适配器,负责将请求解析出来的请求和响应对象交给Engine进行处理
Tomcat目前支持两种Connector:
- 支持Http协议的Connector
- 支持Ajp协议的Connector
每种协议都可以使用不同的IO模型,不同的协议和IO模型能组合成不同的协议:
Tomcat7默认支持:
- Http11Protocol
- Http11NioProtocol
- Http11AprProtocol
- AjpProtocol
- AjpNioProtocol
- AjpAprProtocol
Tomcat8默认支持:
- Http11Protocol
- Http11NioProtocol
- Http11Nio2Protocol
- Http11AprProtocol
- AjpProtocol
- AjpNioProtocol
- AjpNio2Protocol
- AjpAprProtocol
- Http2Protocol
Tomcat9默认支持:
- Http11NioProtocol
- Http11Nio2Protocol
- Http11AprProtocol
- AjpNioProtocol
- AjpNio2Protocol
- AjpAprProtocol
- Http2Protocol
用户可以实现自己的Protocol,然后将协议的类名指定在server.xml中Connector.protocol的值即可。