Ответ 1
Ответ TheNewIdiot успешно объясняет проблему и причину, по которой вы не можете отправлять атрибуты в запрос через перенаправление. Возможные решения:
-
Использование пересылки. Это позволит передать атрибуты запроса в представление, и вы можете использовать их в форме
ServletRequest#getAttribute
или используя Язык выражений и JSTL. Краткий пример (повторное использование кода ответа TheNewIdiot).Контроллер (ваш сервлет)
request.setAttribute("message", "Hello world"); RequestDispatcher dispatcher = servletContext().getRequestDispatcher(url); dispatcher.forward(request, response);
Просмотр (ваш JSP)
Использование сценариев:
<% out.println(request.getAttribute("message")); %>
Это просто для информационных целей. Следует избегать использования сценариев : Как избежать кода Java в файлах JSP?. Ниже приведен пример использования EL и JSTL.
<c:out value="${message}" />
-
Если вы не можете использовать переадресацию (потому что вам это не нравится или вы не чувствуете этого, или потому, что вы должны использовать перенаправление), тогда опция будет сохранять сообщение в качестве атрибута сеанса, затем перенаправить на ваш взгляд, восстановить атрибут сеанса в вашем представлении и удалить его из сеанса. Не забудьте всегда иметь сеанс пользователя только с соответствующими данными. Пример кода
контроллер
//if request is not from HttpServletRequest, you should do a typecast before HttpSession session = request.getSession(false); //save message in session session.setAttribute("helloWorld", "Hello world"); response.sendRedirect("/content/test.jsp");
Просмотр
Опять же, показывая это с использованием сценариев, а затем EL + JSTL:
<% out.println(session.getAttribute("message")); session.removeAttribute("message"); %> <c:out value="${sessionScope.message}" /> <c:remove var="message" scope="session" />