Tomcat部署Java项目出现Page not found无报错日志问题排查求助
问题排查解决建议
1 部署产物一致性校验
- 完全清空Tomcat的
webapps目录、work/Catalina缓存目录、temp目录后再重新部署,排除旧版本缓存文件未清理导致的逻辑冲突 - 分别导出版本1、版本2、版本3、版本4的war包/部署文件夹,使用diff工具比对三者的目录结构、配置文件(web.xml、spring相关配置、servlet映射规则)、编译后class文件的MD5值,重点确认版本1的部署产物是否和能正常运行的版本2/3存在非预期差异
- 确认你放入项目的测试类编译产物的JDK版本,执行
javap -verbose 你的类名.class查看主版本号,必须为JDK1.8对应的52,避免高版本编译产物在Tomcat运行时不加载但无报错的情况
2 Tomcat运行时排查
- 开启Tomcat的访问日志与调试日志:修改
conf/server.xml开启AccessLogValve,修改conf/logging.properties将org.apache.catalina、org.springframework的日志级别调整为DEBUG,复现问题后查看访问日志的请求路径是否和你预期的一致,是否被Tomcat的拦截规则拦截直接返回404 - 启动Tomcat后访问Tomcat默认的ROOT项目的/index.jsp,确认Tomcat本身运行正常,再访问目标项目的根路径确认项目是否成功部署完成:如果根路径也返回404,说明项目未被Tomcat正常加载,而非单个接口的问题
- 对比能正常运行的版本2/3和报错版本的Tomcat启动日志,查看是否有类加载失败、上下文初始化失败的静默报错,部分框架的异常捕获逻辑会吃掉启动异常导致项目处于半启动状态,仅返回404无错误日志
3 IDE构建配置校验
- 检查Intellij的项目结构配置:File -> Project Structure中确认Project SDK、Modules SDK、SDKs配置全部为JDK1.8,确认Artifacts的打包规则是否正确包含了你修改的类,是否存在测试类被错误打入生产部署包、或者业务类被排除到部署包外的配置
- 关闭Intellij的自动构建,手动执行Build -> Rebuild Project后再导出部署产物,避免增量编译导致的class文件未更新问题
- 脱离IDE直接使用Maven/Gradle(你项目的构建工具)执行clean package命令构建版本1的部署包,放到Tomcat中运行,排查是否是IDE的构建配置异常导致的产物问题
4 隐式依赖与配置排查
- 检查你本机的环境变量、CLASSPATH配置,是否存在全局的jar包冲突,导致版本1的代码加载了非预期的依赖
- 排查项目是否存在外置配置文件(比如放在Tomcat的conf目录、或者系统用户目录下的配置文件),这类配置不会随代码回滚变更,可能是版本4的修改更新了外置配置,导致回滚代码后配置不匹配出现404
- 对比版本1、2、3、4的pom.xml/gradle.build依赖配置,确认是否存在依赖版本的隐性变更,比如依赖的SNAPSHOT版本被远程更新,即使代码回滚拉取的依赖还是最新版本导致问题
内容的提问来源于stack exchange,提问作者vishalK
相关产品推荐
相关产品推荐

