无法将Spring Boot项目WAR包部署至Tomcat,访问报404错误求助
Spring Boot WAR包部署Tomcat 10出现404的原因及解决办法
问题描述
我有一个Spring Boot应用,通过Spring Boot直接运行时一切正常,但将其打包为WAR包部署到Tomcat(版本10.0.27)后,访问出现404状态码。
已配置的Maven内容:
<properties> <start-class>com.example.deploytest.DeploytestApplication</start-class> </properties> <packaging>war</packaging> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
主类代码:
@SpringBootApplication public class DeploytestApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(DeploytestApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(DeploytestApplication.class); } }
控制器代码:
@RestController public class MainController { @GetMapping public String hello() { return "hello world"; } }
核心原因
Tomcat 10.x 基于 Jakarta EE 9+ 规范,使用jakarta.*包路径;而你当前使用的Spring Boot版本(大概率是2.x)基于传统Java EE(javax.*包路径),两者API包名完全不兼容,导致Spring应用无法被Tomcat 10正确加载,从而出现404。
其他可能的次要原因
- 访问路径错误:部署WAR包到Tomcat后,访问路径需要加上WAR包的名称(除非将WAR包重命名为
ROOT.war),比如WAR包是deploytest.war,访问地址应为http://localhost:8080/deploytest而非直接访问根路径http://localhost:8080。 - Tomcat部署配置问题:检查Tomcat的
webapps目录下是否正确解压WAR包,查看Tomcat日志中是否存在类加载失败的报错信息。
解决办法
- 升级Spring Boot到3.x版本:Spring Boot 3.x完全适配Jakarta EE规范,与Tomcat 10.x兼容,升级后重新打包部署即可。
- 降级Tomcat到9.x版本:Tomcat 9.x基于Java EE规范,和Spring Boot 2.x完美兼容,无需修改应用代码。
- 修正访问路径:如果是路径问题,调整访问URL,或者将WAR包重命名为
ROOT.war,即可通过根路径直接访问。
内容的提问来源于stack exchange,提问作者LightSouls
相关产品推荐
相关产品推荐

