Tomcat 本质是一个 基于 Servlet 规范的请求执行容器,其核心职责不是“运行 Web 应用”,而是完成以下五类系统功能:
| 子系统 | 本质职责 | 对应实现 |
|---|---|---|
| 网络接入子系统 | 接收 TCP 连接与事件分发 | Endpoint / Acceptor / Poller |
| 协议处理子系统 | HTTP / AJP 协议解析与编码 | Processor / ProtocolHandler |
| 请求路由子系统 | URL → Servlet 定位 | Mapper |
| 执行容器子系统 | Servlet / Filter 调用 | Container 体系 |
| 生命周期管理子系统 | 组件统一初始化与控制 | Lifecycle |
| 资源隔离子系统 | 应用类加载隔离 | ClassLoader 体系 |
Tomcat 在 Web 系统中承担:
Tomcat 的请求处理可抽象为标准服务器执行流水线:
Client
↓
Socket 接入层
↓
协议解析层
↓
请求路由层
↓
执行管线
↓
Servlet 容器
↓
响应编码
| 层 | 核心组件 | 职责 |
|---|---|---|
| 接入层 | Endpoint | socket监听、连接管理 |
| 协议层 | Processor | HTTP解析、请求对象构造 |
| 路由层 | Mapper | URL匹配容器 |
| 执行层 | Pipeline / FilterChain | 中间件处理 |
| 组件层 | Servlet | 业务执行 |
| 编码层 | Processor | 响应写回 |
Tomcat 使用分层容器组织应用。
Server
└─ Service
├─ Connector
└─ Engine
└─ Host
└─ Context
└─ Wrapper
| 层 | 含义 | 系统意义 |
|---|---|---|
| Server | 进程级运行实例 | 顶层生命周期控制 |
| Service | 请求处理域 | 连接器与容器绑定 |
| Engine | 虚拟主机调度 | 域名级路由 |
| Host | 虚拟主机 | 多站点托管 |
| Context | Web应用 | 应用隔离边界 |
| Wrapper | Servlet实例 | 最终执行单元 |
| 结构 | 模式 | 目的 |
|---|---|---|
| 容器层级 | 组合模式 | 统一组件管理 |
| Pipeline | 责任链 | 可扩展请求处理 |
| Lifecycle | 模板方法 | 统一生命周期 |
| Adapter | 适配器 | 协议与容器解耦 |
Tomcat 默认采用 事件驱动 + 线程池执行模型。
| 线程 | 职责 |
|---|---|
| Acceptor | 接收 TCP 连接 |
| Poller | 监听 IO 事件 |
| Worker | 执行业务处理 |
Socket连接
↓
Acceptor接收
↓
注册Selector
↓
Poller监听就绪
↓
Worker处理请求
| 模型 | 特点 |
|---|---|
| BIO | 阻塞线程 |
| NIO | 事件驱动 |
| NIO2 | 异步回调 |
| APR | Native性能优化 |
请求处理是一个多级函数映射:
(socket, protocol, host, path)
→ servlet
域名 → Engine
路径前缀 → Host
应用路径 → Context
Servlet路径 → Wrapper
Valve
↓
Filter
↓
Servlet
所有核心组件均实现 Lifecycle。
NEW
→ INITIALIZED
→ STARTING
→ STARTED
→ STOPPING
→ STOPPED
→ DESTROYED
父容器控制子容器:
Server
→ Service
→ Engine
→ Host
→ Context
Tomcat 通过 多层类加载器 实现应用隔离。
Bootstrap
↓
System
↓
Common
↓
Catalina
↓
Shared
↓
WebAppClassLoader
WebAppClassLoader 可打破标准委派,原因:
Servlet 执行是容器驱动的函数调用:
service(request, response)
执行上下文:
JSP 本质是 模板到 Java 的编译过程。
JSP → Java → Class → Servlet
Session 由 Context 内 Manager 管理。
ConcurrentHashMap<SessionId, Session>
Tomcat 不提供强一致分布式会话。
| 策略 | 特征 |
|---|---|
| Session复制 | 高开销 |
| 粘性会话 | 负载不均 |
| 外部存储 | 推荐方案 |
推荐架构:
LoadBalancer
↓
Stateless Tomcat
↓
Session Store (Redis)
安全控制层次:
1 网络连接控制 2 认证授权 3 传输加密 4 应用隔离 5 安全策略
Browser
↓
CDN
↓
Reverse Proxy
↓
Tomcat
↓
Application
↓
Database
| 方向 | 说明 |
|---|---|
| 阻塞 → 非阻塞 | NIO / Async Servlet |
| 单体 → 云原生 | 容器化部署 |
| 同步 → Reactive | 事件驱动 |
| HTTP1 → HTTP3 | QUIC |
Tomcat 本质不是 Web 服务器实现,而是:
一个协议驱动的组件执行操作系统。
其核心能力:
它提供的是:
一个可隔离、可扩展、可管理的 Web 组件运行时环境。