質問: 現在下記のような実装になっています ``` <% session.invalidate(); %> ~ ``` この状態だとjsp:includeが動作していないようで、画面にはxxx.jspが表示されておりません。 しかし、以下のように実装を変えると、正常にjsp:includeが動作し、画面にはxxx.jspが表示されております。 ``` ~ <% session.invalidate(); %> ``` 上記事象より、includeが正常動作しない理由はsession.invalidateだと考えられるのですが、何故session.invalidate(セッション削除)によってjsp:includeが動作しなくなるのかが分かりません。 分かる方がいましたら、ご教授をお願いします。
回答: ``をすると、サーブレットコンテナは指定したJSPをインクルードする前にレスポンスを出力しようと試みます。 また、インクルード前に`session.invalidate();`をしているため、インクルード先のJSPを読み込むときに、新たにsessionを生成しようとします。 しかし一度レスポンスを出力しようとした後にsessionを生成することはコンテナの仕様にも依るところですが、基本的にサーブレットの例外となりできません。 対策としては、以下のどちらか2つで可能です。 1. ``のflush属性をつけない。 2. flush属性をつけるときは、インクルードするJSPのpageディレクティブにて、セッションを利用しない宣言をする。 `<%@ page language="java" contentType="text/html; charset=UTF-8" session="false" %>`