Spring Boot REST API打WAR包部署Tomcat10访问404问题排查
Spring Boot WAR包部署Tomcat返回404问题解决方案
核心根因定位(按影响优先级排序)
- Java编译版本与运行环境不匹配
项目采用Java 11编译生成字节码,但目标Tomcat运行在Java 1.8环境下,JVM最高仅支持Java 8对应的class字节码版本,无法加载Java 11编译的类文件,根本不会触发Spring应用初始化流程,这也是日志中完全缺失Spring启动日志的核心原因。 - 框架与容器大版本规范不兼容
Spring Boot 2.4.4属于2.x分支,全系列基于javax.servlet规范开发;Tomcat 10.0.4开始全面切换为jakarta.servlet规范,二者的Servlet API包名完全不兼容,Tomcat根本无法识别SpringBootServletInitializer的初始化逻辑,即便WAR包解压、类文件正常生成,Spring应用也不会被触发启动。 - 你当前配置的provided作用域
tomcat-embed-jasper、spring-boot-starter-tomcat依赖完全符合外置Tomcat部署的要求,不存在配置错误。
分步排查与修复操作
- 对齐Java运行版本:将运行Tomcat的Java版本升级到11及以上,和项目编译版本保持一致;或将项目Java编译版本下调到1.8,匹配Tomcat当前的运行环境,禁止跨大版本编译、运行Java应用。
- 替换兼容的Tomcat版本:不要使用Tomcat 10部署Spring Boot 2.x的WAR包,更换为Tomcat 9.x版本(该版本基于
javax.servlet规范,与Spring Boot 2.x全版本兼容)。 - 启动日志校验:调整版本后重启Tomcat,查看
catalina.out日志,正常启动时会出现Spring Boot启动banner、WebApplicationContext初始化的相关输出;如果仍无启动日志,检查启动类是否在项目根包路径下,避免组件扫描失效、重写的configure方法被修饰符限制无法被Tomcat调用。 - 访问路径校验:确认REST接口的路径映射未被全局路径配置覆盖,当前WAR包部署在webapps目录下的demo文件夹中,默认上下文路径为
/demo,只要应用正常启动,访问localhost:8080/demo/test即可正常命中接口。
内容的提问来源于stack exchange,提问作者user3218590
相关产品推荐
相关产品推荐

