引入
线程池Executor是在哪里启动的?
Request是如何处理并交个Container处理的?
Tomcat支持哪些协议?这些协议是处理的?协议层次结构如何设计的?
Connector
Connector构造
本质是初始化了ProtocolHandler,默认是HTTP/1.1 NIO实现。
ProtocolHandler是怎么通过protocol初始化实现的呢?我们看下ProtocolHandler.create(protocol, apr)
我们看到上述方法实际通过Protocol初始化了ProtocolHandler, 我们看下它所支持的HTTP1.1,Ajp协议的处理,我们通过它的类层次结构来看协议支持处理类

Connector初始化
在JMX的初始化模板方法initInternal中,进行了Connector的初始化,它做了哪些事呢?
给protocolHandler初始化了adapter //这adapter是真正衔接Container处理的适配器,后文我们会有详解。
设置parseBody的方法,默认为POST方法
一些校验
调用protocolHandler的init
protocolHandler的init做了什么?本质上调用了AbstractEndpoint的init方法
endpoint.init()做了什么呢?之前的版本中是直接调用bind方法,这里改成了bindWithCleanup, 变化点在于失败后的清理操作。
bindWithCleanup()做了bind方法,如果绑定失败就回调unbind方法。
bind()方法做了初始化ServerSocket和初始化ssl
Connector的启动
这里依然是调用JMX的模板方法startInternal方法, start方法本质就是委托给protocolHandler处理,调用它的start方法
protocolHandler.start()方法如下,它又交给endpoint进行start处理
endpoint.start()就是调用startInternal方法。当然它会先检查是否绑定端口,没有绑定便执行bindWithCleanup方法
我们看下NIOEndPoint的startInternal方法做了啥
createExecutor()方法如下,本质是创建一个ThreadPoolExecutor