Tomcat结构详解

张开发
2026/4/3 18:52:51 15 分钟阅读
Tomcat结构详解
Tomcat 的核心架构其实就是一个高度结构化的俄罗斯套娃。它采用“容器Container”的设计模式最外层包裹着最内层每一层只负责特定的任务。理解这套架构你就理解了 Tomcat 的“骨架”。一、 Tomcat 的“套娃”架构图你可以把 Tomcat 想象成一个“集团总部”它的层级结构如下Server (集团老总) └── Service (业务部门) ├── Connector (前台接待) -- 负责“接电话”和“说人话” (处理HTTP协议) └── Engine (业务主管) -- 负责“转派工单” (路由请求) └── Host (分公司) -- 负责“按区域划分” (虚拟主机/域名) └── Context (具体项目) -- 负责“具体干活” (Web应用) └── Wrapper (干活员工) -- 负责“执行代码” (Servlet)二、 核心组件详解角色与职责2.1 Service业务单元定义一个独立完整的服务能力单元。作用它是 Tomcat 的“骨干”。一个 Server 可以包含多个 Service但通常我们只需要一个。它的核心任务是“联姻”——把“Connector接客的”和“Engine干活的”绑在一起确保请求能准确传递。2.2 Connector连接器前台定义监听特定端口默认 8080负责网络通信。职责建立连接监听 Socket 端口等待浏览器连接。协议转换把浏览器发来的二进制 HTTP 请求“翻译”成 Tomcat 能看懂的 Request对象把 Java 处理后的结果“翻译”回 HTTP 响应发回去。处理并发管理线程池处理高并发访问。2.3 Container容器后台这是 Tomcat 的“流水线”由 4 层容器嵌套而成每一层只处理自己职责内的事层级组件对应现实生活核心职责1​、Engine​总经理​路由调度。拿到请求后不看具体业务只看该交给哪个分公司Host处理。2、​Host​分公司/站点​域名匹配。比如 www.baidu.com和 map.baidu.com就是两个不同的 Host。它根据域名找到对应的项目文件夹。3​、Context​具体项目​路径匹配。比如 localhost:8080/myapp。它代表一个具体的 Web 应用WAR包解压后的文件夹。4、​Wrapper​具体功能​Servlet封装。代表一个具体的 Java 类如 LoginServlet。它是容器的最底层直接调用你的业务代码。三、 数据流转从请求到响应比如当浏览器访问 http://localhost:8080/myapp/login时数据在组件间的流转路径如下第一步Connector 接客协议层浏览器发送 HTTP 请求到 Tomcat 的 8080​ 端口。Connector​ 监听到连接将 Socket 字节流解析成标准的 Request对象并创建对应的 Response对象。动作Connector 大喊一声“有个活儿来了交给 Engine 处理”第二步Engine 分发路由层Engine​ 拿到 Request提取出请求头中的 Host信息如 localhost。动作Engine 根据 Host 名找到对应的 Host​ 容器把请求“扔”过去。第三步Host 定位站点层Host​ 拿到 Request提取出 URL 路径中的项目名如 /myapp。动作Host 根据项目名找到对应的 Context​ 容器即 webapps/myapp目录把请求“扔”过去。第四步Context 匹配应用层Context​ 拿到 Request提取出具体的资源路径如 /login。动作Context 查阅自己的“路由表”web.xml或注解发现 /login对应的是 LoginServlet于是找到包装它的 Wrapper。第五步Wrapper 执行执行层Wrapper​ 是 Servlet 的封装。动作检查 LoginServlet实例是否存在不存在就先创建单例模式。调用 init()仅第一次和 service()方法。你的 Java 代码开始执行处理登录逻辑。第六步原路返回Servlet 执行完毕结果写入 Response。数据沿着 Wrapper - Context - Host - Engine - Connector​ 原路返回。Connector​ 把 Response 对象“翻译”成 HTTP 响应报文通过 Socket 发回浏览器。四、 关键机制Pipeline Valve管道与阀门Tomcat 不仅是一层一层往下传中间还有一道“安检流水线”这叫 Pipeline管道。机制每个容器Engine, Host, Context, Wrapper内部都有一根管道。阀门Valve管道上可以挂很多阀门。请求在流经每个容器时必须先经过这些阀门。AccessLogValve记录访问日志谁在几点访问了哪个页面。RemoteAddrValveIP 黑白名单过滤拒绝某个 IP 访问。ErrorReportValve统一处理 404 或 500 错误页面。这就好比包裹在快递柜流转每经过一个站点容器都要经过一道安检机阀门最后才到达收件人Servlet手中。

更多文章