1. 架构与组件
Tomcat 的核心组件包括:
-
Catalina(Servlet 容器):
- Catalina 是 Tomcat 的核心 Servlet 容器,负责加载和运行 Servlet、管理其生命周期。
- 它实现了 Java Servlet 和 JavaServer Pages(JSP)的规范。
-
Coyote(HTTP 连接器):
- 负责与客户端建立 HTTP 或 HTTPS 协议的连接,并将请求转发给 Catalina。
- Coyote 是一个基于非阻塞 IO(NIO)的高性能网络引擎,支持 BIO、NIO 和 APR 三种模式。
-
Jasper(JSP 引擎):
- 负责将 JSP 文件编译为 Java Servlet 类并交由 Catalina 运行。
- Jasper 会监控 JSP 文件的变更,并在必要时重新编译。
-
Connector(连接器):
- 用于监听客户端请求,将 HTTP 请求解析为 Java 对象,并交由容器处理。
- 支持多种协议(HTTP/1.1、AJP 等)。
-
Lifecycle 管理:
- Tomcat 的组件实现了统一的 Lifecycle 接口,便于管理组件的启动、停止等生命周期事件。
2. 启动与运行流程
Tomcat 的启动和运行包括以下步骤:
-
初始化:
- 启动 Bootstrap 类,加载 Tomcat 的主配置文件
server.xml
。 - 创建和配置 Server、Service、Connector、Engine 等核心组件。
- 启动 Bootstrap 类,加载 Tomcat 的主配置文件
-
绑定端口:
- 连接器(Connector)启动后,会绑定到指定端口(如 8080),并准备接收请求。
-
部署应用:
- 自动扫描
webapps
目录,加载 WAR 文件或解压后的 Web 应用目录。 - 每个 Web 应用都会映射到一个 Context,Catalina 创建独立的 ServletContext。
- 自动扫描
-
请求处理:
- 接收客户端请求,将其封装为 HttpServletRequest 和 HttpServletResponse 对象。
- 按照配置的 URL 映射,将请求分发到对应的 Servlet。
-
资源管理:
- Tomcat 管理线程池,用于处理并发请求。
- 提供内置的静态资源处理器,支持直接返回图片、CSS、JavaScript 等静态资源。
3. 请求处理流程
Tomcat 的请求处理流程分为以下步骤:
-
接收请求:
- 客户端发送 HTTP 请求,Coyote 组件监听到请求后,将其封装为
Request
对象。
- 客户端发送 HTTP 请求,Coyote 组件监听到请求后,将其封装为
-
解析请求:
- Coyote 解析请求头和请求体,将其转换为 Java 对象。
- 通过 Pipeline 和 Valve 机制对请求进行过滤和预处理。
-
分发请求:
- 根据请求的 URL 和 Context 路径,找到对应的 Web 应用。
- 按照映射关系找到具体的 Servlet。
-
执行 Servlet:
- 加载并初始化 Servlet 对象。
- 调用
service()
方法,根据请求类型(GET、POST 等)执行对应的逻辑。
-
返回响应:
- Servlet 将响应内容写入 HttpServletResponse 对象。
- Coyote 负责将响应转换为 HTTP 协议格式并返回给客户端。
4. 核心技术
-
多线程模型:
- 使用线程池管理并发请求,每个请求分配一个线程。
- 减少线程创建和销毁的开销,提升性能。
-
类加载机制:
- 每个 Web 应用拥有独立的类加载器,保证不同应用间的隔离。
- 避免类库冲突,同时支持动态加载。
-
Session 管理:
- Tomcat 提供会话管理机制,通过 Cookie 或 URL 重写实现客户端会话跟踪。
- 支持分布式环境下的 Session 复制和持久化。
-
热部署:
- 支持在运行时添加、更新或删除 Web 应用,而无需重启服务器。
-
安全机制:
- 支持 HTTPS 协议,结合 SSL/TLS 提供加密通信。
- 提供基于角色的访问控制(Role-Based Access Control)。
5. 性能优化机制
-
非阻塞 IO(NIO):
- 使用 NIO 技术处理高并发请求,避免线程阻塞。
- 减少对操作系统资源的依赖。
-
线程池优化:
- 动态调整线程池的大小,保证高效利用资源。
-
静态资源缓存:
- 对常用的静态资源进行缓存,减少磁盘 IO。
-
连接复用:
- 支持 HTTP/1.1 的 Keep-Alive 机制,复用连接以减少握手开销。
-
压缩传输:
- 支持 Gzip 压缩,减少传输的数据量。
6. 配置文件
Tomcat 的核心配置文件包括:
-
server.xml
:- 配置 Server、Service、Engine、Connector 等核心组件。
-
web.xml
:- 定义全局的 Servlet、过滤器和监听器。
-
应用的
web.xml
:- 配置具体 Web 应用的 URL 映射、初始化参数等。
-
context.xml
:- 用于配置单个 Web 应用的上下文。