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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 14:27:04