知覚リスナーセッション結合事象
ドメインに格納されたセッション・オブジェクトは、複数の状態を持つことができ:セッション内(にsession.setAttribute(「豆」、Object)を結合;セッション結合ドメインから放出(session.removerAttribute(「豆」);セッションを持つオブジェクト永続的記憶装置と、セッションは、記憶装置からの回復を持つオブジェクト。
サーブレット仕様では、二つの特別なリスナーインタフェースHttpSessionBindingListenerをを定義し、HttpSessionActivationListenerのJavaBeanオブジェクトは、それらが両方のインターフェイスは、web.xmlファイルに登録する必要はありません実装セッションドメインクラスで、自分の状態を理解するために。
HttpSessionBindingListenerをインタフェース
目標を達成するためのJavaBean HttpSessionBindingListenerをインタフェースは削除セッションとセッションイベントにバインドするために自分自身を知覚します。
オブジェクトはHttpSessionオブジェクトにバインドされている場合、Webサーバは、オブジェクトのvalueBound(HttpSessionのイベントイベント)メソッドを呼び出します。
オブジェクトは結合HttpSessionオブジェクトから解放されると、Webサーバは、オブジェクトvalueUnbound(HttpSessionBindingEventイベント)メソッドを呼び出します。
HttpSessionBindingListenerをリスナーの例:
●次のように、ドメインのセッション状態オブジェクトを聞いてリスナーを作成:
パッケージcom.xdl.listener。
輸入れるjavax.servlet.http.HttpSessionBindingEvent。
輸入javax.servlet.http.HttpSessionBindingListener。
/ **
* MySessionBindingListenerクラスがインタフェースを実装しHttpSessionBindingListenerを
* /
パブリッククラスMySessionBindingListenerは、HttpSessionBindingListenerを実装して、{
プライベート文字列名;
公共MySessionBindingListener(文字列名){
this.name =名前;
}
パブリック文字列のgetName(){
名前を返します。
}
公共ボイドのsetName(文字列名){
this.name =名前;
}
@オーバーライド
公共のボイドのvalueBound(HttpSessionBindingEventイベント){
System.out.println(名前+「セッションに追加されました」);
}
@オーバーライド
ます。public void valueUnbound(HttpSessionBindingEventイベント){
System.out.println(名前+は、「セッションの外にあります」);
}
}
●SessionBindingListenerTest.jspのテストページを作成します。
<%@ページのインポート= "com.xdl.listener.MySessionBindingListener" %>
<%@ページ言語= "javaの" contentTypeの= "text / htmlの;のcharset = UTF-8"
pageEncodingは= "UTF-8" %>
<!DOCTYPE HTML>
<HTML>
<ヘッド>
<メタ文字セット= "UTF-8">
<タイトル>バンドブラザーズのIT教育</ TITLE>
</ head>の
<身体>
<%
//オブジェクトをMySessionBindingListenerますセッションにバインドされています
session.setAttribute( "豆"、新MySessionBindingListener( "三十画生"));
//セッションMySessionBindingListenerからオブジェクトを削除します
session.removeAttribute( "豆")。
%>
</ BODY>
</ HTML>
Tomcatサーバを開き、図14に示した結果。
コンソールで、図14 MySessionBindingListener出力情報
●HttpSessionActivationListener接口
HttpSessionActivationListenerインタフェースは、彼らが活性化されたことを認識し(非直列化)および受動的(直列化)イベントがあり、目標を達成するためのJavaBean。
HttpSessionのオブジェクト(直列化された)で不動態化するオブジェクトのJavaBeanのHttpSessionオブジェクトにバインド無効sessionWillPassivateする前に、Webサーバは、オブジェクトのJavaBean(HttpSessionEventイベント)メソッドを呼び出します。JavaBeanのできるようなオブジェクトは知っているだろうとHttpSessionオブジェクトは、ハードディスクに一緒に(パッシベーション)シリアライズされます。
対象のJavaBean HttpSessionオブジェクトにバインドすると、Webサーバは(HttpSessionEventイベント)メソッドのボイドsessionDidActive JavaBeanオブジェクト呼び出した後HttpSessionオブジェクト(直列化復元)で活性化されます。JavaBeanのできるこのようなオブジェクトは、彼らはするつもりだった知っているとのHttpSessionをオブジェクトが戻ってメモリに一緒に非直列化(活性化)されています。
HttpSessionActivationListenerリスナーの例:
●次のように準備されたリスナーは、不動態化及び活性化イベントでセッションオブジェクトを聴きます:
パッケージcom.xdl.listener。
インポートしたjava.io.Serializable;
輸入javax.servlet.http.HttpSessionActivationListener。
輸入れるjavax.servlet.http.HttpSessionEvent。
/ **
* MySessionActivationListenerクラスが実装
* HttpSessionActivationListenerとSerializableインタフェース
* /
パブリッククラスMySessionActivationListener
実装HttpSessionActivationListener、シリアライズ{
プライベート静的最終長いserialVersionUIDの= 1L;
プライベート文字列名;
公共MySessionActivationListener(文字列名){
this.name =名前;
}
パブリック文字列のgetName(){
名前を返します。
}
公共ボイドのsetName(文字列名){
this.name =名前;
}
@オーバーライド
公共ボイドsessionDidActivate(HttpSessionEvent SE){
System.out.printlnは(名前
+「セッションが一緒にハードディスクの順序で、セッションIDは次のとおりです。」
+ se.getSession()のgetId())。
}
@オーバーライド
公共ボイドsessionWillPassivate(HttpSessionEvent SE){
System.out.printlnは(名前
+「バックメモリへのハードディスクのデシリアライズとのセッションは、セッションのIDは次のとおりです。」
+ se.getSession()のgetId())。
}
}
●MySessionActivationListenerのHttpSessionにバインドされた監視対象のオブジェクトがHttpSessionオブジェクトは、ハードディスクやメモリに戻し、プロセスの再起動からハードディスクに不動態化されると共に物体、私たちは、私たちはTomcatサーバーHttpSessionオブジェクトと保護を助ける手助けする必要があります活性化プロセスは、具体的には、以下
WebContent \ META-INFフォルダでは、図15に示すcontext.xmlファイルを作成します。
15 context.xmlファイルを作成します。
次のようにcontext.xmlファイルの内容は以下のとおりです。
<?xml version = "1.0" エンコード= "UTF-8"?>
<コンテキスト>
<マネージャークラス名= "org.apache.catalina.session.PersistentManager"
maxIdleSwap = "1">
<ストアクラス名= "org.apache.catalina.session.FileStore"
ディレクトリ= "XDL" />
</マネージャー>
</コンテキスト>
1の後分のcontext.xmlの設定ファイルになるのHttpSessionオブジェクトファイルを保護XDLフォルダのローカルハードディスクへ。
●書き込みSessionActivationListenerTest.jspのテストページ
<%@ページのインポート= "com.xdl.listener.MySessionActivationListener" %>
<%@ページ言語= "javaの" contentTypeの= "text / htmlの;のcharset = UTF-8"
pageEncodingは= "UTF-8" %>
<!DOCTYPE HTML>
<HTML>
<ヘッド>
<メタ文字セット= "UTF-8">
<タイトル>バンドブラザーズのIT教育</ TITLE>
</ head>の
<身体>
JSPページが、アクセスされたHttpSessionが作成され、Idの作成セッションは、次のとおりです。$ {。PageContextのsession.id}
<時間>
<%
session.setAttribute( "豆"、新MySessionActivationListener( "三十画生"));
%>
</ BODY>
</ HTML>
JSPページにアクセスし、サーバーはすぐにHttpSessionオブジェクトを作成し、実施していきますJavaBeanはHttpSessionActivationListenerセッションオブジェクトにバインドされたインターフェース、誰も訪問このJSPページ、再び1分間待機した後、サーバーは自動的れるオブジェクトハードディスクへのパッシベーションHttpSessionオブジェクト(直列化されました)。
16セッションの作成
ディスクに不動態化された図17のセッション
我々は、図18に示すローカルに保存されたセッションのシーケンスを見つけるためにTomcatサーバー\カタリナ\ localhostの\ XDL \ XDLフォルダを、作業することができます。
18
再度、JSPページにアクセスすると、サーバーは自動的にメモリにハードディスクHttpSessionオブジェクトの再活性化(直列化復元)する(シリアル化された)不動態化されています。結果を図19の実行に示します。
図19は、不動態化されたセッションが再起動されます