Tomcat10.0.4没有加载带有404错误的servlet(@webservlet classes)

xwbd5t1u  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(410)

这个问题在这里已经有答案了

Servlet5.0JAR在javax.servlet上抛出编译错误。*但Servlet4.0JAR没有(2个答案)
10天前关门了。
我的第一个web应用程序有问题。我使用intellij作为ide,tomcat作为web服务器。我尝试访问的每个servlet都会抛出404错误。即使我复制了一些youtube教程,这似乎很有魅力。
表单中的按钮将我发送到:http://localhost:8080/IUBH测验/登录
你能告诉我怎么了吗?我快疯了。
登录.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();
    }

索引.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>

网站.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>
ru9i0ody

ru9i0ody1#

出于版权原因,Servlet5.0API(由Tomcat10实现)和Servlet4.0API(由Tomcat9实现)不兼容:api名称空间从 javax.*jakarta.* . 这可以表现在很多方面:
为servlet 4.0编写的软件不会针对tomcat 10的api jar进行编译:参见servlet 5.0 jar在javax.servlet上抛出编译错误。*但servlet 4.0 jar不会,
使用 web.xml 我扔了很多东西 ClassNotFoundException s并且不启动:cf.tomcat10.x在javax/servlet/servletrequestlistener上抛出java.lang.noclassdeffounderror。
使用 web.xml 描述符日志“x不是jakarta.servlet.servlet”错误:cf.servlet class org.restlet.ext.servlet.serverservlet不是jakarta.servlet.servlet。
使用注解声明servlet的Servlet4.0应用程序停止工作,如您的示例所示。
最后一个问题是最难诊断的:没有错误写入日志文件,但应用程序不工作。这种行为背后的原因是 @javax.servlet.WebServlet 注解被忽略:服务器正在扫描 @jakarta.servlet.WebServlet .
由于这三个问题都有相同的原因,因此对上述问题提供的解决方案都是有效的。在这种情况下,我建议使用jakartaee的tomcat迁移工具。
备注:tomcat下载站点提供了一个警告,不幸的是很多人没有注意到:
Tomcat 10的用户应该知道,作为java java到Eclipse基金会转移的一部分,从Java EE到雅加达EE的结果,所有实现的API的主包已经从Javax到雅加达。这几乎肯定需要更改代码,以使应用程序能够从tomcat9及更早版本迁移到tomcat10及更高版本。

oxiaedzo

oxiaedzo2#

我在复制intellij idea论坛上报告的问题时也遇到了同样的问题。
由于piotr p的回答中描述的原因,它不能与Tomcat10一起工作。karwasz,但是它在tomcat9.0.44和更早版本中工作得很好。

相关问题