#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
. Измените сопоставление сервлетов или атрибут действия формы.