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

Spring Boot项目本地正常,部署服务器出现404错误求助

部署Tomcat 9出现404无日志问题排查步骤

一、War包本身验证

  • 解压war包,确认WEB-INF/classes下存在编译后的DemoApplication.class、AppController.class等文件,WEB-INF/lib下包含完整的Spring Boot及相关依赖jar包。
  • 确保war包文件名是nameofwar.war,Tomcat默认会将war包名作为上下文路径,若文件名不匹配,访问路径会不一致。

二、Spring Boot war部署核心配置检查

1. pom.xml配置验证

  • 确认打包类型设置为war:<packaging>war</packaging>
  • 确认内嵌Tomcat依赖标记为provided,避免与外部Tomcat冲突:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>
  • 确认maven插件指定了正确的主类:
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <mainClass>com.example.demo.DemoApplication</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

2. DemoApplication类配置验证

  • 必须继承SpringBootServletInitializer并重写configure方法,否则无法在外部Tomcat中启动Spring Boot应用:
@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(DemoApplication.class);
    }

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

三、Tomcat服务器配置检查

1. 部署路径与解压状态

  • 查看Tomcat的webapps目录,确认nameofwar.war已被自动解压为nameofwar文件夹,若未解压,可能是war包损坏或Tomcat运行用户无读写权限。
  • 检查conf/server.xml,若配置了自定义<Context>节点,确保path="/nameofwar"指向的war包路径正确,避免路径冲突。

2. 日志配置排查

  • 调整conf/logging.properties,添加或修改以下配置,提升Spring Boot相关日志级别:
org.springframework.level = INFO
com.example.level = INFO
  • 查看Tomcatlogs目录下的catalina.out、localhost.log、localhost_access_log.*.txt,这些文件可能记录了应用启动的错误信息,不要仅关注应用自身日志。
  • 确认Tomcat运行用户对webapps和logs目录有读写权限,权限不足会导致无法解压war包或写入日志。

四、应用路由与静态资源检查

1. AppController路由验证

  • 确认Controller的路由无需包含上下文路径/nameofwar,Tomcat会自动拼接该路径。例如:
@Controller
@RequestMapping("/")
public class AppController {
    @GetMapping("/")
    public String index() {
        return "index";
    }
}

此时访问路径应为/nameofwar/,若Controller指定了@RequestMapping("/test"),则访问路径是/nameofwar/test。

2. 静态资源与视图解析配置

  • 检查application.properties中的视图解析配置,以Thymeleaf为例:
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
  • 确认index.html已被打包到war包的WEB-INF/classes/templates目录下。

五、Java版本兼容性检查

  • 确认服务器Java 11版本与本地开发环境一致(如均为OpenJDK或Oracle JDK),避免版本差异导致类加载异常。
  • 确保Tomcat版本为9.0.13及以上,该版本开始正式支持Java 11,若版本过低需升级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:10:53