You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot项目打包war部署Tomcat访问返回404错误如何解决?

Spring Boot部署Tomcat返回404问题解决方案

核心问题根因

该404问题90%以上是 Tomcat版本和Spring Boot版本不兼容 导致:
Tomcat 10.x开始全面使用Jakarta EE 9+规范,Servlet API包名从旧的javax.servlet.*全部变更为jakarta.servlet.*,而Spring Boot 2.x及更早版本默认依赖的是javax.servlet体系的API,完全无法在Tomcat 10+上正常加载。虽然Tomcat管理页显示部署成功,但Spring应用上下文实际没有启动,所有接口自然返回404。

解决方案

方案1(推荐,改动最小)

直接将Tomcat版本降级到9.x版本,Tomcat 9仍然使用javax.servletAPI,和Spring Boot 2.x版本完全兼容,替换Tomcat后重新部署war包即可正常访问。

方案2(需升级依赖)

如果必须使用Tomcat 10+,按以下步骤调整:

  • 升级JDK版本到17及以上(Spring Boot 3最低要求Java 17,现有Java 16不满足要求)
  • 将Spring Boot版本升级到3.0及以上,该版本已全面适配Jakarta EE规范
  • 检查项目中所有引用javax.*的代码,全部替换为对应jakarta.*的包路径

其他可选排查点

如果调整版本后仍有问题,按以下顺序排查:

  • 你提到的JDK无JRE文件夹属于正常情况,Java 9及以上版本默认不内置独立JRE,只要JAVA_HOME配置正确就不会影响Tomcat和Spring Boot运行,无需针对这一点额外调整
  • 检查ServletInitializer类配置是否正确,需正确继承SpringBootServletInitializer并重写configure方法指向启动主类,参考配置:
public class ServletInitializer extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
}
  • 检查pom.xml中内置Tomcat依赖的scope是否设置为provided,避免和外部Tomcat依赖冲突:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>
  • 确认访问路径的上下文路径正确:如果你的war包命名为abc.war,接口路径为/test,则完整访问路径为http://<Tomcat地址>:<端口>/abc/test,不要漏掉上下文路径/abc
  • 查看Tomcat日志目录下的catalina.log、localhost.log文件,根据具体报错信息定位剩余问题。

内容的提问来源于stack exchange,提问作者Inzimam Tariq IT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:30:02