从 html 页面重定向到 Servlet 时出现 404 错误 [重复]

问题描述 投票:0回答:1

所以我正在尝试在 InteliJ Ultimate 上创建一个关于电信网站的 Web 应用程序,我想熟悉 servlet,但我无法让它们正常工作

<!DOCTYPE html>
<html>
<head>
    <title>Login Page</title>
</head>
<body>
    <h2>Login Form</h2>
    <form action="LoginServ" method="post">
        <label for="username">Username:</label><br>
        <input type="text" id="username" name="username"><br>
        <label for="password">Password:</label><br>
        <input type="password" id="password" name="password"><br>
        <input type="submit" value="Submit">
    </form>
</body>
</html>

这是我的index.html(基本登录页面),我试图重定向到登录servlet,然后根据插入到 MySQL 数据库中的值显示 3 个不同仪表板(clientDashboard、salesmanDashboard 和 adminDashboard)中的 1 个

我已经尝试遵循有关如何使用 servlet 的不同教程,但没有任何效果,现在我不知道该怎么办了

编辑1:当我从html页面重定向到servlet时,我不断收到错误404未找到,这对我来说似乎很奇怪,因为我如何在目录中拥有servlet文件

LoginServ.java
以及索引文件中的这行代码
<form action="LoginServ" method="post">
我很确定会搜索具有该名称的文件(不要引用我的话,我对网络开发还是新手)

此时我只是想让重定向正常工作

package servlets;

import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request,
                          HttpServletResponse response)
            throws ServletException, IOException {
        response.sendRedirect(request.getContextPath() + "/salesmanDashboard.jsp");
    }
}

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>Ergasia2</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>Ergasia 2</name>
    <packaging>war</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.target>11</maven.compiler.target>
        <maven.compiler.source>11</maven.compiler.source>
        <junit.version>5.10.0</junit.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>jakarta.platform</groupId>
            <artifactId>jakarta.jakartaee-api</artifactId>
            <version>9.0.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>3.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-jackson</artifactId>
            <version>3.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.inject</groupId>
            <artifactId>jersey-cdi2-se</artifactId>
            <version>3.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.weld.se</groupId>
            <artifactId>weld-se-core</artifactId>
            <version>5.1.2.Final</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.4.0</version>
            </plugin>
        </plugins>
    </build>
</project>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://jakarta.ee/xml/ns/jakartaee" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd" version="6.0">
  <servlet>
    <description/>
    <display-name>LoginServlet</display-name>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>servlets.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/LoginServlet</url-pattern>
  </servlet-mapping>
  <display-name>Ergasia 2</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

我使用的是 Apache Tomcat 10.1.24 当我创建项目时,我选择“Jakarta EE”作为项目生成器,并使用 Maven 作为构建系统,同时我也使用 Oracle OpenJDK 22.0.1

我的目录是这样的

Project1
-src
  -main 
    -java
      -servlets
        - LoginServlet
  -resources
    - META-INF
     - index.html
  -webapp
    - WEB-INF
     - salesmanDashboard.jsp

**答案:**问题看起来是我在

web.xml
文件中编写的 servlet 映射干扰了我尝试运行的 Servlet 中的
@WebServlet("/LoginServlet")
。我不明白为什么,但它确实做到了并删除了

<servlet>
    <description/>
    <display-name>LoginServlet</display-name>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>servlets.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/LoginServlet</url-pattern>
  </servlet-mapping>

web.xml
文件似乎修复了它

jsp servlets http-status-code-404
1个回答
0
投票

如果 JSP 位于

WEB-INF
文件夹下,则无法重定向到 JSP。相反,您可以使用请求调度程序从那里检索它。为此,您应该实现
doGet()
方法:

protected void doGet(HttpServletRequest request,
                          HttpServletResponse response)
            throws ServletException, IOException {
RequestDispatcher dispatcher = getServletContext()
                .getRequestDispatcher("/WEB-INF/salesmanDashboard.jsp");
        dispatcher.forward(request, response);        
    }

protected void doPost(HttpServletRequest request,
                          HttpServletResponse response)
            throws ServletException, IOException {
        response.sendRedirect(request.getContextPath() + "/LoginServlet");
    }
© www.soinside.com 2019 - 2024. All rights reserved.