1。ドメインオブジェクトのプロパティの変更を聴くリスナー
ドメインオブジェクトで属性を変更するイベントリスナーは、servletcontext、httpssession、およびhttpservletrequestの3つのオブジェクトで属性変更情報イベントをリッスンするリスナーです。
これらの3つのリスナーインターフェイスは、servletcontextattributeListener、httpssessionattributeListener、およびservletRequestattributeListenerです。 3つのインターフェイスはすべて、リッスンオブジェクトの属性を削除、削除、交換するイベントを処理する3つのメソッドを定義します。これら3つのインターフェイスの同じイベントの対応するメソッド名はまったく同じですが、受け入れられているパラメーターは異なります。
1.1。属性メソッド
聴取中のオブジェクトに属性を追加すると、イベントリスナーの属性メソッドを呼び出すことにより、Webコンテナが応答します。この方法は、イベントタイプパラメーターを受信します。リスナーは、ドメインに保存されている属性と属性オブジェクトを追加しているドメインオブジェクトを取得できます。各ドメイン属性リスナーの完全な構文定義は次のとおりです。
public void aTtibeAdded(servletcontextattributeevent scae)public void astributerplaced(httpsessionbindingevent hsbe)public void astibutermoved(servletrequestattributeevent srae)
1.2。 astributeremovedメソッド
リッスンされているオブジェクトの属性を削除するとき、Webコンテナは、各ドメインの属性リスナーの完全な構文定義に応答するために、イベントリスナーのAtributERemovedメソッドを呼び出します。
public void astributeremoved(servletcontextattributeevent scae)public void astributeremoved(httpssessionbindingevent hsbe)public void astributeremoved(servletrequestattributeevent srae)
1.3。帰属するメソッド
リスナーのドメインオブジェクトの特定の属性が置き換えられると、Webコンテナは、各ドメイン属性リスナーの完全な構文定義に応答するために、イベントリスナーの属性プレースメソッドを呼び出します。
public void astributeReplaced(servletcontextattributeevent scae)public void astributereplaced(httpsessionbindingevent hsbe)public void astributerplaced(servletrequestattributeevent srae)
1.4。 servletcontextattributeListenerリスナーの例:
servletcontextattributeListenerリスナーを作成して、servletcontextドメインオブジェクトの属性値の変更を監視します。コードは次のとおりです。
packed me.gacl.web.listener; Import java.text.messageformat; Import javax.servlet.servletcontextattributeevevevent; Import javax.servletcontexttatttributeListener; Object* @author:Lonely Canglang* @date:2014-9-11 10:53:04 PM **/ Public Class myservletextextattributeListener ServletcontextattributeListener {@Override public void aTtionteadded(servletcontextextattreeventeventeventeventeventeventeventevent) {0}、属性値は{1} "、scab.getName()、scab.getvalue()); System.out.println(str); } @Override public void astributeRemoved(servletcontextattributeevent scab){string str = messageformat.format( "delete属性:{0} artibute value is:{1}"、scab.getname()、scab.getvalue()); System.out.println(str); } @Override public void astributEREREPLACED(servletContextAttributeevent scab){string str = messageformat.format( "属性の値:{0}はservletcontextドメインオブジェクトに置き換えられました"、scab.getname(); System.out.println(str); }}web.xmlファイルにリスナーを登録します
<リスナー> <説明> myservletextextattributeListenerリスナー</description> <リスナークラス> me.gacl.web.listener.myservletextextattributeListener </ristener-class> </ristener>
servletcontextattributeListenertest.jspテストページを書き込みます
<%@ page Language = "Java" PageEncoding = "UTF-8"%> < //アプリケーションドメインオブジェクトApplication.SetAttribute( "name"、 "gacl")の名前属性の値を置き換えます。 //アプリケーションドメインオブジェクトApplication.RemoveAttribute( "name")で名前属性を削除します。 %> </body> </html>
操作結果は次のとおりです。
実行中の結果から、ServletContextListenerリスナーがServletContextドメインオブジェクト(Application)のプロパティ値の変更を正常に聞いていることがわかります。
1.5。 ServletRequestattributElistenerおよびhttpssissationttributeListenerリスナーの例:
リスナーを書いて、httpssessionおよびhttpservletrequestドメインオブジェクトの属性値の変更を監視すると、コードは次のとおりです。
packed me.gacl.web.listener; Import java.text.messageformat; Import javax.servlet.servletrequestattributeevevevent; Import javax.servlet.servletrequestattributeListener; Import Javax.servlet.http.httssessionAttributelistener; Import javax.servlet.http.httpssessionbindingEvent; public class myRequestandSessionAttributeListenerは、httpstseStionttributeListener、servletrequestattributeListener {@override public void aTtionteadded(servletrequesttribettribettribevevevevevevevevevevet.)属性:{0}、属性値は{1} "、srae.getName()、srae.getValue()); System.out.println(str); } @Override public void astributeremoved(servletRequestattributeevent srae){string str = messageformat.format( "servletRequestドメインオブジェクトの属性を削除する:{0}、属性値は{1}"、srae.getname()、srae.getvalue(); System.out.println(str); } @Override public void astributeReplaced(servletrequestattributeevent srae){string str = messageformat.format( "属性の値:{0}はservletrequestドメインオブジェクトに置き換えられました"、srae.getname()); System.out.println(str); } @Override public void aTtionteadded(httpssessionBindingEvent se){string str = messageformat.format( "属性:{0}は" httpsessionドメインオブジェクトに追加されました。 AttributerEmoved(httpsessionbindeventevent se){string str = messageformat.format( "属性:{0}は「httpsessionドメインオブジェクトから削除されました。属性値は{1}」、se.getname()、se.getvalue(); System.out.println(str); } @Override public void astributeRealPlaced(httpsessionbindingEvent se){string str = messageformat.format( "属性の値:{0}はhttpsessionドメインオブジェクトに置き換えられました"、se.getname(); System.out.println(str); }}web.xmlファイルにリスナーを登録します
<リスナー> <説明> myRequestandSessionAttributElistenerリスナー</description> <リスナークラス> me.gacl.web.listener.myRequestandsessionAttributElistener </ristener-class> </ristener>
RequestandSessionAttributElistenertest.jspテストページを書き込みます
<%@ page Language = "Java" PageEncoding = "UTF-8"%> < //セッションドメインオブジェクトセッションのAA属性の値を交換します。SetAttribute( "aa"、 "xx"); // aa属性session.removeattribute( "aa")を削除します。 //属性request.setattribute( "aa"、 "bb"); // request domain object request.setattribute( "aa"、 "xx")にaa属性の値を置き換えます。 // aa属性request.removeattribute( "aa")を削除します。 %> </body> </html>
操作結果は次のとおりです。
実行の結果から、HTTPSSESSIONATTRIBUTELISTENERリスナーとServletRequestattributElistenerが、HTTPSSESSIONドメインオブジェクトとHTTPServletRequestドメインオブジェクトの属性値の変更をうまく聞いていることがわかります。
2。セッションにバインドされているイベントリスナーを認識します
セッションドメインに保存されているオブジェクトは、複数の状態を持つことができます。セッションドメインからのバインディング(session.removeattribute( "bean"))。セッションオブジェクトを使用してストレージデバイスに持続します。セッションオブジェクトを使用してストレージデバイスから回復します。 2つの特別なリスナーインターフェイス「HTTPSSESSIONBINDINGLISTENERとHTTPSSESSIONATACTIVERIVERIATIVELISTENER」がサーブレット仕様で定義され、Javabeanオブジェクトがセッションドメインで状態を理解するのに役立ちます。
2.1。 httpsessionbindinglistenerインターフェイス
httpsessionbindinglistenerインターフェイスを実装するJavabeanオブジェクトは、セッションにバインドされており、セッションでイベントを削除したことを感じることができます。オブジェクトがhttpsessionオブジェクトにバインドされている場合、Webサーバーはオブジェクトのvoid valuebound(httpssessionbindingEventイベント)メソッドを呼び出します。オブジェクトがHTTPSESSIONオブジェクトから解除されている場合、WebサーバーはオブジェクトのVoid ValueUnbound(httpsessionBindingEventイベント)メソッドを呼び出します。
例:
packed me.gacl.domain; import javax.servlet.http.httpsessionbindingEvent; Import javax.servlet.http.htttssessionbindingListener;オブジェクトがhttpsessionオブジェクトにバインドされている場合、セッションから削除されたイベントは、Webサーバーがオブジェクトがhttpsessionオブジェクトにバインドされているときにオブジェクトのvoid valuebound(httpssessionbindingEventイベント)メソッドを呼び出します。オブジェクトでバインディングすると、Webサーバーはオブジェクトのvoid valueunbound(httpssessionbindingEventイベント)メソッドを呼び出します。 @Override public void valuebound(httpsessionBindingEvent Event){system.out.println(name+"がセッションに追加されました"); } @Override public void valueUnbound(httpsessionBindingEvent Event){System.out.println(name+"Kicked by Session"); } public string getname(){return name; } public void setName(string name){this.name = name; } public javabeandemo1(string name){this.name = name; }}上記のjavabeandemo1 javabeanはhttpsessionbindinglistenerインターフェイスを実装しているため、このJavabeanオブジェクトはセッションにバインドされ、セッションから削除されていることを感じることができます。テストコードは次のとおりです。
<%@ page Language = "Java" pageEncoding = "utf-8"%> <%@ページインポート= "me.gacl.domain.javabeandemo1"%> < Javabeandemo1( "Lonely Canglang")); // removeattribute( "bean"); %> </body> </html>
操作結果は次のとおりです。
2.2。 httpsessionactivationlistenerインターフェイス
HTTPSSESSITACTIVERIVALLISTENERインターフェイスを実装するJavabeanオブジェクトは、アクティブ化された(降下)およびパッシブ化(シリアル化)イベントを感知できます。 httpsessionオブジェクトにバインドされたjavabeanオブジェクトがhttpsessionオブジェクトを使用してパッシブ化(シリアル化)する前に、javabeanオブジェクトのvoid sessionwillpassivate(httpsessioneventイベント)メソッドを呼び出します。このようにして、Javabeanオブジェクトは、HTTPSESSIONオブジェクトを使用してハードディスクにシリアル化(パッシブ)されることを知ることができます。
httpsessionオブジェクトにバインドされたjavabeanオブジェクトがhttpssessionオブジェクトを使用してアクティブ化される(aserialized)後、WebサーバーはJavabeanオブジェクトのVoid SessionDidactive(httpsessioneventイベント)メソッドを呼び出します。このようにして、Javabeanオブジェクトは、それが脱色(活性化)され、HTTPSESSIONオブジェクトでメモリに戻ることを知ることができます。
例:
ge.gacl.domain; import java.io.serializable; import javax.servlet.servlet.httpssessionactivationActivationListener; Import javax.servlet.http.httpsessessevent;アクティブ化され、パッシブなイベントのアクティブ化を知覚します。Javabeanオブジェクトとセッションは、一緒にメモリに脱色(アクティブ化された)になります。不快感:セッションにはJavabeanオブジェクトが存在します。サーバーがセッションをハードディスクにシリアル化すると、セッションのJavabeanオブジェクトがシリアル化可能なインターフェイスを実装する場合、サーバーはセッションのJavabeanオブジェクトをハードディスクにシリアル化します。 Javabeanオブジェクトの操作とハードディスクへのセッションは、パッシベーションと呼ばれます。セッションのJavabeanオブジェクトがシリアル化可能なインターフェイスを実装していない場合、サーバーはまずセッションでJavabeanオブジェクトを削除し、シリアル化可能なインターフェイスを実装していない次に、セッションをハードディスクにシリアル化(パッシブ化)します。 httpsessionオブジェクトにバインドされたjavabeanオブジェクトがhttpsessionオブジェクトでパッシブ化されると、httpssessionオブジェクトにバインドされるjavabeanオブジェクトがhttpssessionオブジェクトでパッシブ化される前に、WebサーバーはJavabeanオブジェクトのvoidを呼び出します。 sessionwillpassivate(httpssessionevent event)メソッドでは、javabeanオブジェクトがハードディスクにhttpsessionオブジェクトを使用してシリアル化(パッシブ)になることを知ることができます。 httpsessionオブジェクトにバインドされたJavabeanオブジェクトがHTTPSESSIONオブジェクトでアクティブ化された後、WebサーバーはJavabeanオブジェクトのVoid SessionDidactive(httpssessioneventイベント)メソッドを呼び出し、JavabeanオブジェクトはHTTPSESSIONオブジェクトがメモリに戻る( @-9-9-authereの保証に戻る(反応)、 11:22:35 PM **/ Public Class JavabeanDemo2は、HTTPSSESSIONATACTIVERIVERISTIVELISTENER、Serializable {private static final long serialversionuid = 7589841135210272124L;プライベート文字列名; @Override public void sessionwillpassivate(httpssessionevent se){system.out.println(name+"およびセッションはハードディスクにシリアル化(パッシブ)一緒になります。セッションのIDは次のとおりです。 } @Override public void sessiondidactivate(httpssessionevent se){system.out.println(name+"and sessionはハードディスクから脱必要にされます(アクティブ化)。 } public string getname(){return name; } public void setName(string name){this.name = name; } public javabeandemo2(string name){this.name = name; }}ハードディスクにパッシブ化され、ハードディスクからメモリまで再アクティブ化されているHTTPSESSIONオブジェクトにバインドされたJavabeanオブジェクトのプロセスを観察するには、TOMCATサーバーを使用して、HTTPSESSIONオブジェクトのパッシベーションとアクティベーションプロセスを完了する必要があります。特定の方法は次のとおりです。
次のように、WebRoot/Meta-INFフォルダーにContext.xmlファイルを作成します。
Context.xmlファイルの内容は次のとおりです。
<context> <manager classname = "org.apache.catalina.session.persistentmanager" maxidleswap = "1"> <store classname = "org.apache.catalina.session.filestore" directory = "gacl"/>> </manager> </context>
Context.xmlファイルで1分間の構成を行った後、httpsessionオブジェクトをローカルハードディスクのGACLフォルダーにパッシブ化します
JSPテストコードは次のとおりです。
<%@ page Language = "Java" PageEncoding = "UTF-8"%> <%@ページインポート= "me.gacl.domain.javabeandemo2"%> <作成されたセッションのIDは次のとおりです。$ {pageContext.session.id} <hr/> <%session.setattribute( "bean"、new javabeandemo2( "lonely and prughtly")); %> </body> </html>このJSPページにアクセスすると、サーバーはすぐにHTTPSESSIONオブジェクトを作成し、HTTPSSESSIonActivationListenerインターフェイスをセッションオブジェクトに実装するJavabeanオブジェクトをバインドします。 1分間待った後、誰もこのJSPページに再びアクセスしません。サーバーは、HTTPSESSIONオブジェクトをハードディスクに自動的にパッシブ化(シリアル化)します。
以下の図に示すように、Tomcat ServerのWork/Catalina/localhost/javaweb_listener_20140908/gaclフォルダーでローカルストレージにシリアル化されたセッションを見つけることができます。
このJSPページに再びアクセスすると、サーバーはハードディスク上のHTTPSESSIONオブジェクトを自動的に再アクティブ化し(脱着)、メモリに戻します。操作結果は次のとおりです。
Javaweb Development Technologyのリスナーテクノロジーには、それほど多くのコンテンツしかありません。毎日の仕事では、リスナーテクノロジーがJavawebプロジェクト開発でより頻繁に使用されるため、このテクノロジーを習得する必要があります。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。