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

Spring Boot应用部署至独立Tomcat:bootWar构建WAR包后404问题解决

解决Spring Boot WAR包部署到独立Tomcat的404问题

要将Spring Boot应用正确打包为可部署到独立Tomcat的WAR包,需要完成以下几项关键配置修改:

1. 调整项目构建配置,适配WAR打包

Maven(pom.xml)

  • 将打包方式设为war:
<packaging>war</packaging>
  • 标记嵌入式Tomcat依赖为provided,避免与独立Tomcat的容器依赖冲突:
<dependencies>
    <!-- 保留原有业务、Spring Boot核心依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>
  • 确保spring-boot-maven-plugin配置正确,用于生成标准可部署WAR:
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

Gradle(build.gradle)

  • 引入war插件并设置打包类型:
plugins {
    id 'war'
    id 'org.springframework.boot' version '你的Spring Boot版本号'
    id 'io.spring.dependency-management' version '对应依赖管理版本'
}
  • 标记嵌入式Tomcat为providedRuntime:
dependencies {
    // 保留原有业务依赖
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
}

2. 修改主应用类,继承SpringBootServletInitializer

外部Servlet容器(如独立Tomcat)需要通过SpringBootServletInitializer来初始化Spring上下文,替代嵌入式容器的启动逻辑。修改你的主启动类:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class HelloWorldApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(HelloWorldApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(HelloWorldApplication.class, args);
    }
}

3. 修正访问路径逻辑

部署到独立Tomcat后,访问路径需要加上应用上下文路径:

  • 若WAR包名为hello-world.war,Tomcat默认上下文路径为/hello-world,此时完整访问地址应为http://localhost:8080/hello-world/hello-world
  • 若想直接通过http://localhost:8080/hello-world访问,可将WAR包重命名为ROOT.war(Tomcat默认根上下文),或在Tomcat的conf/server.xml中配置自定义上下文路径。

4. 检查版本兼容性

确保Spring Boot与独立Tomcat版本匹配:

  • Spring Boot 3.x 需搭配Tomcat 10.x及以上(基于Jakarta EE API)
  • Spring Boot 2.x 兼容Tomcat 8.5/9.x(基于Java EE API)

完成以上修改后,重新执行mvn clean package(Maven)或gradle clean war(Gradle)构建WAR包,将其放入Tomcat的webapps目录,启动Tomcat即可正常访问接口。

内容的提问来源于stack exchange,提问作者Gaetan L.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:05:09