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 目录结构

典型解压目录结构如下:

90594b110baf8410bfa9820040e8b748.png

c0622a870eeba24a687bd34d93a9ca72.png

1
2
3
4
5
6
7
8
apache-tomcat/
├── bin/
├── conf/
├── lib/
├── logs/
├── temp/
├── webapps/
├── work/

3. 目录结构深度解析

3.1 bin —— 启动控制层

1
2
3
startup.sh / shutdown.sh
catalina.sh
setenv.sh(自定义JVM参数)

关键点:

  • 实际入口:catalina.sh

  • SRE常见操作:

    1
    export CATALINA_OPTS="-Xms2G -Xmx2G -XX:+UseG1GC"

3.2 conf —— 配置中心

1
2
3
4
server.xml
web.xml
context.xml
tomcat-users.xml

重点配置文件:

文件 作用
server.xml 端口、Connector、线程池
web.xml 全局默认 servlet
context.xml 全局应用配置
tomcat-users.xml 管理用户

3.3 webapps —— 应用部署目录

1
2
3
4
5
webapps/
├── ROOT/
├── manager/
├── host-manager/
├── your-app.war

部署方式:

1
2
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
2
catalina.out
localhost_access_log.*

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请求]