tomcat实现的主要两个核心功能:
- 处理socket连接以及网络字节流与request与response的转换
- 加载与管理servlet,处理具体的请求以及响应
所以,tomcat设计了连接器(connector)和容器(container)分别来做这两件事,连接器负责处理socket,容器负责内部处理。
Tomcat 为了实现支持多种 I/O 模型和应用层协议,一个容器可能对接多个连接器,通常连接器和容器组合才能对外提供服务,这个组合叫做service,它本身并没有实现什么功能,只是组合连接器和容器,一个tomcat实例(server)可以包含多个service,以实现监听不同的端口号。所以,整体上的一个体系结构就如下图所示:

连接器
tomcat连接器完成了以下几个功能:
- 监听端口,进行网络通信
- 解析协议,转换为Tomcat Request/Response
- Tomcat Request/Response与 ServletRequest/ServletResponse 的转化以及与容器的交互
Tomcat 设计了Endpoint、Processor 和 Adapter三个组件来实现这三个功能:
- Endpoint负责网络通信
- Processor负责解析协议与转换
- Adapter负责Request/Response与 ServletRequest/ServletResponse 的转化
其中Endpoint、Processor放在一起抽象成了 ProtocolHandler 组件,他们的结构关系如下:

容器
容器就是用来装载 Servlet 的,Tomcat 设计了 4 种容器,分别是 Engine、Host、Context 和 Wrapper,这 4 种容器不是平行关系,而是父子关系:

如上图所示,容器是一种分层的组合的关系结构:
- Wrapper 表示一个 Servlet,一个 Web 应用程序中可能会有多个 Servlet
- Context 表示一个 Web 应用程序
- Host 代表的是一个虚拟主机(站点),可以配置多个虚拟主机地址,一个虚拟主机下可以部署多个 Web 应用程序
- Engine 表示引擎,用来管理虚拟站点,一个 Service 最多只能有一个 Engine
总结
最后,可以从tomcat配置文件server.xml来加深理解:

整体结构图:

网友评论