Java Servlet 和 getRequestDispatcher 没有转发

Java Servlet and getRequestDispatcher not forwarding

我正在开发一个简单的 java 网络应用程序,它显示一个页面,您可以在其中添加新客户端,然后显示另一个页面,显示新添加的客户端,但我不断收到此错误:

HTTP Status 404 - /LearningJSP/AddClient
type Status report
message /LearningJSP/AddClient
description The requested resource is not available.

我不明白问题出在哪里。 这是我的应用程序的文件。

"add new client".jsp

<%@ page pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Création d'un client</title>
    </head>
    <body>
        <div>
            <form method="get" action="AddClient">
                <fieldset>
                    <legend>Informations client</legend>

                    <label for="nomClient">Nom <span class="requis">*</span></label>
                    <input type="text" id="nomClient" name="nomClient" value="" size="20" maxlength="20" />
                    <br />

                    <label for="prenomClient">Prénom </label>
                    <input type="text" id="prenomClient" name="prenomClient" value="" size="20" maxlength="20" />
                    <br />

                    <label for="adresseClient">Adresse de livraison <span class="requis">*</span></label>
                    <input type="text" id="adresseClient" name="adresseClient" value="" size="20" maxlength="20" />
                    <br />

                    <label for="telephoneClient">Numéro de téléphone <span class="requis">*</span></label>
                    <input type="text" id="telephoneClient" name="telephoneClient" value="" size="20" maxlength="20" />
                    <br />

                    <label for="emailClient">Adresse email</label>
                    <input type="email" id="emailClient" name="emailClient" value="" size="20" maxlength="60" />
                    <br />
                </fieldset>
                <input type="submit" value="Valider"  />
                <input type="reset" value="Remettre à zéro" /> <br />
            </form>
        </div>
    </body>
</html>

Servlet

package Controllers;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import Model.Client;

/**
 * Servlet implementation class ClientServ
 */

public class ClientServ extends HttpServlet {
    private static final long serialVersionUID = 1L;

public static final String Add = "/affichierClient.jsp";

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub


        String Nom = request.getParameter("nomClient");
        String Prenom = request.getParameter("prenomClient");
        String Adresse = request.getParameter("adresseClient");
        String Telephone = request.getParameter("telephoneClient");
        String Email = request.getParameter("emailClient");

        String message;

        if(Nom.trim().isEmpty() ||  Adresse.trim().isEmpty() ||
                Telephone.trim().isEmpty()) {

            message="Vous n'avez pas rempli tous les champs"; 
            }

        else {
            message="Client crée avec succès"; 
            }

        Client client = new Client();
        client.setNom(Nom);
        client.setPrenom(Prenom);
        client.setAdresse(Adresse);
        client.setEmail(Email);
        client.setTelephone(Telephone);

        request.setAttribute("client", client);
        request.setAttribute("message", message);

    this.getServletContext().getRequestDispatcher(Add).forward(request, response);      
    }


}

jsp页面显示新添加的客户端

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Affichage de client</title>
</head>
<body>

<p class="info"> ${message} </p>

<p>Nom: ${client.Nom}</p>
<p>Prenom: ${client.Prenom}</p>
<p>Adresse: ${client.Adresse}</p>
<p>Numéro de télephone: ${client.Telephone}</p>
<p>Email: ${client.Email}</p>

</body>
</html>

web.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <display-name>WebApp</display-name>
    <servlet>
        <servlet-name>AddClient</servlet-name>
        <servlet-class>Controllers.ClientServ</servlet-class>
    </servlet>



     <servlet-mapping>
        <servlet-name>AddClient</servlet-name>
        <url-pattern>/AddClient</url-pattern>
    </servlet-mapping>


</web-app>

了解如何在 eclipse 中创建断点。

这里打个断点

String Nom = request.getParameter("nomClient");

了解如何在 Eclipse 中启动调试会话。

开始一个。如果 The execution never stops at the breakpoint 表示配置错误。如果确实停止,则意味着在后续请求中抛出 404。

如果您只有 doGet(...) 处理请求,那么您可能有 url 路径问题

问题很可能来自那一行:

<form method="get" action="AddClient">

当你给出一个相对 URL 而不是绝对的 URL 时,它被用来构建一个完整的 URL 从当前 开始。

因此,如果之前的 URL 是 /LearningJSP,则当它应该使用 /AddClient 以正常 404 错误结束时,以下请求将发送到 /LearningJSP/AddClient

修复:只需使用绝对 URL:

<form method="get" action="/AddClient">