Tomcat解析
架构图
核心功能
Tomcat是Apache开源的轻量级Java Servlet容器,其中一个Server(Tomcat实例)可以管理多个Service(服务),一个Service包含多个Connector和一个Engine,负责管理请求到应用的整个流程。
Tomcat要实现的两个核心功能:
- 处理Socket连接,负责网络字节流与Request、Response请求的封装与拆解
- 加载和管理Servlet,处理具体的Request请求
因此Tomcat设计了两个核心组件——连接器(Connector)和容器(Container),连接器负责接受、返回请求,容器负责内部处理。
组件
1. Server
Tomcat
实例的顶层容器,负责管理整个实例的生命周期,可以管理多个Service
(服务)。
2. Service
- 一个
Service
包含多个Connector
和一个Engine
,连接外部请求和内部处理。
3. Connector
- 在一个
Service
中,多个Connector
负责不同协议的请求(Http
,Https
等) Coyote
为具体实现:
-
- 网络通信:封装了底层的(Socket请求及响应处理)
- 协议处理:(HTTP 1.1、HTTP 2、HTTPS)
- 为
Catalina
容器提供了统一接口,使Catalina
容器与具体的请求协议及IO操作完全解耦。
4. Container(容器层级)
- Engine:
Tomcat
核心处理模块,处理来自Connector
的请求,并逐级匹配到合适的Host
和Context
- Host:表示一个虚拟主机,可以在同一个
Tomcat
实例中配置多个虚拟主机,用于支持多域名。 - Context:表示一个 Web 应用程序,是最小的 Web 应用处理单元。
- Wrapper:表示一个 Servlet,负责调用对应 Servlet 的
service()
方法
客户端请求
|
V
Coyote (连接器)
|-- 监听端口 (Endpoint)
|-- 解析协议 (ProtocolHandler)
|-- 构造内部的 Request 和空的 Response 对象
|-- 将 Request 和 Response 对象传递给 Catalina 容器
V
Catalina (Servlet 容器)
|-- 封装为 HttpServletRequest 和 HttpServletResponse(通过Facade 模式)
|-- 找到目标 Servlet (通过 Engine -> Host -> Context -> Wrapper)
|-- 调用 Servlet 的 service() 方法
|-- 将 Response 数据传递给 Coyote
V
Coyote (连接器)
|-- 写入输出流 (Processor):从 Response 对象中读取数据。
|-- 生成响应字节流:将数据序列化为 HTTP 响应格式。
|-- 返回数据:通过底层的网络 Socket 将响应发送给客户端。
V
客户端接收响应
http://localhost:8080/app1
| | | |
| | | └── Context(路径)
| | └── Port(端口)
| └── Host(主机)
└── Connector(协议)