1. 概述

本文将深入解析 Tomcat 自带的 Manager 应用(Manager App)——一个集成在 Tomcat 服务器中的标准 Web 应用,用于管理已部署的 Web 程序。

简单来说,它就是你的 Tomcat 控制台。通过它,你可以:

✅ 查看服务器状态与资源配置
✅ 部署、启动、停止、重载 Web 应用
✅ 管理用户会话(Session)
✅ 查看 SSL/TLS 配置与诊断信息
✅ 执行线程转储、内存泄漏检测等运维操作

对于运维和开发人员来说,这是一个轻量但功能强大的管理工具,尤其适合自动化脚本集成。


2. 安装 Tomcat

使用 Manager 前,自然要先装好 Tomcat。安装过程非常简单,本文基于最新稳定版 Tomcat 9 进行演示。

📌 提示:可前往 Apache Tomcat 官网 下载对应版本。安装后确保 CATALINA_HOME 环境变量正确设置。


3. 访问 Manager 应用

Tomcat Manager 提供两种访问方式:

  • HTML 界面:适合人工操作
  • 文本接口(Text API):适合脚本或 CI/CD 集成

接口地址

  • HTML 界面:http[s]://<server>:<port>/manager/html/
  • 文本接口:http[s]://<server>:<port>/manager/text/

⚠️ 注意:默认情况下,这些接口是禁止访问的,必须先配置用户权限。

配置访问权限

编辑 $CATALINA_HOME/conf/tomcat-users.xml,添加如下内容:

<tomcat-users>
  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <user username="tomcatgui" password="s3cret" roles="manager-gui"/>
  <user username="tomcattext" password="baeldung" roles="manager-script"/>
</tomcat-users>

说明:

  • manager-gui:允许访问 HTML 界面
  • manager-script:允许使用文本接口(如 curl 调用)
  • 我们创建了两个用户:
    • tomcatgui:用于登录网页
    • tomcattext:用于脚本调用 API

✅ 踩坑提醒:如果遇到 403 错误,请检查角色名是否拼写正确,且 Tomcat 重启后配置已生效。


4. 查看已部署应用

4.1 使用 Web 界面

访问 http://localhost:8080/manager/html,使用 tomcatgui:s3cret 登录。

登录后,页面顶部会列出所有已部署的应用:

Tomcat Manager app list applications

每行信息包括:

  • 应用名称(Context Path)
  • 运行状态(Running/Stopped)
  • 活跃 Session 数
  • 操作按钮:启动、停止、重载、卸载

4.2 使用文本接口

通过 curl 调用文本接口获取应用列表:

curl -u tomcattext:baeldung http://localhost:8080/manager/text/list

输出示例:

OK - Listed applications for virtual host [localhost]
/:running:0:ROOT
/examples:running:0:examples
/host-manager:running:0:host-manager
/manager:running:1:manager
/docs:running:0:docs

格式说明:/上下文路径:状态:活跃会话数:版本

✅ 小技巧:该接口非常适合写监控脚本,比如定期检查关键应用是否存活。


5. 应用管理操作

Manager 支持对应用执行启停、重载等操作。

5.1 Web 界面操作

直接点击对应按钮即可,操作结果会显示在页面顶部提示区。

5.2 文本接口操作

停止应用

curl -u tomcattext:baeldung http://localhost:8080/manager/text/stop?path=/examples
OK - Stopped application at context path [/examples]

启动应用

curl -u tomcattext:baeldung http://localhost:8080/manager/text/start?path=/examples
OK - Started application at context path [/examples]

重载应用

curl -u tomcattext:baeldung http://localhost:8080/manager/text/reload?path=/docs
OK - Reloaded application at context path [/docs]

⚠️ 注意:重载仅对解压部署的应用有效,WAR 包部署的无法热重载类变更。


6. 会话管理

除了应用本身,还可以管理用户会话(Session),比如手动销毁异常会话。

6.1 Web 界面操作

点击应用列表中“Sessions”列的链接,进入会话详情页:

Tomcat Manager app user sessions

可查看:

  • 会话持续时间
  • 最近活跃时间
  • 剩余过期时间(默认 30 分钟)

支持勾选并点击 Invalidate selected sessions 销毁指定会话。

首页还有 Expire sessions 按钮,可批量清理空闲超时的会话。

6.2 文本接口操作

查看会话信息

curl -u tomcattext:baeldung "http://localhost:8080/manager/text/sessions?path=/manager"

输出:

OK - Session information for application at context path [/manager]
Default maximum session inactive interval is [30] minutes
Inactive for [2 - <3] minutes: [1] sessions
Inactive for [13 - <14] minutes: [1] sessions

清理空闲会话

清理 /manager 应用中空闲超过 10 分钟的会话:

curl -u tomcattext:baeldung "http://localhost:8080/manager/text/expire?path=/manager&idle=10"

输出中会显示清理数量:

Inactive for [>10] minutes: [1] sessions were expired

✅ 实战建议:可在定时任务中定期清理长时间空闲会话,防止内存堆积。


7. 部署新应用

准备工作

下载 Tomcat 官方提供的 sample WAR 用于测试部署。

7.1 Web 界面部署

有三种方式:

✅ 方式一:上传 WAR 文件

点击“Deploy”区域的“Choose File”上传 WAR,Manager 会自动以文件名作为 Context Path 部署。

Tomcat Manager app war deploy

部署成功后可通过 http://localhost:8080/sample 访问。

Tomcat Manager app sample application

✅ 方式二:指定本地文件路径

填写 WAR 文件的绝对路径(如 file:/tmp/sample.war)和 Context Path(如 /sample)。

Tomcat Manager app path to war

✅ 方式三:使用 XML 部署描述符

上传一个 Context 配置文件(如 sample.xml),可指定更多参数:

<Context docBase="/tmp/sample.war" reloadable="true" />

⚠️ 注意:XML 中的 path 属性会被忽略,Context Path 由文件名决定(如 sample.xml/sample)。

Tomcat Manager app xml deployment descriptor

7.2 文本接口部署

卸载应用

curl -u tomcattext:baeldung "http://localhost:8080/manager/text/undeploy?path=/sample"
OK - Undeployed application at context path [/sample]

部署 WAR

curl -u tomcattext:baeldung "http://localhost:8080/manager/text/deploy?path=/sample&war=file:/tmp/sample.war"
OK - Deployed application at context path [/sample]

使用 XML 部署

curl -u tomcattext:baeldung "http://localhost:8080/manager/text/deploy?config=file:/tmp/sample.xml"
OK - Deployed application at context path [/sample]

✅ 自动化利器:文本接口非常适合集成到 Jenkins、Ansible 等发布系统中。


8. 查看 SSL 配置

启用 SSL

  1. 生成自签名证书:
keytool -genkey -alias tomcat -keyalg RSA -keystore conf/localhost-rsa.jks
  1. 修改 conf/server.xml,启用 HTTPS Connector:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="conf/localhost-rsa.jks" type="RSA" />
    </SSLHostConfig>
</Connector>

重启 Tomcat 后,HTTPS 服务将在 8443 端口运行。

8.1 Web 界面查看

访问 https://localhost:8443/manager/html,点击 Diagnostics 区域按钮:

Tomcat Manager app TLS buttons

  • Ciphers:列出支持的加密套件
  • Certificates:显示当前证书信息
  • Trusted Certificates:显示受信任 CA(本例为空)

还可动态重载 SSL 配置:

Tomcat manager app re-load SSL

8.2 文本接口查看

# 查看加密套件
curl -ku tomcattext:baeldung "https://localhost:8443/manager/text/sslConnectorCiphers"

# 查看证书
curl -ku tomcattext:baeldung "https://localhost:8443/manager/text/sslConnectorCerts"

# 查看受信任证书
curl -ku tomcattext:baeldung "https://localhost:8443/manager/text/sslConnectorTrustedCerts"

# 重载 SSL 配置
curl -ku tomcattext:baeldung "https://localhost:8443/manager/text/sslReload"
OK - Reloaded TLS configuration for all TLS virtual hosts

⚠️ 注意:-k 参数用于跳过自签名证书的 SSL 验证。


9. 查看服务器状态

点击页面右上角的 Server Status,可查看:

  • JVM 内存使用
  • 线程池状态
  • 请求处理统计
  • 虚拟主机与连接器信息

Tomcat Manager app server status

点击 Complete Server Status 可查看更详细的应用级指标。

❌ 文本接口不支持直接获取状态页,但可通过以下方式获取 XML 格式数据:

  • 完整状态:https://localhost:8443/manager/status?XML=true
  • 所有状态:https://localhost:8443/manager/status/all?XML=true(部分版本不支持)

10. 保存当前配置

Manager 支持将运行时的配置(如动态添加的 Context)保存回 conf/server.xml

启用配置保存功能

conf/server.xml<Server> 标签内添加:

<Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener" />

重启 Tomcat。

保存配置

curl -u tomcattext:baeldung "http://localhost:8080/manager/text/save"
OK - Server configuration saved

✅ 注意:旧版 server.xml 会被备份,但注释可能丢失。


11. 诊断功能

11.1 线程转储(Thread Dump)

获取 JVM 当前线程快照,用于分析死锁或性能瓶颈:

curl -u tomcattext:baeldung "http://localhost:8080/manager/text/threaddump"

输出示例:

OK - JVM thread dump
2019-10-06 23:19:10.066
Full thread dump Java HotSpot(TM) 64-Bit Server VM (11.0.3+12-LTS mixed mode):
...

11.2 检测内存泄漏

Tomcat 提供内存泄漏检测机制,可识别应用重载后未释放的类:

curl -u tomcattext:baeldung "http://localhost:8080/manager/text/findleaks?statusLine=true"
OK - No memory leaks found

✅ 建议:在频繁重载开发环境定期执行此命令。

11.3 查看可用资源

列出全局资源(如 JNDI 数据源):

curl -u tomcattext:baeldung "http://localhost:8080/manager/text/resources"

输出:

OK - Listed global resources of all types
UserDatabase:org.apache.catalina.users.MemoryUserDatabase

12. 总结

Tomcat Manager 是一个功能全面、开箱即用的管理工具,适用于:

  • 日常运维:启停应用、查看状态
  • 故障排查:线程转储、内存泄漏检测
  • 自动化部署:通过文本接口实现 CI/CD 集成

掌握其 HTML 与文本接口的使用,能极大提升 Web 应用的部署与维护效率。

🔗 更多细节可参考官方文档:Tomcat Manager How-To


原始标题:Guide to Tomcat Manager Application