当前位置: 首页 > article >正文

Tomcat+Servlet运行后出现404错误解决方案

Tomcat+Servlet运行后出现404错误解决方案

一、错误效果复现

在这里插入图片描述

后续的解决方案,仅仅针对我遇到的情况。对不能涵盖大部分情况感到抱歉。

二、错误分析

先看看源代码?

package com.example.secondclass.Servlet;
import java.io.*;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@WebServlet(name = "login", value = "/login")
public class login extends HttpServlet {

    private String message;

    public void init() throws ServletException
    {
        message = "Hello World";
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        doPost(request, response);
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        request.getRequestDispatcher("/logok.html").forward(request, response);
    }

    public void destroy()
    {
    }
}

问题出在 javax.servletjakarta.servlet 这两个包的不同版本兼容性上。

  1. Servlet API 版本变更
    Servlet 5.0 及以后的版本(Tomcat 10 及以上),javax.servlet 命名空间被迁移到了 jakarta.servlet,这意味着:
    • Servlet 4.0 及以下(Tomcat 9 及以下): 使用 javax.servlet.*
    • Servlet 5.0 及以上(Tomcat 10 及以上): 使用 jakarta.servlet.*
  2. Tomcat 10 使用 Jakarta EE
    看上面的图,我使用的是Tomcat 10.1.36 默认支持 Jakarta EE 9+,它已经不再支持 javax.servlet,所以如果代码仍然使用 javax.servlet,Tomcat 无法找到相应的类,导致 404 资源不可用的错误。

三、解决方案

3.1 方案 1:升级代码到 Jakarta EE(推荐)

既然Tomcat版本很高(>10.0),建议完全迁移到 jakarta.servlet,即:

  • 确保项目中 javax.servlet 相关的依赖已移除
  • 只使用 jakarta.servlet

如果使用 Maven,请检查 pom.xml,确保使用 Jakarta 依赖:

<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>5.0.0</version>
    <scope>provided</scope>
</dependency>
3.2 方案 2:降级 Tomcat

如果想继续使用 javax.servlet,可以换回 Tomcat 9,因为它仍然支持 javax.servlet

  • 下载 Tomcat 9 并配置到 IntelliJ IDEA

  • 确保你的 pom.xml 依赖的是 javax.servlet-api

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
    

http://www.kler.cn/a/581984.html

相关文章:

  • 【华为OD机考真题】- 星际篮球争霸赛(Java)
  • 蓝桥杯 商品库存管理
  • 《Android应用性能优化全解析:常见问题与解决方案》
  • llamafactory 微调教程
  • 如何在Django中实现批量覆盖更新的示例
  • Oracle数据库深度优化实战指南:从SQL到架构的全维度调优
  • 蓝桥杯 k倍区间
  • 《深度解析DeepSeek-M8:量子经典融合,重塑计算能效格局》
  • 深度学习分词器char-level实战详解
  • BambuStudio学习笔记:MinAreaBoundigBox
  • AS_Path过滤器应用灵活配置示例
  • Nginx 缓存清理
  • Hugging Face的Transformers核心模块:Pipelines(参数说明,各种模型类型调用案例)
  • 第十一届蓝桥杯单片机国赛
  • 最后一个单词的长度(js实现,LeetCode58)
  • 简单工厂 、工厂方法模式和抽象工厂模式
  • Spring-事务
  • Qt测试程序经过的时间
  • UI自动化:Python + Selenium4.6以前的版本 环境搭建
  • 熬夜肝,如何免邀请码使用Manus(全套教程)