Tomcat 10.0.4 не загружает сервлеты (классы @WebServlet) с ошибкой 404

У меня проблема с моим первым веб-приложением. Я использую IntelliJ как IDE и Tomcat как веб-сервер. Каждый сервлет, к которому я пытался получить доступ, выдает ошибку 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>

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>

Спасибо, Яник

2 ответа

Решение

У меня была такая же проблема при воспроизведении проблемы, о которой сообщалось на форумах IntelliJ IDEA .

Он не работал с Tomcat 10 по причинам, описанным в ответе Петра П. Карваша , но он отлично работает с Tomcat 9.0.44 и более ранними версиями.

По причинам авторского права API сервлета 5.0 (реализованный Tomcat 10) и API сервлета 4.0 (реализованный Tomcat 9) несовместимы: пространство имен API изменилось с к . Это может проявляться тремя способами:

  1. Программное обеспечение, написанное для Servlet 4.0, не компилируется с jar-файлами API из Tomcat 10: см. Servlet 5.0 JAR выдает ошибку компиляции в javax.servlet.*, Но Servlet 4.0 JAR нет ,
  2. Приложения Servlet 4.0, использующие дескриптор бросает много s и не запускаются: ср. Tomcat 10.x выдает ошибку java.lang.NoClassDefFoundError на javax / servlet / ServletRequestListener
  3. Приложения Servlet 4.0, которые используют аннотации для объявления сервлетов, перестающих работать, как в вашем случае .

Последний из них наиболее сложно диагностировать: в файлы журналов ошибок не записывается, но приложение не работает. Причина такого поведения в том, что аннотации игнорируются: сервер ищет .

Поскольку все три проблемы имеют одну и ту же причину, все решения, предоставленные для вышеупомянутых вопросов, работают. В этом конкретном случае я бы посоветовал использовать Tomcat Migration Tool для Jakarta EE .

Примечание . На сайте загрузки Tomcat есть предупреждение, которое, к сожалению, многие не замечают:

Пользователи Tomcat 10 и более поздних версий должны знать, что в результате перехода с Java EE на Jakarta EE в рамках передачи Java EE в Eclipse Foundation основной пакет для всех реализованных API изменился с javax. * На jakarta. . *. Это почти наверняка потребует изменения кода, чтобы позволить приложениям перейти с Tomcat 9 и более ранних версий на Tomcat 10 и более поздних версий.

Другие вопросы по тегам