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>
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值