Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

includeされたServletにおいてCookieを追加するには…


現在JSP,Servletを勉強しています。
途中でCookieについて 分からない問題にぶつかってしまいました。

下記のように二つのサブレットを作成しました


MyServlet1.java:

package jp.co.kiyoharatakuya;
public class MyServlet1 extends HttpServlet
{
    public void doGet( HttpServletRequest request , HttpServletResponse response )
    {
        //....
        //....
        request.getRequestDispatcher("/servlet/MyServlet2").include( request , response );
        //...
        //...
    }
}




MyServlet2.java:

package jp.co.kiyoharatakuya;
public class MyServlet2 extends HttpServlet
{
    public void doGet( HttpServletRequest request , HttpServletResponse response )
    {
        //....
        //....
    Cookie cookie = new Cookie( "MyCookieName" , "MyCookievalue" );
    cookie.setMaxAge( 3600 * 24 );   //一日のライフタイム
        response.addCookie( cookie );
        //...
        //...
    }
}




WebRoot/WEB-INF/web.xml:

<servlet>
    <servlet-name>MyServlet1</servlet-name>
    <servlet-class>jp.co.kiyoharatakuya.MyServlet1</servlet-class>
</servlet>
<servlet>
    <servlet-name>MyServlet2</servlet-name>
    <servlet-class>jp.co.kiyoharatakuya.MyServlet2</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>MyServlet1</servlet-name>
    <url-pattern>/servlet/MyServlet1</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>MyServlet2</servlet-name>
    <url-pattern>/servlet/MyServlet2</url-pattern>
</servlet-mapping>


そして、このMyServlet1をアクセスしたら、MyServlet2におけるCookieの追加は動作しなかった.

telnetコマンドで レスポンス ヘッダー を チェックしたら やはり このCookieは追加されなかった.
どうして、includeされたServletでCookieを追加されなかったのでしょうか...
どなたかご存知の方はいませんでしょうか。













2

回答

2724

閲覧

2件の回答

評価

0

includeのJavaDocによると
インクルードされたServletはレスポンスの状態コードを変更したり、 ヘッダに値を設定することはできません。そのような試みは全て無視されます。

のようになっているので、Cookieは無視されるのでしょうね。

評価

0

>> インクルードされたServletはレスポンスの状態コー>> ドを変更したり、 ヘッダに値を設定することはでき>> ません。そのような試みは全て無視されます

なるほど〜
Cookieを追加することは 実はヘッダーの設定ですね
だから追加されなかったというわけなんだ

ご指導、どうもありがとうございます。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。