Tomcat新版本与之前版本差异
1. Apache Tomcat 最新版本
主线稳定版(推荐生产):
Tomcat 10.1.x(LTS / Jakarta EE 9)新一代版本(前沿):
Tomcat 11.x(Jakarta EE 10,逐步成熟中)仍在维护的旧版本(不推荐新项目):
- Tomcat 9.x(基于 Java EE / javax)
- Tomcat 8.5.x(维护期末)
1.1 版本关键差异
| 版本 | 规范 | 包名变化 | 适用场景 |
|---|---|---|---|
| Tomcat 9 | Java EE 8 | javax.* |
老系统兼容 |
| Tomcat 10 | Jakarta EE 9 | jakarta.* |
新项目(主流) |
| Tomcat 11 | Jakarta EE 10 | jakarta.* |
前沿 / 实验 |
1.2 核心变更
命名空间迁移:
1
javax.servlet → jakarta.servlet
兼容问题:
老 WAR 包无法直接运行在 Tomcat 10+
需要使用迁移工具:
tomcat-jakartaee-migration
2. Tomcat 目录结构
典型解压目录结构如下:


1 | apache-tomcat/ |
3. 目录结构深度解析
3.1 bin —— 启动控制层
1 | startup.sh / shutdown.sh |
关键点:
实际入口:
catalina.shSRE常见操作:
1
export CATALINA_OPTS="-Xms2G -Xmx2G -XX:+UseG1GC"
3.2 conf —— 配置中心
1 | server.xml |
重点配置文件:
| 文件 | 作用 |
|---|---|
| server.xml | 端口、Connector、线程池 |
| web.xml | 全局默认 servlet |
| context.xml | 全局应用配置 |
| tomcat-users.xml | 管理用户 |
3.3 webapps —— 应用部署目录
1 | webapps/ |
部署方式:
1 | cp app.war webapps/ |
生产建议:
- 禁用
manager/host-manager - 使用 CI/CD + 外部部署目录
3.4 lib —— 类加载层(Common ClassLoader)
支持第三方扩展类
1 | lib/*.jar |
加载优先级:
Bootstrap → System → Common → Webapp
用途:
- JDBC 驱动
- 公共依赖
3.5 logs —— 日志系统
1 | catalina.out |
SRE关注点:
- GC日志(建议单独配置)
- 访问日志(用于流量分析)
- 日志切割(logrotate)
3.6 work —— JSP 编译缓存
1 | work/Catalina/localhost/app/ |
- JSP → Servlet 编译产物
- 清理可强制重新编译
3.7 temp —— 临时目录
- 上传文件缓存
- Session 临时文件
4. Tomcat 启动流程
flowchart TD
A[startup.sh] --> B[catalina.sh]
B --> C[Bootstrap]
C --> D[加载server.xml]
D --> E[初始化Connector]
E --> F[加载Web应用]
F --> G[启动线程池]
G --> H[监听HTTP请求]