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

使用@WebServlet注解配置Servlet后访问接口出现404问题求助

问题根因
  • 核心不兼容问题:Tomcat 10.0.x及以上版本实现的是Jakarta EE 9规范,Servlet相关API的包名从原先的javax.servlet.*全面调整为jakarta.servlet.*。你当前使用的javax.servlet-api 4.0.1属于旧的Java EE规范,Tomcat 10不会扫描识别javax.servlet.annotation.WebServlet注解,导致Servlet没有被注册,访问时返回404。
  • 其他可能的配置问题:若IDEA中Tomcat部署的应用上下文路径不为/,也会导致直接访问/user路径404。
可行解决方案

方案1:降级Tomcat版本(改造成本最低)

直接使用Tomcat 9.x版本,该版本仍兼容Java EE规范的javax.servlet包,无需修改现有代码和依赖配置,替换Tomcat版本后重新部署即可正常访问。

方案2:适配Tomcat 10的Jakarta EE规范

  1. 替换Servlet依赖为Jakarta版本,pom.xml中修改依赖配置如下:
<dependency>
  <groupId>jakarta.servlet</groupId>
  <artifactId>jakarta.servlet-api</artifactId>
  <version>5.0.0</version>
  <scope>provided</scope>
</dependency>
  1. 修改UserServlet类的所有导入包,将javax.servlet替换为jakarta.servlet:
package yj.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;


@WebServlet(urlPatterns = {"/user"})
public class UserServlet extends HttpServlet {
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("来了个get请求");

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("来了个post请求");
        doGet(req, resp);
    }
}
  1. 重新构建项目并部署即可。
额外排查点

检查IDEA Tomcat配置的Deployment标签页中,Application context配置项:

  • 若配置为/,访问地址为http://localhost:8089/user
  • 若配置为其他值(如/myweb),访问地址需拼接上下文路径,即http://localhost:8089/myweb/user

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:54:03