系列文章目录
第一章 HTTP协议必知必会详解
第二章 一文读懂 Servlet 规范与 Servlet 容器加粗样式
第三章 深入拆解 Servlet 实战:纯手工打造与运行
第四章 深入拆解 Tomcat 系统架构:连接器如何设计
文章目录
- 系列文章目录
- 前言
- 一、思维导图
- [二、Tomcat 容器核心定位](#二、Tomcat 容器核心定位)
- 三、四层容器层级结构(父子嵌套)
- 四、容器管理:组合模式
- [五、请求定位:Mapper 组件](#五、请求定位:Mapper 组件)
- [六、请求调用:Pipeline-Valve 责任链](#六、请求调用:Pipeline-Valve 责任链)
- [七、Valve 与 Servlet Filter 核心区别](#七、Valve 与 Servlet Filter 核心区别)
- 八、常见问题
前言
本文聚焦Tomcat 系统架构(下),核心讲解 Tomcat四层容器(Engine、Host、Context、Wrapper)的父子层级设计,基于组合模式统一管理容器,通过Mapper 组件完成 URL 到目标 Servlet 的四层定位,依托Pipeline-Valve 责任链实现请求逐层调用,同时明确 Tomcat 私有 Valve 与标准 Servlet Filter 的核心差异,完整揭示容器层请求处理全流程。
一、思维导图

二、Tomcat 容器核心定位
Tomcat 容器是Servlet 的装载与管理核心单元,承接连接器转发的标准 ServletRequest,负责 Servlet 的加载、匹配、执行与生命周期管理,是 Tomcat 两大核心组件(连接器 + 容器)中承担内部请求处理的关键部分。
三、四层容器层级结构(父子嵌套)
Tomcat 设计4 层父子级容器,通过分层架构提升部署灵活性,各容器职责与层级关系如下:
| 容器名称 | 核心职责 | 层级关系 |
|---|---|---|
| Engine | 引擎,管理多个虚拟主机,一个 Service 仅对应1 个Engine | 顶层容器 |
| Host | 虚拟主机(站点),绑定访问域名,一个 Engine 可包含多个Host | Engine 子容器 |
| Context | 对应1 个Web 应用程序,一个 Host 可包含多个Context | Host 子容器 |
| Wrapper | 封装1 个Servlet 实例,一个 Context 可包含多个Wrapper | Context 子容器 |
四、容器管理:组合模式
- 所有容器组件统一实现Container 接口,该接口继承Lifecycle接口,统一管理组件生命周期。
- Container 接口提供getParent/setParent/addChild/removeChild等方法,实现父子容器的标准化管理。
- 组合模式屏蔽 ** 单容器(Wrapper)与组合容器(Engine/Host/Context)** 的操作差异,保证使用一致性。
五、请求定位:Mapper 组件
Mapper 组件是 Tomcat 的URL 路由核心,存储容器与访问路径的映射关系,通过4 步精准定位找到目标 Servlet:
- 按端口匹配:根据请求端口选定 Service 与 Engine;
- 按域名匹配:解析 URL 域名,匹配对应 Host 容器;
- 按应用路径匹配:根据 URL 路径定位对应 Context(Web 应用);
- 按 Servlet 路径匹配:匹配对应 Wrapper,最终定位到唯一 Servlet。
六、请求调用:Pipeline-Valve 责任链
- 设计模式:采用责任链模式,每层容器对应一个 Pipeline。
- 核心组件 :
- Valve:请求处理节点,负责权限校验、日志记录等操作;
- BasicValve:Pipeline 末端必选 Valve,负责触发下层容器的 Pipeline 调用。
- 调用流程:Adapter 触发 Engine Pipeline → 逐层调用 Host、Context Pipeline → Wrapper Pipeline 创建 Filter 链 → 最终调用 Servlet 的service方法。
七、Valve 与 Servlet Filter 核心区别
| 对比维度 | Valve | Servlet Filter |
|---|---|---|
| 机制归属 | Tomcat 私有机制,与容器 API 紧耦合 | Servlet 标准规范,全 Web 容器通用 |
| 作用范围 | 容器级别,拦截所有 Web 应用请求 | 应用级别,仅拦截当前 Web 应用请求 |
| 扩展用途 | 容器本身功能扩展 | Web 应用业务逻辑扩展 |
八、常见问题
- 问题 1(架构层级侧重) :Tomcat 四层容器的核心职责与父子关系是什么?
答案:Tomcat 采用Engine→Host→Context→Wrapper四层父子容器结构;Engine 管理多个虚拟主机,Host 对应站点域名,Context 对应一个 Web 应用,Wrapper 封装单个 Servlet;上层容器包含下层容器,请求逐层传递至 Wrapper 执行 Servlet。 - 问题 2(请求路由侧重) :Mapper 组件如何将 URL 定位到目标 Servlet?
答案:Mapper 通过四步匹配完成定位:①根据请求端口确定 Service 和 Engine;②根据 URL 域名匹配 Host 容器;③根据应用路径匹配 Context 容器;④根据 Servlet 映射路径匹配 Wrapper,最终定位到唯一 Servlet。 - 问题 3(机制差异侧重) :Tomcat 的 Valve 和 Servlet Filter 有哪些核心区别?
答案:①归属不同:Valve 是 Tomcat 私有机制,Filter 是 Servlet 标准规范;②作用范围不同:Valve 为容器级,拦截所有应用,Filter 为应用级,仅拦截当前应用;③耦合性不同:Valve 与 Tomcat 容器紧耦合,Filter 可通用所有 Web 容器。