Spring Boot WAR包部署至Tomcat出现HTTP 404错误求助
Spring Boot WAR包部署本地Tomcat出现HTTP 404错误
开发环境:IntelliJ IDEA、JDK 19、Maven、Hibernate
我尝试将Spring Boot应用打包为WAR包部署到本地Tomcat服务器,但访问时始终出现HTTP 404错误,已尝试多种方案仍未解决,求帮助。
应用核心代码
DemoApplication.java
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
Controller.java
package com.example.demo; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class Controller { @GetMapping("/") public String start() { return "Hello User, have a nice day."; } @GetMapping("/hello") public String hello() { return "Hello User, have a nice day."; } }
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.5</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>demo</name> <description>demo</description> <properties> <java.version>19</java.version> <tomcat.version>9.0.19</tomcat.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <finalName>demo</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
ServletInitializer.java
package com.example.demo; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; public class ServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(DemoApplication.class); } }
排查与解决方案建议
- 核心问题:版本兼容性不匹配:Tomcat 9.x最高仅支持JDK 11,你使用的是JDK 19,版本不兼容会导致应用无法正常加载。建议降级JDK到11,或升级Tomcat到10.x(支持JDK 17及以上版本)。
- 检查访问路径:部署WAR包后,正确访问路径应为
http://localhost:8080/demo/或http://localhost:8080/demo/hello,需加上WAR包的上下文路径(finalName为demo),不要直接访问Tomcat根路径。 - 查看Tomcat日志:检查
logs/catalina.out或localhost.log,确认WAR包是否成功部署,是否存在类加载异常、Spring容器启动失败等报错信息。 - 验证WAR包完整性:用解压工具打开生成的WAR包,确认
WEB-INF/classes下有编译后的class文件,WEB-INF/lib下包含所有依赖jar包,确保打包过程无报错。 - 规范Maven打包命令:使用
mvn clean package -DskipTests命令打包,跳过测试环节避免打包中断,保证WAR包生成完整。
内容的提问来源于stack exchange,提问作者matthias
相关产品推荐
相关产品推荐

