как сообщение из сервлета и отображения в jsp

Я пытаюсь сделать что-то, что выглядит маленьким, но это не удается. Я пытаюсь отправить ответное сообщение обратно в jsp, когда вход в систему не удается, но не может. На данный момент я могу только перенаправить обратно в jsp, но не могу отобразить сообщение от сервлета на нем. Это часть сервлета перенаправления:

                if (count > 0) {
                res.sendRedirect("adminHome.jsp");
            } else {

                res.sendRedirect("index.jsp");
            }

Я попытался распечатать сообщение с помощью PrintWriter и перенаправления, но не удалось, потому что я не мог получить, как получить сообщение в JSP. Я также читал, что я не должен перенаправление, но, скорее, я должен просто вперед от сервлета. Как я могу это сделать? Пожалуйста, помогите с исправлением кода для пересылки из сервлета, а также для получения в JSP. Спасибо

3 ответов


если вы настаиваете на использовании перенаправления вместо переадресации, то у вас есть 2 варианта:

  1. передать сообщение в качестве параметра запроса

    String message = "hello";
    res.sendRedirect("adminHome.jsp?message=" + URLEncoder.encode(message, "UTF-8"));
    

    , так что вы можете отобразить его в JSP следующим образом

    <p>Message: ${param.message}</p>
    

    это видно только в адресной строке браузера, а также и вы не сможете пройти нестандартные объекты Java таким образом.

  2. сохраните его в сеансе

    String message = "hello";
    req.getSession().setAttribute("message", message);
    res.sendRedirect("adminHome.jsp");
    

    , так что вы можете отображать (и удалить) это в JSP следующим образом:

    <p>Message: ${message}</p>
    <c:remove var="message" scope="session" /> 
    

    удаление важно, иначе он застрянет там на весь сеанс.


однако, если вы открыты для использования forward вместо redirect, это более элегантно:

String message = "hello";
req.setAttribute("message", message);
req.getRequestDispatcher("/adminHome.jsp").forward(req, res);

и отобразить его следующим образом в JSP

    <p>Message: ${message}</p>

Читайте также:


установите сообщение в качестве атрибута объекта запроса:

request.setAttribute("message", messageString);

используйте RequestDispatcher для отправки объектов запроса и ответа в jsp:

RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("urlString");
dispatcher.forward(request, response);

доступ к нему в вашем JSP с помощью синтаксиса языка выражений:

${message}

вы можете сохранить сообщение в запросе, а затем переслать его в jsp, а не перенаправлять.

    request.setAttribute("msg", "The actual error message to be displayed");

    RequestDispatcher rd = getServletContext().getRequestDispatcher("/yourpage.jsp");
    rd.forward(request, response);

затем на странице jsp у вас есть доступ к сообщению через запрос.