
从架构图可以看出,顶层组件Server代表一个Tomcat Server实例,一个Server中有一个或者多个Service,每个Service有多个Connector,以及一个Engine。
Connector和Engine是Tomcat最核心的两个组件。
Connector负责处理网络通信,以及应用层协议(HTTP,AJP)的解析,生成标准的ServletRequest和ServletResponse对象,然后传递给Engine处理。每个Connector监听不同的网络端口。
Engine代表整个Servlet引擎,可以包含多个Host,表示它可以管理多个虚拟站点。Host代表的是一个虚拟主机,而一个虚拟主机下可以部署多个Web应用程序,Context表示一个Web应用程序。Wrapper表示一个Servlet,一个Web应用程序中可能会有多个Servlet。
从Tomcat的配置文件server.xml也能看出Tomcat的系统架构设计。
<Server>
<Service>
<Connector />
<Connector />
<Engine>
<Host>
</Host>
</Engine>
</Service>
</Server>
Connector我们再仔细看一下Connector的内部实现。

Endpoint 负责网络通信Processor 实现应用层协议(HTTP,AJP)解析Adapter 将Tomcat的Request/Response转换为标准的ServletRequest/ServletResponseTomcat的网络通信层支持多种 I/O 模型:
Java NIO实现JDK NIO.2实现
Tomcat实现支持了多种应用层协议:

Processor解析网络字节流生成Tomcat的Request对象后,会调用Adapter.service(request, response)方法。Adapter是Servlet引擎的入口,Adapter负责将Tomcat的Request对象转换为标准的ServletRequest,然后再调用Servlet引擎的service方法。

ProtocolHandlerTomcat允许一个Engine对接多个Connector,每个Connector可以使用不同的 I/O 模型,实现不同的应用层协议解析。Connector屏蔽了 I/O 模型和协议的区别,传递给Engine的是标准的ServletRequest/ServletResponse对象。
由于 I/O 模型和应用层协议解析可以自由组合,Tomcat使用ProtocolHandler实现这种组合。各种组合都有相应的具体实现类。比如:Http11NioProtocol 和 AjpNio2Protocol。

关于NioEndpoint和Nio2Endpoint组件的内部实现,会在后续文章进行分析。