Tomcat 基础与整体架构
在这一篇,我们从宏观架构:整体运行环境和服务绑定Connector:协议处理入口(Coyote)Container:请求执行核心(Catalina)启动流程配置体系这为后续深入理解连接器原理、容器体系、类加载机制打下基础。
Tomcat 基础与整体架构
1. 引言
Tomcat 是 Apache 基金会下最成功的开源项目之一,既是 Servlet 容器,又可作为 轻量级 Web 服务器。
它实现了 Servlet 规范 和 JSP 规范,是大多数 Java Web 应用的默认运行环境。
要理解 Tomcat,必须先掌握它的整体架构,包括核心组件、生命周期、配置与源码入口。
2. Tomcat 的定位
- Web 服务器:可以处理 HTTP 请求,返回静态文件(HTML、CSS、JS、图片等)。
- Servlet 容器:遵循 Java Servlet 规范,支持动态请求处理(Servlet、JSP、Filter、Listener)。
- 嵌入式应用容器:Spring Boot 默认内置 Tomcat,简化了应用部署。
Tomcat 不是功能最全的 Web 服务器,但它轻量、灵活,适合 中小型应用和微服务架构。
3. Tomcat 核心组件模型
Tomcat 内部采用 分层解耦 的设计,主要分为两大核心部分:
-
Connector(连接器)
- 负责接收请求、解析协议(HTTP/HTTPS/AJP)、封装成 Request/Response,再交给容器处理。
- 核心类:
org.apache.coyote.http11.Http11NioProtocol
-
Container(容器)
- 负责执行请求,调用对应的 Servlet。
- 采用四层容器模型:Engine → Host → Context → Wrapper。
- 核心类:
org.apache.catalina.core.StandardEngine
两者之间由 Service 进行绑定,最终由 Server 统一管理。
👉 结构图:
Server
└── Service
├── Connector (Coyote)
└── Container (Catalina)
└── Engine
└── Host
└── Context
└── Wrapper
4. Server 与 Service
-
Server
- 整个 Tomcat 实例的顶层对象,代表一个运行的 Tomcat 进程。
- 管理多个 Service,可通过 JMX 暴露管理接口。
- 配置入口:
<Server port="8005" shutdown="SHUTDOWN">
-
Service
- 将多个 Connector 与一个 Container 组合在一起。
- 一个 Service 可以同时支持 HTTP、HTTPS、AJP 协议。
- 配置入口:
<Service name="Catalina">
源码入口:
// org.apache.catalina.startup.Catalina
public void load() {
Server server = new StandardServer();
// 解析 server.xml,创建 Service、Connector、Container
}
5. Connector(连接器)
-
作用:负责监听端口、接收请求、解析协议。
-
协议实现:
- BIO(阻塞 IO)
- NIO(非阻塞 IO,默认)
- APR(基于 Apache Portable Runtime,性能更高)
请求流转:
- Socket 接收请求 → Endpoint
- 协议解析(HTTP/1.1、AJP) → Processor
- 封装为 Request/Response 对象
- 转交给 Container 处理
源码关键类:
org.apache.coyote.AbstractProtocol
org.apache.coyote.http11.Http11Processor
6. Container(容器)
容器是 Tomcat 的核心,负责 请求分发与执行 Servlet。采用 四层嵌套容器模型:
- Engine:一个 Service 只能有一个 Engine,代表整个 Servlet 引擎。
- Host:表示一个虚拟主机(域名绑定)。
- Context:表示一个 Web 应用(对应
webapps/
目录下的项目)。 - Wrapper:表示单个 Servlet 实例。
👉 请求流转:
Connector → Engine → Host → Context → Wrapper → Servlet
源码关键类:
org.apache.catalina.core.StandardEngine
org.apache.catalina.core.StandardHost
org.apache.catalina.core.StandardContext
org.apache.catalina.core.StandardWrapper
7. Tomcat 启动流程
Tomcat 的启动由 Bootstrap 完成:
-
Bootstrap 初始化
- 加载配置文件
server.xml
- 初始化 Catalina(核心控制器)
- 加载配置文件
-
Catalina 加载 Server
- 创建 StandardServer → Service → Connector/Container
-
启动 Server
- 调用
server.start()
,启动所有 Service - Service 内部启动 Connector(监听端口)、Container(初始化 WebApp)
- 调用
源码入口:
// org.apache.catalina.startup.Bootstrap
public static void main(String[] args) {
Bootstrap bootstrap = new Bootstrap();
bootstrap.init();
bootstrap.start();
}
8. Tomcat 配置文件结构
-
server.xml
- 定义 Server、Service、Connector、Engine、Host
- 入口配置文件
-
web.xml
- 定义 Servlet、Filter、Listener
- 全局与应用级别配置
-
context.xml
- 定义 Web 应用上下文配置(Session、数据源、JNDI)
👉 配置关系图:
server.xml
└── Service
├── Connector
└── Engine
└── Host
└── Context
└── web.xml
9. 总结
在这一篇,我们从 宏观架构 出发,梳理了 Tomcat 的核心组成:
- Server/Service:整体运行环境和服务绑定
- Connector:协议处理入口(Coyote)
- Container:请求执行核心(Catalina)
- 启动流程:Bootstrap → Catalina → Server
- 配置体系:server.xml、web.xml、context.xml
这为后续深入理解 连接器原理、容器体系、类加载机制 打下基础。
更多推荐
所有评论(0)