タイムアウト発生時点で特定の処理を実行したい場合は、ユーザー定義のセションクラスを作成して、sessionValueUnboundメソッドに記述します。
ユーザー定義のセションクラスの作成方法は、“G.4.1 セション管理の基本的な方法を知りたい”を参照してください。
import javax.servlet.http.HttpSessionBindingEvent;
import com.fujitsu.uji.http.HttpSessionProfile;
public class SampleSession extends HttpSessionProfile {
public void sessionValueUnbound(HttpSessionBindingEvent event) {
// セションが終了したときの処理を記述します。
....
}
}
sessionValueUnboundの引数eventは、javax.servlet.http.HttpSessionBindingListenerインターフェイスのvalueUnboundメソッドに渡されるものと同じです。eventのgetSessionメソッドで、終了するセションのjavax.servlet.http.HttpSessionオブジェクトが取得できます。
ポイント
HttpSessionProfileクラスはjavax.servlet.http.HttpSessionBindingListenerインターフェイスを実装しており、そのvalueUnboundメソッドが呼び出されるとsessionValueUnboundを呼び出します。つまり、valueUnboundが呼び出されるのは、セションクラスがHttpSessionから切り離されたときです。以下の事象が発生したときにHttpSessionから切り離されます。
タイムアウトが発生したとき
HttpSessionProfileクラスのdisposeメソッドが呼び出されたとき
uji:saveSessionタグを使うと、セションクラスをHttpSessionに再登録するため、セションクラスのvalueUnboundが呼び出されます。ただし、この場合はsessionValueUnboundは呼び出されません。
関連項目
APIリファレンスのHttpSessionProfileクラス