Catalina:Tomcat 的核心 Servlet 容器解析
Catalina 是 Tomcat 的核心组件,负责管理 Servlet 的生命周期、处理 HTTP 请求并协调各组件工作。自 Tomcat 4.0 起,Catalina 成为 Servlet 容器的正式名称,其设计采用模块化架构,通过解析server.xml配置文件构建服务器实例,协调连接器(Connector)与容器(Container)的协作。本文深入解析 Catalina 的工作原理、组件解析流程及核心配置逻辑。

Catalina 的核心定位与架构
Catalina 是 Tomcat 的 “大脑”,承担以下核心职责:
- 解析
server.xml配置文件,创建并管理 Server、Service、Connector、Container 等组件; - 协调连接器(接收请求)与容器(处理请求)的交互;
- 管理 Servlet 的加载、初始化、请求处理及销毁全生命周期;
- 集成其他模块(如 Coyote 负责通信、Jasper 处理 JSP、JNDI 提供命名服务)。
其架构可简化为:
1 | Catalina → Server → Service → (Connector + Container) |
- Server:顶层组件,代表整个 Tomcat 实例;
- Service:关联 Connector 与 Container,实现 “接收请求 - 处理请求” 的链路;
- Connector:处理网络通信,解析 HTTP 请求;
- Container:处理请求的核心,包含 Engine、Host、Context、Wrapper 四级容器。
Catalina 的启动流程:从配置到组件初始化
Catalina 的启动始于org.apache.catalina.startup.Catalina类,核心步骤包括:
- 加载配置:通过
load()方法解析server.xml,生成组件对象; - 初始化组件:调用
Server.init(),逐层初始化 Service、Connector、Container 等; - 启动服务:调用
Server.start(),启动所有组件,监听端口等待请求。
其中,解析server.xml 是核心环节,由Digester工具完成(将 XML 标签映射为 Java 对象)。
Digester:XML 到 Java 对象的转换工具
Catalina 使用Digester(基于 SAX 的 XML 解析工具)将server.xml转换为组件对象。Digester 通过 “规则定义” 关联 XML 标签与 Java 类,例如:
- 遇到
<Server>标签时,创建StandardServer实例; - 遇到
<Connector>标签时,创建Connector实例并添加到 Service。
核心规则示例:
1 | // 创建Server实例(对应<Server>标签) |
server.xml解析:组件创建全流程

server.xml是 Catalina 的 “蓝图”,定义了从 Server 到 Wrapper 的所有组件。以下是关键组件的解析逻辑:
1. Server 组件(顶层服务器)
作用:代表整个 Tomcat 实例,管理多个 Service,监听 8005 端口接收关闭命令。
解析规则:
1
<Server port="8005" shutdown="SHUTDOWN">...</Server>
port:关闭端口;shutdown:关闭命令字符串(默认 “SHUTDOWN”)。- Digester 创建
StandardServer实例,通过setServer()方法关联到 Catalina。
2. GlobalNamingResources(全局 JNDI 资源)
作用:定义所有应用共享的 JNDI 资源(如用户数据库)。
解析规则:
1
2
3<GlobalNamingResources>
<Resource name="UserDatabase" type="org.apache.catalina.UserDatabase" ... />
</GlobalNamingResources>- 解析为
NamingResourcesImpl实例,通过setGlobalNamingResources()关联到 Server。
- 解析为
3. Listener(生命周期监听器)
- 作用:监听 Server 的生命周期事件(如启动、关闭),执行初始化或清理操作。
- 常见监听器:
VersionLoggerListener:启动时打印版本信息;AprLifecycleListener:加载 APR 库(优化网络性能);JreMemoryLeakPreventionListener:防止 JVM 内存泄漏。
4. Service(服务)
作用:关联 Connector 与 Container,一个 Service 包含多个 Connector 和一个 Engine。
解析规则:
1
<Service name="Catalina">...</Service>
- 解析为
StandardService实例,通过addService()关联到 Server。
- 解析为
5. Executor(共享线程池)
作用:为 Connector 提供共享线程池,减少线程创建开销。
解析规则:
1
<Executor name="tomcatThreadPool" maxThreads="150" minSpareThreads="4" />
maxThreads:最大线程数;minSpareThreads:核心线程数。- 解析为
StandardThreadExecutor实例,通过addExecutor()关联到 Service。
6. Connector(连接器)
作用:监听端口(如 8080),接收 HTTP 请求并转发给 Container。
解析规则:
1
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
port:HTTP 端口;protocol:协议(如 “HTTP/1.1”);redirectPort:HTTPS 重定向端口。- 解析为
Connector实例,通过addConnector()关联到 Service。
7. Engine(Servlet 引擎)
作用:最顶层容器,管理多个虚拟主机(Host),根据域名分发请求。
解析规则:
1
<Engine name="Catalina" defaultHost="localhost">...</Engine>
defaultHost:默认虚拟主机(需与某 Host 的name匹配)。- 解析为
StandardEngine实例,通过setContainer()关联到 Service。
8. Host(虚拟主机)
作用:代表一个域名(如
localhost),管理多个 Web 应用(Context)。解析规则:
1
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">...</Host>
appBase:应用部署目录(默认webapps);autoDeploy:自动部署新增应用。- 解析为
StandardHost实例,通过addChild()关联到 Engine。
9. Context(Web 应用)
作用:代表一个 Web 应用(如
/myapp),管理 Servlet(Wrapper)。解析规则:
1
<Context path="/myapp" docBase="/data/myapp" reloadable="true" />
path:访问路径;docBase:应用实际路径;reloadable:是否自动重载类文件。- 解析为
StandardContext实例,通过addChild()关联到 Host。
10. Valve(阀门)
- 作用:拦截请求 / 响应,实现日志、安全等功能(类似过滤器)。
- 常见阀门:
AccessLogValve:记录访问日志(路径、状态码等);RemoteAddrValve:限制特定 IP 访问。
Catalina 的组件协作:请求处理流程
- 接收请求:Connector 监听端口,接收 HTTP 请求并解析为
ServletRequest; - 转发请求:Connector 将请求交给 Service 关联的 Engine;
- 路由请求:Engine 根据域名匹配 Host,Host 根据路径匹配 Context;
- 处理请求:Context 找到对应的 Wrapper(Servlet),调用其
service()方法; - 返回响应:响应经 Context→Host→Engine→Connector 返回给客户端。