Tomcat 9.0.52部署WAR包报404,复制ROOT或Eclipse部署可正常运行
根因定位
从报错日志可以直接定位核心问题:test.connection.PooledDataSource类在静态初始化阶段加载配置文件时触发空指针,导致InvokerLoadListener监听器启动失败,Web上下文初始化终止,因此部署后访问返回HTTP Status 404 – Not Found。
不同部署方式表现差异的原因
- 本地运行、Eclipse部署、直接复制ROOT文件夹到服务器这三种场景下,数据源所需的配置文件(通常为
.properties格式的数据库配置文件)存在于类路径下,PooledDataSource可以正常加载配置,所以服务启动正常 - WAR包部署失败是因为你的Ant打包脚本没有把配置文件正确打入WAR包的
WEB-INF/classes目录下,类加载时找不到配置文件触发空指针
解决步骤
- 检查项目的Ant打包脚本
build.xml,确认是否将存放配置文件的目录(一般为src/resources或者独立的config目录)下的所有配置文件,拷贝到最终WAR包的WEB-INF/classes路径下 - 手动校验WAR包完整性:解压生成的WAR文件,查看
WEB-INF/classes目录下是否存在PooledDataSource要加载的配置文件,如果缺失补充打包规则即可 - 可选优化:修改
PooledDataSource的静态初始化代码,增加配置文件不存在的前置校验和明确的异常抛出逻辑,避免无意义的空指针,降低后续排查成本 - 额外校验:确认远程Tomcat 9的
conf/Catalina/localhost/ROOT.xml配置的docBase路径指向正确,没有读取到旧的部署缓存
内容的提问来源于stack exchange,提问作者ace23
相关产品推荐
相关产品推荐

