在IntelliJ部署简单WAR包到Tomcat 9.0.80时出现404错误求助
问题:Tomcat 9.0.80部署WAR包出现404错误
在新机器上用IntelliJ IDEA部署一个简单WAR包到Apache Tomcat 9.0.80时遇到404错误,项目仅包含一个Servlet类:
package org.example; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; @WebServlet("/first") public class Main extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { PrintWriter writer = resp.getWriter(); writer.println("WORKING!"); writer.flush(); } }
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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>Test</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> <scope>provided</scope> </dependency> </dependencies> </project>
IntelliJ中Catalina日志显示项目已成功部署,但访问指定路径返回404。
解决方案
核心问题是Servlet API版本与Tomcat版本不兼容:
- Apache Tomcat 9.0.x 属于Jakarta EE 8规范,仅支持
javax.servlet包下的API(对应Servlet 4.0) - 你使用的
jakarta.servlet-api 6.0.0属于Jakarta EE 10规范,包名从javax.servlet改为了jakarta.servlet,仅Tomcat 10.0.x及以上版本支持。
有两种解决方式:
方式一:降级Servlet API适配Tomcat 9
修改pom.xml中的依赖,替换为Tomcat 9支持的版本:
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency>
同时修改Java代码的导入包,将jakarta.servlet替换为javax.servlet:
package org.example; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; // 其余代码保持不变
方式二:升级Tomcat适配Jakarta Servlet 6
将Apache Tomcat替换为10.0.x或更高版本(如10.1.x),这类版本原生支持Jakarta EE 10规范的jakarta.servlet包,无需修改代码和pom依赖,重新部署即可。
另外需确认访问路径是否正确:如果项目部署时设置了上下文路径,访问地址应为http://localhost:8080/[上下文路径]/first,可从IntelliJ运行配置或Tomcat管理页面查看上下文路径。
内容的提问来源于stack exchange,提问作者Olexie Polishchyk
相关产品推荐
相关产品推荐

