判断Tomcat服务器上部署了哪些项目,最直接的办法就是看webapps目录下有哪些文件夹,再配合登录日志和访问测试做交叉确认。
先搞懂Tomcat存项目的位置
Tomcat本质上是个文件容器,你丢进来的项目最终都会落在某个固定路径下,搞清楚这个路径,就相当于拿到了查看项目部署情况的钥匙。
webapps目录是默认基地
默认情况下,Tomcat把所有应用都放在webapps目录里,你可以打开终端,切换到Tomcat的安装目录,执行:
ls -l /usr/local/tomcat/webapps
看到的结果一般分两种情况:
- 一堆以
.war结尾的文件,表示这些项目还在打包状态,Tomcat启动后才解压 - 与war包同名的文件夹,代表项目已经被解压并运行
举个例子,ls输出里如果有myapp.war和myapp两个同名条目,说明myapp这个应用已经解压部署,访问路径就是http://服务器IP:8080/myapp。
怎么确认Tomcat实际运行路径
有时候Tomcat不在/usr/local/tomcat,或者一台服务器上装了好几个Tomcat实例,这时需要确认真正干活的是哪个版本,行业共识认为,最稳妥的办法是用进程命令反查:
ps -ef | grep catalina
看输出中catalina.home=参数后面的路径,那就是这个Tomcat进程实际使用的目录,如果还不放心,再执行:
ls -l /proc/进程PID/cwd
这个命令会显示进程的工作目录,指向的就是Tomcat的根目录。
怎么看tomcat项目部署成功了
光看到文件夹还不够,部署成功与否,得从三个维度交叉验证。
看启动日志中的部署记录
Tomcat每次启动都会把关键动作写进日志,进入/usr/local/tomcat/logs目录,打开catalina.out文件:
tail -f catalina.out
启动过程中,如果看到类似Deployment of web application archive [myapp.war] has finished的输出,说明应用打包部署没有报错,如果看到Deploying web application directory [myapp],说明是目录形式部署的项目,这两种输出分别是war包和文件夹署的正常标志。
测试访问响应状态码
日志有无异常还不够,直接发起一次HTTP请求是最直接的验证方法,用curl命令测一下:
curl -I http://localhost:8080/myapp
正常返回200 OK,项目大概率已经就绪,返回404,说明项目上下文路径不对或应用内部路由有问题,返回
500,说明项目代码或配置有异常,返回502或504,问题可能出在Tomcat后面的反向代理或应用线程池不够用。
看Tomcat管理器界面
如果你的Tomcat配置了manager应用(默认不开启,需要额外配置用户权限),可以访问http://服务器IP:8080/manager/html,界面里会列出所有已部署的应用名称、运行状态和活跃会话数,这种方式适合图形化管理多个项目,但在生产环境为了安全一般不会开启。
Linux服务器上查看Tomcat部署项目的细节
生产环境绝大多数跑在Linux上,有几个命令组合特别实用,能让你快速理清部署状况。
查看目录里的部署时间
ls -l输出里的时间戳值得多看一眼,如果你刚上传完war包,但文件夹的修改时间没更新,说明Tomcat还没解压它,这时需要触发一次reload或者重启,命令:
stat /usr/local/tomcat/webapps/myapp.war
会显示war包的修改时间、大小和权限,对比当前时间,可以初步判断Tomcat是否处理过这个包,如果war包时间早于Tomcat启动时间,而对应的解压文件夹不存在,大概率是解压失败。
多个Tomcat实例怎么定位
一台服务器安装多个Tomcat时,查找项目路径要更仔细,每次执行startup.sh之前,先看环境变量:
echo $CATALINA_HOME echo $CATALINA_BASE
这两个变量分别指定了Tomcat的安装目录和实例配置目录,有些运维会把多个实例放在不同端口,通过server.xml里的<Connector port="8081">区分,进入对应的conf/server.xml,查看端口对应的<Host>和<Context>配置,也能定位项目实际存放路径。
tomcat部署项目访问不了是什么原因
这一节单独拿出来讲,因为这是排查频率最高的问题,访问不了,先别急着怀疑代码,大多数情况出在这几个地方。
端口没监听或防火墙拦截
先确认8080端口确实在监听:
netstat -anp | grep 8080
有LISTEN状态说明Tomcat正常监听,如果端口没监听,看看Tomcat启动日志有没有报错,如果端口监听正常,但外部访问不通,执行:
firewall-cmd --list-all
检查8080端口是否在允许列表里,云服务器还要额外检查安全组的入方向规则,这是简米云、酷番云上比较常见的坑。
war包没解压或解压失败
重新上传war包后,Tomcat不一定每次都自动解压,你可以把webapps目录下对应的旧文件夹和war包都删掉,然后重启Tomcat,让它重新解压:
rm -rf /usr/local/tomcat/webapps/myapp /usr/local/tomcat/bin/shutdown.sh /usr/local/tomcat/bin/startup.sh
重启后等十几秒,再查看webapps目录,确认文件夹是否生成。
上下文路径和实际访问路径不匹配
war包文件名决定了项目的默认访问路径,例如文件叫demo.war,访问地址就是http://IP:8080/demo,不是http://IP:8080/,如果你需要根路径访问,可以把war包改名为ROOT.war,或者删除webapps下原有的ROOT文件夹,把项目解压后直接命名为ROOT。
还有一种情况是conf/server.xml配置了<Context path="/api" docBase="...">,这种配置的优先级高于war包文件名,访问路径以path属性为准。
项目本身启动失败
日志里如果出现Caused by开头的异常堆栈,基本就是代码层面的问题,常见的两种:
- 数据库连接池配置错误,导致应用初始化直接失败
- 内存配置不足,
java.lang.OutOfMemoryError: PermGen space或Java heap space
前者检查spring.datasource或类似配置,后者调整bin/catalina.sh里的JAVA_OPTS:
JAVA_OPTS="-Xms512m -Xmx1024m"
调完后重启Tomcat再观察。
从日志里跟踪项目运行状态
排查问题时,日志是最可靠的证词,但前提是你知道哪份日志对应什么场景。
catalina.out vs localhost.log
catalina.out记录的是Tomcat自身的启动、停止和部署动作,以及System.out打印的信息。localhost.log按日期记录应用的访问日志和报错堆栈,比如拦截器打印的警告、过滤器抛出的异常。
查看今天的最新日志:
tail -n 200 /usr/local/tomcat/logs/localhost.$(date +%Y-%m-%d).log
设置日志级别拿更多线索
打开conf/logging.properties,找到对应包名的日志级别配置,如果项目开发的com.example.controller包之前没配过级别,加上一行:
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = FINE
重启后日志会输出更细粒度的请求处理过程,方便定位问题。
特定时间段的错误批处理
日志文件很大的时候,先按时间过滤再排查:
grep "2026-03-01 10:" /usr/local/tomcat/logs/catalina.out | grep "ERROR"
把模糊时间换成你想要的具体时间范围,先看有没有集中的报错,集中报错通常说明是某个定时任务或接口调用触发的连锁反应。
Tomcat部署项目常见问题速查
下面这个表格整理了日常运维中比较高频的几类问题和处理方向。
| 现象 | 可能原因 | 检查位置 |
|---|---|---|
| 访问返回404 | war包未解压、上下文路径写错 | webapps目录、server.xml |
| 访问返回500 | 项目代码异常、Bean注入失败 | localhost.log |
| 页面显示空白 | 静态资源路径错误、JSP编译失败 | catalina.out |
| 访问非常慢 | 线程池耗尽、数据库连接池枯竭 | manager界面视图 |
| 重启后项目消失 | 配置了临时目录的外部映射 | server.xml docBase配置 |
查看Tomcat部署的项目,核心就是掌握三个证据:webapps目录下的文件、catalina.out日志里的部署记录、curl请求返回的状态码,三者都指向同一个结论,项目就在正常运行,排查故障时,别绕弯子,先看端口和目录,再看日志,最后才检查代码,这条路走通,Tomcat部署管理基本就没什么能难住你的了。
关于Tomcat项目部署排查的常见问题
Q:Tomcat启动正常但项目目录里没有war包,怎么看部署了什么项目?
如果conf/server.xml里配置了docBase指向外部目录,项目不在webapps下也能正常部署,检查方式:打开conf/server.xml,搜索<Context标签,看有没有docBase属性指向其他路径,比如/data/apps,同时查看conf/Catalina/localhost目录下的XML文件,每一个文件名对应一个部署的应用名,内容里同样有docBase属性。
Q:多个Tomcat应用之间怎么看部署了哪些相同项目?
用diff命令对比两个Tomcat实例的webapps目录,一步到位:
diff /usr/local/tomcat_a/webapps/ /usr/local/tomcat_b/webapps/
会列出两个目录下的文件差异,没有输出则说明两个目录里的项目一致,这个命令同时也能用来核对测试环境和生产环境的部署一致性。
Q:怎么看Tomcat项目的部署时间是成功还是失败?
看catalina.out日志中war包部署的完整过程,成功的标志是出现Deployment of web application archive has finished,失败的话,同一行会出现FAILED字样,紧接着的异常堆栈信息会直接指明失败原因,比如端口占用、XML解析错误或类加载冲突。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/754805.html





