SpringBoot WAR包部署Tomcat10后REST接口访问404问题
问题根因
核心原因是版本完全不兼容,这也是为什么Tomcat启动时完全不输出Spring Boot初始化日志——你的Spring应用根本没被Tomcat加载:
- 你当前使用的Spring Boot 2.7.0 基于Java EE 8(Servlet 4.0)规范,所有Servlet相关API用的都是
javax.*包前缀 - Tomcat 10.0.x 属于Jakarta EE 9系列实现,Servlet相关API已经全部迁移到
jakarta.*包前缀,无法识别基于旧javax.servlet规范编写的SpringBootServletInitializer启动类,所以只有JSP、静态页面这类Tomcat默认Servlet能直接解析的资源可以访问,所有Spring容器管理的REST接口全部返回404。
修复方案
两个方案选一个即可:
- 方案1(改动最小,推荐):把独立部署的Tomcat降级到9.0.x版本。Tomcat 9基于Servlet 4.0规范,和Spring Boot 2.7.x完全适配,替换版本后重新部署war包即可正常加载Spring上下文。
- 方案2(必须用Tomcat10时选):把项目的Spring Boot版本升级到3.0.x及以上。Spring Boot 3基于Jakarta EE规范,原生适配Tomcat10,注意升级后需要把项目中所有直接引用的
javax.servlet.*相关导入全部替换为jakarta.servlet.*,重新打包后部署即可。
部署校验注意事项
修复后部署时注意以下几点避免踩坑:
- 打包时执行
mvn clean package命令生成war包,不要直接在Eclipse里导出普通war包,避免漏打依赖 - 访问接口时要带上部署的应用上下文前缀,比如你把war包命名为
test.war部署,接口的完整访问路径是http://<服务器IP>:<Tomcat端口>/test/test/User,不要漏掉应用名路径 - 部署成功的标志是Tomcat启动日志中会输出Spring Boot的启动横幅、Bean加载、接口映射相关日志
内容的提问来源于stack exchange,提问作者Miguel Ángel García
相关产品推荐
相关产品推荐

