Tomcat部署WAR包后访问localhost:8080/show出现HTTP 404错误求助
IDE运行正常但Tomcat部署WAR包后404问题排查与解决
核心问题
本地IDE中访问localhost:8080/show可正常响应,但将项目打包为WAR部署到Tomcat后,访问相同URL出现404错误,以下是常见排查方向和解决方法:
1. 上下文路径不匹配
IDE运行时,项目通常默认使用根上下文路径(/),但Tomcat部署WAR包时,默认会将WAR包的文件名作为上下文路径。比如你的WAR包名为demo.war,实际访问路径应为localhost:8080/demo/show,而非直接localhost:8080/show。
解决方式:
- 方法一:修改Tomcat配置,在
conf/server.xml的<Host>标签内添加Context配置,指定上下文路径为根路径:<Context path="" docBase="demo" reloadable="true"/> - 方法二:在项目中指定上下文路径,以Spring Boot为例,在
application.properties中添加:server.servlet.context-path=/ - 方法三:重命名WAR包为
ROOT.war,Tomcat会自动将其作为根上下文路径应用。
2. WAR包打包不完整或配置错误
确保WAR包包含所有必要文件,且打包配置正确:
- 检查
pom.xml中打包类型是否为WAR:<packaging>war</packaging> - 若为Spring Boot项目,需排除内置Tomcat依赖,避免与外部Tomcat冲突:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> - 执行
mvn clean package重新打包,检查target目录下的WAR包,解压后确认WEB-INF/classes存在编译后的控制器类,WEB-INF/lib包含所有依赖Jar包。
3. 控制器映射路径异常
- 检查控制器类上的注解,若存在全局路径前缀(如
@RequestMapping("/api")),则实际访问路径应为上下文路径/api/show。 - 确认控制器类被Spring容器扫描到:Spring Boot项目需确保
@SpringBootApplication注解所在类的包包含控制器类;传统SSM项目需在XML配置中添加组件扫描路径。
4. Tomcat版本兼容性问题
- 确保项目依赖的Servlet API版本与Tomcat版本匹配:
- Tomcat 9 → Servlet 4.0(
javax.servlet包) - Tomcat 10+ → Servlet 5.0+(
jakarta.servlet包)
- Tomcat 9 → Servlet 4.0(
- 若为Spring Boot项目,需注意Spring Boot版本与Tomcat版本的兼容性,例如Spring Boot 2.x适配Tomcat 9,Spring Boot 3.x适配Tomcat 10+。
验证步骤
- 查看Tomcat的
webapps目录,确认WAR包已被正确解压为同名文件夹,且文件夹内存在WEB-INF目录。 - 查看Tomcat的
logs/catalina.out日志,检查项目启动时是否存在类加载失败、配置错误等异常信息。 - 访问Tomcat管理页面(
localhost:8080/manager),查看已部署应用的上下文路径,确认访问路径是否正确。
内容的提问来源于stack exchange,提问作者Nafis Ligari
相关产品推荐
相关产品推荐

