Java Tomcat 10.0.4没有';t加载servlet(@WebServlet类)时出现404错误

Java Tomcat 10.0.4没有';t加载servlet(@WebServlet类)时出现404错误,java,tomcat,intellij-idea,servlets,tomcat10,Java,Tomcat,Intellij Idea,Servlets,Tomcat10,我的第一个Web应用程序有问题。我使用IntelliJ作为IDE,使用Tomcat作为Web服务器。 我尝试访问的每个servlet都会抛出404错误。即使我复制了一些youtube教程,这似乎很有魅力 表单中的按钮将我发送到:http://localhost:8080/IUBHQuiz/login 你能告诉我怎么了吗?我快发疯了 login.java package com.example.IUBHQuiz; import java.io.*; import javax.servlet.*;

我的第一个Web应用程序有问题。我使用IntelliJ作为IDE,使用Tomcat作为Web服务器。 我尝试访问的每个servlet都会抛出404错误。即使我复制了一些youtube教程,这似乎很有魅力

表单中的按钮将我发送到:http://localhost:8080/IUBHQuiz/login

你能告诉我怎么了吗?我快发疯了

login.java

package com.example.IUBHQuiz;

import java.io.*;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.sql.*;

@WebServlet("/login")
public class login extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        String email = request.getParameter("fmail");
        String pass = request.getParameter("fpw");

        if(email.equals("j") && pass.equals("j"))
        {
            RequestDispatcher rs = request.getRequestDispatcher("/main.jsp");
            rs.forward(request, response);
        }
        else
        {
            out.println("Username or Password incorrect");

            RequestDispatcher rs = request.getRequestDispatcher("/index.jsp");
            rs.include(request, response);
        }

        out.close();
    }
index.jsp

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>IUBH Quiz</title>
    <link href="./resources/css/style.css" rel="stylesheet">
</head>
<body>
    <div class="main">
        <div class="image-container">
           <img src="./resources/images/logo.png" alt="Logo">
        </div>
        <div class="Login">
            <h1>Willkommen beim IUBH-Quiz!</h1>
            <form action="login" method="post">
                E-Mail:<input type="text" id="fmail" name="fmail"><br><br>
                Passwort: <input type="password" id="fpw" name="fpw"><br><br>
                <input type="submit" value="Log In" class="button">
            </form>
        </div>
        <div class="Links">
            <a href="#">Passwort vergessen</a>
            <a href="#">Registrieren</a>
        </div>
    </div>
</body>
</html>

IUBH测验
Willkommen beim IUBH测验!
电子邮件:

密码:

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
</web-app>

我在复制时也遇到了同样的问题


由于某些原因,它不能与Tomcat 10配合使用,但与Tomcat 9.0.44及更早版本配合使用效果良好。

出于版权原因,Servlet 5.0 API(由Tomcat 10实现)和Servlet 4.0 API(由Tomcat 9实现)不兼容:API名称空间从
javax.
更改为
jakarta.
。这可以通过多种方式体现:

  • 为Servlet 4.0编写的软件不会针对Tomcat 10中的API JAR进行编译:
  • 使用
    web.xml
    描述符的Servlet 4.0应用程序抛出大量
    ClassNotFoundException
    s,并且无法启动:cf
  • Servlet 4.0应用程序使用
    web.xml
    描述符日志a“X不是jakarta.Servlet.Servlet”错误:cf
  • Servlet 4.0应用程序使用注释声明Servlet停止工作,在您的例子中是这样的
  • 最后一个问题是最难诊断的:没有错误写入日志文件,但应用程序不工作。此行为背后的原因是忽略了
    @javax.servlet.WebServlet
    注释:服务器正在扫描
    @jakarta.servlet.WebServlet

    由于这三个问题都有相同的原因,所以为上述问题提供的解决方案都有效。在这种情况下,我建议使用

    备注:该功能有一个警告,不幸的是,许多人没有注意到:

    <>雅加达Tomcat 10的用户应该知道,作为java EE到java EEE转移到Eclipse基金会的一部分的结果,所有实现的API的主包已经从Javax到雅加达。这几乎肯定需要更改代码,以使应用程序能够从Tomcat 9和更早版本迁移到Tomcat 10和更高版本

    另见

    您使用什么Tomcat版本?Tomcat10出现了一些问题,请看看它是否适用于Tomcat9。你一定是在开玩笑。我花了一整天寻找解决办法,几乎发疯了。非常感谢。回答得很好,谢谢你的详细解释。我把你的答案和我的联系起来,这样更容易找到。我想在下载服务器试用之前,几乎没有人会阅读迁移指南或警告,所以这个问题会变得非常流行。谢谢你的回答。