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

server/2025/3/15 23:29:19/

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.ppmy.cn/server/175281.html

相关文章

Pycharm实用技巧

一、Pycharm 参数注释 在 PyCharm 中&#xff0c;在方法下输入三引号&#xff08;"""&#xff09;就能自动生成参数注释&#xff1a;def input_combo_detail(self, scale, ptype_data, ptype_info, sku_info, unit_info, price, qty):""":param…

Kaiming Uniform 初始化:神经网络权重初始化的优雅解决方案

Kaiming Uniform 初始化&#xff1a;神经网络权重初始化的优雅解决方案 在深度学习的模型训练中&#xff0c;权重初始化的选择对网络的收敛速度和性能有着深远影响。传统的随机初始化&#xff08;如高斯分布&#xff09;在浅层网络中尚可接受&#xff0c;但随着网络深度增加&a…

基于“动手学强化学习”的知识点(一):第 14 章 SAC 算法(gym版本 >= 0.26)

第 14 章 SAC 算法&#xff08;gym版本 &#xff1e; 0.26&#xff09; 摘要SAC 算法&#xff08;连续&#xff09;SAC 算法&#xff08;离散&#xff09; 摘要 本系列知识点讲解基于动手学强化学习中的内容进行详细的疑难点分析&#xff01;具体内容请阅读动手学强化学习&…

手势调控屏幕亮度:Python + OpenCV + Mediapipe 打造智能交互体验

前言 你有没有遇到过这样的情况? 夜晚玩电脑,屏幕亮得像个小太阳,晃得眼泪直流,想调暗一点,却在键盘上盲摸半天,结果误触关机键,直接黑屏;白天屏幕暗得像熄火的煤油灯,想调亮点,鼠标点来点去,调节条藏得像猫一样不见踪影。这年头,我们的设备都快能听懂人话了,怎…

【RK3588嵌入式图形编程】-SDL2-构建一个多功能的图像类

构建一个多功能的图像类 文章目录 构建一个多功能的图像类1、概述2、设计原则2.1 友好API2.2 性能2.3 反馈2.4 破坏性变更和可扩展性3、加载文件4、源矩形5、目标矩形6、渲染和缩放模式7、完整代码8、总结本文将详细介绍如何设计一个灵活的组件,方便SDL的应用程序中处理图像。…

Java 8 + Tomcat 9.0.102 的稳定环境搭建方案,适用于生产环境

一、安装 Java 8 安装 OpenJDK 8 bash sudo apt update sudo apt install openjdk-8-jdk -y 验证安装 bash java -version 应输出类似: openjdk version “1.8.0_412” OpenJDK Runtime Environment (build 1.8.0_412-8u412-ga-1~22.04-b08) OpenJDK 64-Bit Server VM (bui…

【Rust】枚举和模式匹配——Rust语言基础14

文章目录 1. 枚举类型1.2. Option 枚举 2. match 控制流结构2.1. match 对绑定值的匹配2.2. Option<T> 的匹配2.3. 通配模式以及 _ 占位符 3. if let 控制流4. 小测试 1. 枚举类型 枚举&#xff08;enumerations&#xff09;&#xff0c;也被称作 enums。枚举允许你通过…

LabVIEW旋转设备状态在线监测系统

为了提高大型旋转设备如电机和水泵的监控效率和故障诊断能力&#xff0c;用LabVIEW软件开发了一套实时监测与故障诊断系统。该系统集成了趋势分析、振动数据处理等多项功能&#xff0c;可实时分析电机电流、压力、温度及振动数据&#xff0c;以早期识别和预报故障。 ​ 项目背…