5

Cookie を追加するコードが、JSP:INCLUDE を介してプライマリ ページ (main.jsp) に含まれる JSP (includes.jsp) のフラグメントの一部である場合、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 に追加されたフラグメントの一部である場合は機能しません。フラグメントがレンダリングされた後、応答オブジェクトがリセットされているかのようです。

4

2 に答える 2

6

裏での<jsp:include>使用法RequestDispatcher#include()とそのドキュメントは次のように述べています。

..。

オブジェクトにはServletResponseパス要素があり、パラメーターは呼び出し元から変更されません。含まれているサーブレットは、応答ステータスコードを変更したり、ヘッダーを設定したりすることはできません。変更を試みても無視されます。

..。

(強調鉱山)

クッキーは応答ヘッダーに設定されます。だからここで止まります。コンパイル時のバリアントを考えてみましょう<%@include%>。これは、メインのJSPのソースに文字通りインライン化されます。

于 2011-09-23T18:02:32.963 に答える
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);
于 2018-03-27T00:29:11.867 に答える