Сопоставления сервлетов

#servlets #web.xml

#сервлеты #web.xml

Вопрос:

Моя проблема в том, что я сопоставил свои сервлеты на web.xml . Когда я отправляю информацию в сервлет, это выдает ошибку «ресурсы не найдены». Как я могу решить эту проблему. Спасибо за ваши ответы.

 <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login Page</title>
</head>
<body>
<form action="Login" method="POST">
UserName:<input type="text" name="user_name">
<BR>
Password:<input type="password" name="password">
<BR>
<input type="submit" value="Gonder">
<BR>
<input type="reset" value="Reset">
</form>

</body>
</html>
  

КОДЫ СЕРВЛЕТОВ выглядят следующим образом

 import java.io.IOException;
import java.sql.SQLException;

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

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;


public class Login extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private String usr_name;
    private String pass;
    static Logger log=Logger.getLogger(Login.class);






    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html");
        PropertyConfigurator.configure("C:\Users\AliArdaOrhan\workspace2\QuizProject\WebContent\WEB-INF\log4j.properties");
        usr_name=request.getParameter("user_name");
        pass=request.getParameter("Password");

        try {
            if(Validation.validate(usr_name,pass)){
                RequestDispatcher rs=request.getRequestDispatcher("Welcome");
                rs.forward(request, response);
            }
            else{
                RequestDispatcher rs=request.getRequestDispatcher("login");
                rs.forward(request, response);
            }
        } catch (ClassNotFoundException | SQLException e) {
            log.error("Cannot Validate User Information", e);
        }

    }

}
  

ВЕБ-XML-КОДЫ выглядят следующим образом

    <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>QuizProject</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>
  <servlet>
    <description>Login Page</description>
    <display-name>Login</display-name>
    <servlet-name>Login</servlet-name>
    <servlet-class>Login</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Login</servlet-name>
    <url-pattern>/Login</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>Welcome</display-name>
    <servlet-name>Welcome</servlet-name>
    <servlet-class>Welcome</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Welcome</servlet-name>
    <url-pattern>/Welcome</url-pattern>
  </servlet-mapping>
</web-app>
  

Комментарии:

1. Я опубликовал неправильно web.xml файл. Я меняю это сейчас.

2. Хорошо, я нашел ошибку. Ошибка заключается в том, что HTML отправляет параметр «Пароль», но сервлет запрашивает «пароль», поэтому процесс проверки не работает, и сервлет пропускает блок if и напрямую переходит к блоку else. В блоке else есть вызов для входа, но в моем приложении нет другого сервлета для входа. Кстати, спасибо за помощь.

Ответ №1:

Вам необходимо добавить сопоставление сервлетов для Login действия в вашем web.xml:

 <servlet>
    <description></description>
    <display-name>Login</display-name>
    <servlet-name>Login</servlet-name>
    <servlet-class>Login</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Login</servlet-name>
    <url-pattern>/Login</url-pattern>
</servlet-mapping>
  

И убедитесь, что вы перезапустили свой сервер после внесения этих изменений в web.xml .

И если вы используете Servlet 3.0 , то вы можете использовать аннотации, подобные приведенным ниже, в вашем сервлете, которые эквивалентны приведенному выше коду:

 @WebServlet("/Login")
public class Login extends HttpServlet {
  

Ответ №2:

Пожалуйста, измените в этой строке

 <form action="Login" method="POST">
  

замените « Login » на « /GuestBook «

Ответ №3:

Вы отправляете свою форму на Login (относительный URL), но ваш сервлет ожидает на /GuestBook . Измените сопоставление сервлетов или атрибут действия формы.