невозможно добавить cookie, включенный в JSP, через jsp: include - PullRequest
5 голосов
/ 23 сентября 2011

Файлы cookie не добавляются в браузер, когда код, добавляющий файл cookie, является частью фрагмента JSP (includes.jsp), включенного в основную страницу (main.jsp) через JSP: INCLUDE.

Код работает нормально, когда он является частью основной страницы (main.jsp). Однако мне нужно добавить cookie через фрагмент, так как этот фрагмент используется на десятках страниц, где я хочу добавить cookie.

Примечание: jsp: include является частью раздела заголовка main.jsp (фрагмент также добавляет несколько ссылок на javascript и css)

Вот фрагмент:

Cookie cookie = new Cookie ("test","test cookie");
cookie.setMaxAge(365 * 24 * 60 * 60);
cookie.setPath("/");
response.addCookie(cookie2);

Вышеописанное прекрасно работает, когда оно является частью main.jsp, но не работает, когда оно является частью фрагмента, добавленного в main.jsp через. это почти как если бы объект ответа сбрасывался после рендеринга фрагмента.

Ответы [ 2 ]

5 голосов
/ 23 сентября 2011

<jsp:include> использует под обложками RequestDispatcher#include() и его документы говорят:

...

У объекта ServletResponse есть элементы пути, и параметры остаются неизменными по сравнению с объектом вызова.Включенный сервлет не может изменить код состояния ответа или установить заголовки; любая попытка внести изменения игнорируется .

...

(выделено мной)

Cookiesдолжны быть установлены в заголовке ответа.Так что это останавливается здесь.Рассмотрим вариант времени компиляции <%@include%>, он буквально встроен в основной источник JSP.

0 голосов
/ 27 марта 2018

Исходный код:

request.setAttribute(“res”, response);
<jsp:include page=“url” />

Целевой код:

HttpServletResponse res = (HttpServletResponse)request.getAttribute(“res”);

//cookie create
Cookie cookie = new Cookie(“test”, “test”);

res.addCookie(cookie);
...