Скрыть скрытые параметры с помощью response.sendRedirect ()
Как передать скрытые параметры? Я хочу вызвать страницу (test.jsp), но также передать 2 скрытых параметра, например, сообщение.
response.sendRedirect("/content/test.jsp");
- Как проверить загруженный файл, будь то изображение или другой файл?
- java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath () Ljava / lang / String;
- Как обнаружить закрытие браузера?
- ContextLoaderListener или нет?
- HttpServletResponse sendRedirect постоянный
- Перенаправление на фактическую страницу, что они просматривали до входа в систему
- Ошибка CreateProcess = 206. Имя файла или расширение слишком велико при запуске метода main ()
- Предотвратить доступ пользователя к ранее посещаемой защищенной странице после выхода из системы
- Как я могу прочитать выходной stream HttpServletReponses?
- Объявление Spring Bean в контексте родительского контекста и дочернего контекста
- Окончательная версия Java-версии (J2EE, Java EE, Servlet, JSP, JSTL)
- Получить параметр, отправленный через jquery ajax в Java Servlet
- java.lang.ClassNotFoundException: HttpServletRequest
Ответ TheNewIdiot успешно объясняет проблему и причину, по которой вы не можете отправлять атрибуты в запрос через redirect. Возможные решения:
-
Использование пересылки. Это позволит передать атрибуты запроса в представление, и вы можете использовать их в форме
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.
-
Если вы не можете использовать пересылку (потому что вам это не нравится или вы не чувствуете этого так или потому, что вы должны использовать redirect), тогда опция будет сохранять сообщение в качестве атрибута сеанса, а затем перенаправить на ваш просмотр , восстановить атрибут сеанса в вашем представлении и удалить его из сеанса. Не забудьте всегда иметь сеанс пользователя только с соответствующими данными. Пример кода
controller
//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"); %>
Как правило, вы не можете отправить запрос POST с использованием метода sendRedirect () . Вы можете использовать RequestDispatcher для пересылки () запросов с параметрами в одном и том же веб-приложении, в том же контексте.
RequestDispatcher dispatcher = servletContext().getRequestDispatcher("test.jsp"); dispatcher.forward(request, response);
Спецификация HTTP указывает, что все переадресации должны быть в форме GET (или HEAD). Вы можете рассмотреть возможность шифрования параметров строки запроса, если проблема безопасности. Другой способ – вы можете отправить POST в цель, имея скрытую форму с методом POST и отправив ее с javascript при загрузке страницы.
Используя session
, я успешно передал параметр ( name
) из сервлета № 1 в сервлет # 2, используя response.sendRedirect
в сервлет # 1. Код сервлета № 1:
protected void doPost(HttpServletRequest request, HttpServletResponse response) { String name = request.getParameter("name"); String password = request.getParameter("password"); ... request.getSession().setAttribute("name", name); response.sendRedirect("/todo.do");
В Servlet # 2 вам не нужно возвращать name
. Он уже подключен к сеансу. Вы можете сделать String name = (String) request.getSession().getAttribute("name");
— но вам это не нужно.
Если Servlet # 2 вызывает JSP, вы можете показать это name
на веб-странице JSP:
Welcome ${name}