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

SpringBoot+React项目部署Tomcat9后API请求404求助

问题分析与解决步骤

核心问题:WAR包部署到Tomcat9后,Spring容器未初始化(日志无Spring启动信息),导致后端API无法访问,仅前端静态资源可正常加载。


1. 修正Maven依赖与打包配置

确保pom.xml中正确设置WAR打包类型,并排除内置Tomcat依赖(避免与服务器Tomcat冲突):

<!-- 明确打包类型为WAR -->
<packaging>war</packaging>

<dependencies>
    <!-- 排除Spring Boot内置Tomcat -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- 提供Tomcat依赖,仅编译时使用 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>

2. 验证SpringBootServletInitializer实现

你的App类继承写法正确,但需确保:

  • @SpringBootApplication注解能扫描到所有后端组件(如Controller、Service)。如果控制器不在App类的子包下,需添加@ComponentScan(basePackages = "你的后端包路径")。
  • 示例调整:
@SpringBootApplication
@ComponentScan(basePackages = "com.yourpackage") // 替换为实际包路径
public class App extends SpringBootServletInitializer{
    // ... 原有代码不变
}

3. 检查WAR包结构是否合法

解压生成的record-retention.war,确认:

  • WEB-INF/classes目录存在,且包含编译后的Java类(如App.class、Controller类等)。
  • WEB-INF/lib目录存在,且包含所有Spring Boot及第三方依赖jar包。
  • 若存在WEB-INF/web.xml,需确保其配置未干扰Spring Boot的初始化(建议删除该文件,由Spring Boot自动生成)。

4. 开启Tomcat详细日志排查

修改Tomcat安装目录下conf/logging.properties,添加Spring框架日志级别:

org.springframework.level = INFO

重启Tomcat后,查看catalina.out或localhost.log,若Spring正常启动,会打印类似Started App in X seconds的日志;若有初始化错误,也会在此输出具体异常信息。

5. 修正API请求路径

本地运行时API路径为http://localhost:8080/api/xxx,部署到Tomcat后,WAR包的上下文路径为record-retention,因此正确API路径应为http://服务器IP:8080/record-retention/api/xxx。

  • 需调整前端代码中的API请求前缀,或在Spring Boot配置文件中设置:
server.servlet.context-path=/record-retention

6. 确认Spring Boot与Tomcat版本兼容性

  • Spring Boot 2.x系列(如2.7.x)兼容Tomcat 9。
  • Spring Boot 3.x系列需要Tomcat 10及以上版本,若你使用的是Spring Boot 3.x,需升级Tomcat版本或降级Spring Boot到2.x。

内容的提问来源于stack exchange,提问作者Miguel Contreras

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:31:05