По какой-то причине мой метод отображения сообщений об ошибках больше не работает и не отображается на странице jsp.Вместо этого страница просто обновляется.Я не могу вспомнить, сломался ли он до или после того, как я перешел с метода doGet на метод doPost.Как вы думаете, это может быть причиной?В любом случае, я не хочу возвращаться и просто должен быть в состоянии показать ошибку.
Сообщения об ошибках отображаются в выходных данных, поэтому они не имеют ничего общего с нормальным выполнением программы, а скорее с методом errorResponse или самим файлом JSP.
Следует также отметить, что после того, как сообщение было выполнено, URL текущей просматриваемой страницы (если это какой-либо индикатор того, что не так (?)):
http://localhost:8080/L1_WebShop_war_exploded/Users (ссылка на сервлет)
вместо того, что было раньше:
http://localhost:8080/L1_WebShop_war_exploded/login.jsp (ссылка на jsp)
UsersServlet.java
@WebServlet(name = "Users")
public class UsersServlet extends HttpServlet {
private void errorResponse(HttpServletRequest request,
HttpServletResponse response,
String msg,
String redirect) throws ServletException, IOException {
System.out.println("ERROR: " + msg + " to " + redirect);
request.setAttribute("errorResponse", msg);
request.getRequestDispatcher(redirect).forward(request, response);
}
private void doLogin(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
switch (UsersHandler.login(username, password)) {
case UsersHandler.NO_PASSWORD:
errorResponse(request, response, "No specified password.", "login.jsp");
break;
case UsersHandler.NO_USERNAME:
errorResponse(request, response, "No specified username.", "login.jsp");
break;
case UsersHandler.LOGIN_SUCCESS:
onLoginSuccess(request, response, username);
break;
case UsersHandler.LOGIN_FAILURE:
errorResponse(request, response, "Invalid username or password", "login.jsp");
break;
default:
errorResponse(request, response, "Unknown exception raised.", "login.jsp");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String command = Commands.translateRequestToCommand(request);
if (command != null && command.length() > 0) {
switch (command) {
case Commands.LOGIN_COMMAND: doLogin(request, response); break;
case Commands.LOGOUT_COMMAND: doLogout(request, response); break;
case Commands.REGISTER_COMMAND: doRegister(request, response); break;
default:
}
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
login.jsp
<%@ page import="view.Commands" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Login</title>
</head>
<body>
<form method="post" action="Users">
<input type="hidden" name=<%= Commands.COMMAND%> value=<%= Commands.LOGIN_COMMAND%>>
Enter username : <input type="text" name = "username"></br>
Enter password : <input type="password" name = "password"></br>
<div style="color: #FF0000;">${errorResponse}</div><br>
<input type="submit" value="login">
</form>
<a href = "register.jsp">Register</a><br>
</body>
</html>
Редактировать
Проблема с отображением сообщения об ошибке была вызвана типом используемого имени ключа.