{"name":"Tomcat","id":"中间件-web中间件-Tomcat","content":"# Tomcat\n\n---\n\n# 1. Tomcat 的本质（系统抽象）\n\nTomcat 本质是一个 **基于 Servlet 规范的请求执行容器**，其核心职责不是“运行 Web 应用”，而是完成以下五类系统功能：\n\n## 1.1 五大核心子系统\n\n| 子系统       | 本质职责                | 对应实现                         |\n| --------- | ------------------- | ---------------------------- |\n| 网络接入子系统   | 接收 TCP 连接与事件分发      | Endpoint / Acceptor / Poller |\n| 协议处理子系统   | HTTP / AJP 协议解析与编码  | Processor / ProtocolHandler  |\n| 请求路由子系统   | URL → Servlet 定位    | Mapper                       |\n| 执行容器子系统   | Servlet / Filter 调用 | Container 体系                 |\n| 生命周期管理子系统 | 组件统一初始化与控制          | Lifecycle                    |\n| 资源隔离子系统   | 应用类加载隔离             | ClassLoader 体系               |\n\n## 1.2 系统角色定位\n\nTomcat 在 Web 系统中承担：\n\n* 协议终止器（HTTP Server）\n* 请求路由器（Dispatcher）\n* 组件执行容器（Component Runtime）\n* 生命周期管理器（Lifecycle Manager）\n* 类隔离运行环境（Isolated Runtime）\n\n---\n\n# 2. 系统整体分层架构\n\nTomcat 的请求处理可抽象为标准服务器执行流水线：\n\n```\nClient\n  ↓\nSocket 接入层\n  ↓\n协议解析层\n  ↓\n请求路由层\n  ↓\n执行管线\n  ↓\nServlet 容器\n  ↓\n响应编码\n```\n\n## 2.1 分层职责\n\n| 层   | 核心组件                   | 职责            |\n| --- | ---------------------- | ------------- |\n| 接入层 | Endpoint               | socket监听、连接管理 |\n| 协议层 | Processor              | HTTP解析、请求对象构造 |\n| 路由层 | Mapper                 | URL匹配容器       |\n| 执行层 | Pipeline / FilterChain | 中间件处理         |\n| 组件层 | Servlet                | 业务执行          |\n| 编码层 | Processor              | 响应写回          |\n\n---\n\n# 3. 组件层级架构（容器模型）\n\nTomcat 使用分层容器组织应用。\n\n```\nServer\n  └─ Service\n        ├─ Connector\n        └─ Engine\n              └─ Host\n                    └─ Context\n                          └─ Wrapper\n```\n\n## 3.1 各层语义\n\n| 层       | 含义        | 系统意义     |\n| ------- | --------- | -------- |\n| Server  | 进程级运行实例   | 顶层生命周期控制 |\n| Service | 请求处理域     | 连接器与容器绑定 |\n| Engine  | 虚拟主机调度    | 域名级路由    |\n| Host    | 虚拟主机      | 多站点托管    |\n| Context | Web应用     | 应用隔离边界   |\n| Wrapper | Servlet实例 | 最终执行单元   |\n\n## 3.2 设计模式\n\n| 结构        | 模式   | 目的      |\n| --------- | ---- | ------- |\n| 容器层级      | 组合模式 | 统一组件管理  |\n| Pipeline  | 责任链  | 可扩展请求处理 |\n| Lifecycle | 模板方法 | 统一生命周期  |\n| Adapter   | 适配器  | 协议与容器解耦 |\n\n---\n\n# 4. 请求执行模型（线程与事件）\n\nTomcat 默认采用 **事件驱动 + 线程池执行模型**。\n\n## 4.1 线程角色\n\n| 线程       | 职责        |\n| -------- | --------- |\n| Acceptor | 接收 TCP 连接 |\n| Poller   | 监听 IO 事件  |\n| Worker   | 执行业务处理    |\n\n## 4.2 执行流程\n\n```\nSocket连接\n   ↓\nAcceptor接收\n   ↓\n注册Selector\n   ↓\nPoller监听就绪\n   ↓\nWorker处理请求\n```\n\n## 4.3 I/O 模型\n\n| 模型   | 特点         |\n| ---- | ---------- |\n| BIO  | 阻塞线程       |\n| NIO  | 事件驱动       |\n| NIO2 | 异步回调       |\n| APR  | Native性能优化 |\n\n---\n\n# 5. 请求路由与执行流水线\n\n请求处理是一个多级函数映射：\n\n```\n(socket, protocol, host, path)\n      → servlet\n```\n\n## 5.1 URL映射过程\n\n```\n域名 → Engine\n路径前缀 → Host\n应用路径 → Context\nServlet路径 → Wrapper\n```\n\n## 5.2 执行管线\n\n```\nValve\n  ↓\nFilter\n  ↓\nServlet\n```\n\n---\n\n# 6. 生命周期管理系统\n\n所有核心组件均实现 Lifecycle。\n\n## 6.1 状态机\n\n```\nNEW\n → INITIALIZED\n → STARTING\n → STARTED\n → STOPPING\n → STOPPED\n → DESTROYED\n```\n\n## 6.2 生命周期传播\n\n父容器控制子容器：\n\n```\nServer\n  → Service\n     → Engine\n        → Host\n           → Context\n```\n\n---\n\n# 7. 类加载与应用隔离\n\nTomcat 通过 **多层类加载器** 实现应用隔离。\n\n## 7.1 类加载结构\n\n```\nBootstrap\n   ↓\nSystem\n   ↓\nCommon\n   ↓\nCatalina\n   ↓\nShared\n   ↓\nWebAppClassLoader\n```\n\n## 7.2 设计目标\n\n* 应用隔离\n* 热部署\n* 共享库复用\n\n## 7.3 双亲委派的可控破坏\n\nWebAppClassLoader 可打破标准委派，原因：\n\n* 允许应用覆盖共享库\n* 支持 SPI 机制\n* 解决 Servlet 规范需求\n\n---\n\n# 8. Servlet 执行模型\n\nServlet 执行是容器驱动的函数调用：\n\n```\nservice(request, response)\n```\n\n执行上下文：\n\n* FilterChain\n* Session\n* ServletContext\n* Thread Context ClassLoader\n\n---\n\n# 9. JSP 编译系统\n\nJSP 本质是 **模板到 Java 的编译过程**。\n\n## 9.1 编译阶段\n\n```\nJSP → Java → Class → Servlet\n```\n\n## 9.2 执行模式\n\n* 首次访问触发编译\n* 类加载执行\n* 可预编译\n\n---\n\n# 10. 会话管理模型\n\nSession 由 Context 内 Manager 管理。\n\n## 10.1 数据结构\n\n```\nConcurrentHashMap<SessionId, Session>\n```\n\n## 10.2 生命周期\n\n* 创建\n* 访问更新\n* 超时清理\n\n---\n\n# 11. 集群与扩展架构\n\nTomcat 不提供强一致分布式会话。\n\n## 11.1 三种策略\n\n| 策略        | 特征   |\n| --------- | ---- |\n| Session复制 | 高开销  |\n| 粘性会话      | 负载不均 |\n| 外部存储      | 推荐方案 |\n\n推荐架构：\n\n```\nLoadBalancer\n   ↓\nStateless Tomcat\n   ↓\nSession Store (Redis)\n```\n\n---\n\n# 12. 安全模型\n\n安全控制层次：\n\n1 网络连接控制\n2 认证授权\n3 传输加密\n4 应用隔离\n5 安全策略\n\n---\n\n# 13. 性能优化体系\n\n## 13.1 网络层\n\n* keepalive\n* 压缩\n* 非阻塞IO\n\n## 13.2 线程模型\n\n* Executor共享线程池\n* 队列控制\n\n## 13.3 应用层\n\n* 减少对象创建\n* 会话最小化\n* 缓存\n\n---\n\n# 14. Tomcat 在现代架构中的位置\n\n```\nBrowser\n   ↓\nCDN\n   ↓\nReverse Proxy\n   ↓\nTomcat\n   ↓\nApplication\n   ↓\nDatabase\n```\n\n---\n\n# 15. 技术演进方向\n\n| 方向            | 说明                  |\n| ------------- | ------------------- |\n| 阻塞 → 非阻塞      | NIO / Async Servlet |\n| 单体 → 云原生      | 容器化部署               |\n| 同步 → Reactive | 事件驱动                |\n| HTTP1 → HTTP3 | QUIC                |\n\n---\n\n# 16. 总结\n\nTomcat 本质不是 Web 服务器实现，而是：\n\n**一个协议驱动的组件执行操作系统。**\n\n其核心能力：\n\n* 网络事件处理\n* 请求路由\n* 组件生命周期管理\n* 类加载隔离\n* 执行管线扩展\n\n它提供的是：\n\n一个可隔离、可扩展、可管理的 Web 组件运行时环境。\n\n---\n\n## 关联内容（自动生成）\n\n- [/编程语言/JAVA/高级/Servlet.md](/编程语言/JAVA/高级/Servlet.md) Servlet规范定义了Java Web容器的标准接口，Tomcat是其重要实现\n- [/中间件/web中间件/web中间件.md](/中间件/web中间件/web中间件.md) Web中间件是位于网络协议层与应用业务逻辑层之间的系统软件，Tomcat是其中的Web容器实现\n- [/编程语言/JAVA/JVM/类加载机制.md](/编程语言/JAVA/JVM/类加载机制.md) Tomcat的类加载机制基于JVM的类加载体系，实现了Web应用的隔离\n- [/计算机网络/http/HTTP.md](/计算机网络/http/HTTP.md) Tomcat作为HTTP服务器，处理HTTP协议的请求和响应\n- [/中间件/web中间件/Nginx.md](/中间件/web中间件/Nginx.md) Nginx与Tomcat经常配合使用，Nginx处理静态资源，Tomcat处理动态请求\n- [/编程语言/JAVA/高级/NIO.md](/编程语言/JAVA/高级/NIO.md) Tomcat的NIO和NIO2实现基于Java NIO框架，提升并发处理能力\n- [/编程语言/JAVA/JAVA并发编程/线程池.md](/编程语言/JAVA/JAVA并发编程/线程池.md) Tomcat使用线程池处理请求，与Java线程池技术密切相关\n- [/操作系统/容器化.md](/操作系统/容器化.md) Tomcat应用可通过容器化技术进行部署和管理\n- [/编程语言/JAVA/框架/netty/netty.md](/编程语言/JAVA/框架/netty/netty.md) Netty与Tomcat都处理网络请求，但Netty更偏向于底层网络编程框架\n- [/软件工程/架构/系统设计/架构设计.md](/软件工程/架构/系统设计/架构设计.md) Tomcat的架构设计体现了分层、组件化等架构思想\n","metadata":"tags: ['中间件', 'Java']","hasMoreCommit":true,"totalCommits":16,"commitList":[{"date":"2026-03-02T10:15:03+08:00","author":"MY","message":"docs(SUMMARY): 更新文档目录结构并调整章节组织","hash":"291401ad85fb2dca108efed36ead29f7bbfe5ed8"},{"date":"2026-02-12T14:07:03+08:00","author":"MY","message":"doc: 整理标签","hash":"290b3e8ad18f48832ac282290238d020fc030a88"},{"date":"2026-02-11T17:59:30+08:00","author":"MY","message":"docs(Tomcat): 重构Tomcat文档内容优化系统架构描述","hash":"c35d51a7b24b2dc1de5a22d9efdd5660ae76761f"},{"date":"2025-11-16T21:30:56+08:00","author":"MY","message":"docs: 统一并精简文档标签","hash":"21362e9d7aeb62e05364cd5e7f3a3c24d7e293c7"},{"date":"2025-11-06T16:05:53+08:00","author":"MY","message":"docs: 为多个文档添加标签元数据","hash":"dc09327da481a60e0d70a640956def97c47a6e7e"},{"date":"2023-10-19T15:35:05+08:00","author":"MY","message":"✏Tomcat","hash":"d0c570fe41ce11dd895b7de3fc90bc05047e8491"},{"date":"2023-10-18T20:10:05+08:00","author":"MY","message":"✏Tomcat","hash":"976ed78fc2ecad1a3ae601ab5b8bc9fea2090873"},{"date":"2023-10-17T20:01:54+08:00","author":"MY","message":"✏Tomcat & Jetty","hash":"a1888d99bb9408cfa0867568c0b1ec77ddff3f93"},{"date":"2023-10-16T20:09:01+08:00","author":"MY","message":"✏Tomcat & Jetty","hash":"ccebf659a71e6ed6e2441dd30f2da6ceedd0bdde"},{"date":"2020-09-05T10:16:46+08:00","author":"MY","message":"✏更新 Tomcat","hash":"0aaf598d264fa93b79fa114a3d6d90cc9a25e6c7"}],"createTime":"2019-08-08T17:07:47+08:00"}