Connector代表连接器,负责接收客户端连接,Connector属于Service,一个Service中可以有多个Connector,每个Connector需要监听不同的端口

    下图为Connector的内部组成:
    image.png

    • 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:

    1. 支持Http协议的Connector
    2. 支持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的值即可。