Spring Boot应用部署到Tomcat 10后访问接口返回404错误
问题根因
核心故障原因是版本规范不兼容:
你使用的Spring Boot 2.6.7 基于Java EE体系的javax.servlet规范开发,而Tomcat 10.0.x 已经全面迁移到Jakarta EE体系,所有Servlet相关接口包名从javax.*改为jakarta.*,两者完全不兼容。这种场景下Tomcat控制台会显示应用已部署,但Spring MVC的核心分发器DispatcherServlet实际没有完成注册,所有接口请求都会返回404。
你执行java -jar spring-boot-deployment.war能正常启动访问,是因为Spring Boot 2.6.7内嵌的Tomcat版本为9.x,本身适配javax.servlet规范,不受外置Tomcat版本影响。
解决方案
两种方案二选一即可,不需要改动业务代码逻辑:
- 方案一:降级外置Tomcat版本
将Tomcat从10.0.22降级到9.x稳定版本,Tomcat 9是最后一个支持javax.servlet规范的大版本,和Spring Boot 2.6.7完全适配,重新把WAR包放到webapps目录部署即可正常访问接口。 - 方案二:升级Spring Boot版本适配Tomcat 10
如果必须使用Tomcat 10,需要将Spring Boot升级到3.0及以上版本,Spring Boot 3开始全面适配Jakarta EE规范,可兼容Tomcat 10。注意升级后需要将项目中所有javax.servlet相关的包导入替换为jakarta.servlet,你当前使用的JDK17可以满足Spring Boot 3的版本要求。
配置校验提示
你当前pom.xml中spring-boot-maven-plugin配置的启动类路径为com.baeldung.springbootsimple.SpringBootTomcatApplication,请确认启动类的实际包路径和该配置完全一致,避免构建时因路径不匹配导致应用上下文初始化异常。
内容的提问来源于stack exchange,提问作者trickster
相关产品推荐
相关产品推荐

