[Seasar-user:10003] [Teeda] HttpSession#invalidate() に関して

Nishioka Naoto [E-MAIL ADDRESS DELETED]
2007年 8月 21日 (火) 18:07:18 JST


にしおかです。

いつもお世話になっております。

S2.4.17 + Teeda1.0.11-SNAPSHOTを利用しております。

利用者が一連の処理を行った後、
最後のページを表示するタイミングでHttpSessionの破棄を
行いたいと考えております。

public class SomePage {
  // 画面に表示するメッセージ
  public String someMsg;
  public HttpSession httpSession;
  public void initialize() {
    if (httpSession != null) {
      System.out.println("セッション情報を破棄しました");
      httpSession.invalidate();
    }
  }
}

といった感じのクラスを作成して実行してみたところ、
invalidate()は実行されるのですが、その後、

java.lang.IllegalStateException: レスポンスをコミットした後でセッションを作成
できません

の例外が発生してしまいます(画面そのものは、目的のhtmlが表示されています)。

もちろん、セッションタイムアウト時間が経過すれば自動的に
破棄されるかと思いますが、
サーバのリソース消費を極力抑えるためにも、
できれば一連の作業終了時に明示的に破棄を行いたいと考えております。

スタックトレースからソースを追ったところ、
HttpSessionMap#setAttribute(String key, Object value) メソッド内の
request.getSession(true).setAttribute(key, value);
にたどり着いたのですが、このメソッドが呼び出されないように回避する、
あるいは他に上手くセッション情報を破棄する方法はありますでしょうか?

------------------------------
Nishioka Naoto




Seasar-user メーリングリストの案内