Tomcat的工作原理

Tomcat 是一个开源的 Java Servlet 容器,同时也是一个轻量级 Web 服务器。它的核心工作原理是:通过 Connector(连接器) 接收并解析网络请求,再通过 Container(容器) 按层级路由到对应的 Servlet 执行业务逻辑,最后将响应原路返回给客户端。

一、核心架构(组件树)

Tomcat 采用分层、模块化的组件设计,核心组件关系如下:
plaintext
Server (整个服务器实例)
└── Service (服务单元,关联连接器与引擎)
    ├── Connector (连接器,可多个,处理网络通信)
    └── Container (容器,处理业务逻辑)
        └── Engine (引擎,顶层容器,管理虚拟主机)
            └── Host (虚拟主机,对应域名)
                └── Context (Web应用,对应WAR包/目录)
                    └── Wrapper (Servlet包装器,管理单个Servlet)

1. 顶层组件

  • Server:代表整个 Tomcat 实例,管理生命周期,监听 shutdown 端口(默认 8005)。
  • Service:将一组 Connector 与一个 Engine 绑定,实现多端口 / 多协议共享同一套 Web 应用。

2. Connector(连接器)—— 网络通信层

负责与客户端交互,将 Socket 字节流转换为 Servlet 容器可识别的 Request/Response 对象。
  • Endpoint:底层 I/O 处理,监听端口、接收连接(Tomcat 8+ 默认 NIO,Reactor 模式)。
  • Processor:协议解析(HTTP/1.1、HTTP/2、AJP),将字节流解析为内部请求对象。
  • Adapter:适配转换,将 Tomcat 内部 Request 转为标准 ServletRequest,供容器调用。

3. Container(容器)—— 业务处理层

采用 Pipeline-Valve(管道 - 阀门) 责任链模式,逐层处理请求。
  • Engine:请求处理入口,根据 Host 头路由到对应虚拟主机。
  • Host:对应一个域名(如 localhostwww.example.com),管理该域名下的所有 Web 应用。
  • Context:对应一个 Web 应用(如 /myapp),管理 Servlet、Filter、Listener 及类加载器。
  • Wrapper:最底层容器,封装单个 Servlet,管理其生命周期(加载、初始化、service、销毁)。

二、请求处理全流程(HTTP 请求为例)

  1. 连接建立:客户端发起 HTTP 请求,Connector 的 Endpoint 监听端口(如 8080),Acceptor 接收 TCP 连接。
  2. I/O 与协议解析:Poller 线程管理 Socket,工作线程从线程池取出,Processor 解析 HTTP 协议,生成 Tomcat 内部 Request 对象。
  3. 适配转换:CoyoteAdapter 将内部 Request 转换为标准 ServletRequest,传递给 Engine 容器。
  4. 容器路由
    • Engine 通过 Mapper 组件,根据请求的 Host 找到对应 Host 容器。
    • Host 根据请求路径(如 /myapp)找到对应 Context(Web 应用)。
    • Context 根据 URL 匹配规则,找到处理该请求的 Wrapper(Servlet)。
  5. Pipeline 执行:每个容器的 Pipeline 依次执行 Valve,最终到达 StandardWrapperValve。
  6. Servlet 调用
    • Wrapper 加载并实例化 Servlet(若未加载),调用 init() 初始化。
    • 创建 FilterChain,依次执行所有匹配的 Filter,最后调用 Servlet 的 service() 方法。
    • Servlet 执行业务逻辑(如 doGet()/doPost()),生成 ServletResponse
  7. 响应返回:响应沿原路径返回,经 Adapter 转换、Processor 封装为 HTTP 响应,通过 Socket 发送给客户端。

三、关键机制

  1. 类加载机制:打破 Java 双亲委派,每个 Context 有独立的 WebAppClassLoader,实现 Web 应用间类隔离。
  2. 生命周期管理:所有组件实现 Lifecycle 接口,统一管理 init、start、stop、destroy 流程。
  3. Pipeline-Valve 模式:提供灵活的扩展点,可在请求处理的各个阶段插入自定义逻辑。
  4. 线程池:Connector 使用线程池处理并发请求,提升性能。

四、总结

Tomcat 通过 Connector 负责网络通信Container 负责业务路由与 Servlet 执行,将复杂的 Web 请求处理解耦为清晰的分层流程,既实现了 Web 服务器的功能,又完整支持 Servlet/JSP 规范,是 Java Web 开发的核心基础设施。
上一篇 RSR20-X 学习不到OSPF路由
下一篇 深入理解 Linux 网络 I/O 模型:从阻塞到纯异步的演进