当添加cookie的代码是主页(main.jsp)中包含的JSP(includes.jsp)片段的一部分时,通过JSP:INCLUDE将cookie添加到浏览器中。
当代码是主页面(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 via的片段的一部分时不起作用。几乎就像渲染片段后重置响应对象一样。
答案 0 :(得分:5)
<jsp:include>
使用封面RequestDispatcher#include()
及其docs说:
...
ServletResponse
对象的路径元素和参数与调用者保持不变。包含的servlet无法更改响应状态代码或设置标头; 忽略任何改变的尝试。...
(强调我的)
Cookie将在响应标头中设置。所以它停在这里。考虑编译时变体<%@include%>
,它在主JSP的源代码中直接内联。
答案 1 :(得分:0)
源代码:
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);