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

Tomcat 10.1+Java11环境下Servlet子页面访问404问题求助

问题解决步骤

核心原因:Tomcat版本与Servlet包不兼容

你使用的Tomcat 10.1.x属于Jakarta EE 9+版本,已完全从javax.servlet迁移到jakarta.servlet包,而你的代码仍使用旧的javax.servlet相关导入,导致Tomcat无法识别你的Servlet类,从而返回404错误。

具体修复操作

  1. 替换Maven依赖(若用Maven管理)
    将原有的servlet-api依赖替换为Jakarta版本:

    <dependency>
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
        <version>6.0.0</version>
        <scope>provided</scope>
    </dependency>
    
  2. 修改Servlet代码的导入语句
    把所有javax.servlet开头的导入替换为jakarta.servlet:

    package 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;
    import java.io.PrintWriter;
    
    @WebServlet("/first")
    public class FirstServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html");
            PrintWriter pw = response.getWriter();
            pw.println("<html>");
            pw.println("<body>");
            pw.println("Welcome to servlet");
            pw.println("</body>");
            pw.println("</html>");
            pw.close();
        }
    }
    
  3. 重新编译部署
    执行mvn clean package,通过Smart Tomcat重新部署应用,或把生成的war包放入Tomcat的webapps目录后重启服务。

额外检查点

  • 确认编译后的FirstServlet.class文件存在于WEB-INF/classes/servlet/目录下,路径和文件无缺失。
  • 检查Smart Tomcat插件配置:确保上下文路径设为/,部署的是正确的项目输出目录或war包。
  • 若尝试Tomcat 9,需对应使用javax.servlet-api 4.0版本依赖,同时确认类文件已正确部署到Tomcat目录中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 16:29:50