Tomcat 是 Apache 软件基金会旗下的开源 Servlet 容器,实现了 Java EE(现 Jakarta EE)的 Servlet、JSP 等规范,广泛用于 Java Web 应用的部署和运行。其架构设计围绕高效处理 HTTP 请求、灵活管理 Web 应用和支持扩展展开。以下从核心组件、层级结构、关键机制三个维度深入解析 Tomcat 的基本架构。
Tomcat 的架构采用分层容器模型,核心组件包括 Server
、Service
、Engine
、Host
、Context
,以及处理网络通信的 Connector
。各组件通过父子关系形成树状结构,层级越低职责越具体(如处理单个 Web 应用)。
Server
是 Tomcat 的根组件,代表整个 Tomcat 服务器实例。它的主要职责是:
Service
(服务),每个 Service
是独立的处理单元(可包含多个 Connector
和一个 Engine
)。关键特性:
org.apache.catalina.core.StandardServer
。server.xml
配置端口(如关闭命令端口 shutdown="SHUTDOWN"
)。Service
是 Server
的子组件,负责整合连接器(Connector)和引擎(Engine),是请求处理的核心路径。一个 Server
可包含多个 Service
(如同时支持 HTTP 和 AJP 协议),但生产环境通常仅配置一个。
关键特性:
org.apache.catalina.core.StandardService
。name
属性标识(如 Catalina
),在日志中可见。Connector
是 Tomcat 处理网络请求的“入口”,负责监听指定端口、解析网络协议(如 HTTP/1.1、AJP),并将请求转换为 Servlet 规范的 ServletRequest
对象。
核心职责:
ServletRequest
并传递给 Engine
处理。关键类型:
配置示例(server.xml):
xml
复制
connectionTimeout="20000"
redirectPort="8443" />
Engine
是 Service
的子组件,负责实际处理请求,是 Tomcat 的 Servlet 处理核心。它接收 Connector
传递的请求,根据请求的域名/IP 分发给对应的 Host
(虚拟主机)。
关键职责:
Host
(虚拟主机)。默认实现类:org.apache.catalina.core.StandardEngine
。
Host
是 Engine
的子组件,代表一个“虚拟主机”(对应一台物理服务器上的多个域名/IP)。它负责将请求路由到具体的 Web 应用(Context
)。
核心职责:
Context
(Web 应用)。Host
头,匹配对应的虚拟主机。关键特性:
org.apache.catalina.core.StandardHost
。webapps
目录下的 WAR 包)。Context
是 Host
的子组件,代表一个具体的 Web 应用(对应一个 WAR 包或目录)。它负责加载应用资源(如 WEB-INF/web.xml
、类、静态文件),并管理 Servlet 实例的生命周期。
核心职责:
web.xml
(或注解配置)。WebappClassLoader
加载类)。service()
方法)。默认实现类:org.apache.catalina.core.StandardContext
。
理解 Tomcat 架构的核心是掌握请求从接收至响应的完整流程。以下是简化的请求处理链路:
GET /user HTTP/1.1
)。HttpServletRequest
对象。Host
头(如 localhost
)找到对应的 Host。/user
)找到对应的 Context(即部署在 /user
的 Web 应用)。web.xml
或注解,找到匹配的 Servlet(如 UserController
),调用其 doGet()
方法。Tomcat 为每个 Web 应用(Context
)提供独立的类加载器(WebappClassLoader
),避免不同应用的类冲突(如不同版本的同名类)。类加载顺序遵循“父优先”原则:
text
复制
Bootstrap ClassLoader → Extension ClassLoader → Application ClassLoader → Shared ClassLoader → Webapp ClassLoader
Shared ClassLoader
加载,所有应用共享。UserService
)由 Webapp ClassLoader
加载,仅当前应用可见。Tomcat 通过线程池处理并发请求,核心是 Connector
中的 Executor
(线程池)。默认情况下,Connector
使用自带的线程池(org.apache.catalina.core.StandardThreadExecutor
),可通过 server.xml
配置参数:
xml
复制
minSpareThreads="25"
maxIdleTime="60000"/>
Tomcat 所有组件(Server
、Service
、Engine
等)均实现 Lifecycle
接口,支持统一的生命周期管理(init()
→ start()
→ stop()
→ destroy()
)。例如,启动 Tomcat 时:
Server.init()
初始化所有子组件。Server.start()
启动 Service
,进而启动 Connector
(监听端口)和 Engine
。Connector
,再停 Engine
,最后停 Server
)。Tomcat 内置安全模块,支持:
tomcat-users.xml
配置用户和角色(如 admin
角色可访问管理界面)。Tomcat 的架构设计围绕以下核心目标:
Connector
、Valve
(阀门,请求处理链中的扩展点)、Context
等组件。/manager
应用)、配置文件(server.xml
、web.xml
)和命令行工具。Tomcat 的架构是典型的分层容器模型,通过 Server
→Service
→Engine
→Host
→Context
的层级结构,实现了请求的高效分发和处理。其核心优势在于对 Servlet 规范的完整支持、灵活的组件化设计,以及通过线程池、类加载隔离等机制平衡性能与隔离性。理解这一架构有助于优化 Tomcat 配置(如调整线程池大小)、排查问题(如类冲突),并为扩展功能(如自定义 Valve)奠定基础。