Ответ об ошибке не отображается при использовании doPost? - PullRequest
0 голосов
/ 28 сентября 2019

По какой-то причине мой метод отображения сообщений об ошибках больше не работает и не отображается на странице 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>

Редактировать

Проблема с отображением сообщения об ошибке была вызвана типом используемого имени ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...