无法通过jsp:include添加JSP中包含的cookie

时间:2011-09-23 17:06:10

标签: jsp servlets cookies jspinclude

当添加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的片段的一部分时不起作用。几乎就像渲染片段后重置响应对象一样。

2 个答案:

答案 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);