1.監視の紹介
1.1。リスナーの概念
リスナーは、他のオブジェクトで発生するイベントまたは状態の変更を聞き、処理するために特別に使用されるオブジェクトです。監視されているオブジェクトで状況が発生すると、対応するアクションがすぐに実行されます。リスナーは、実際には特定のインターフェイスを実装する通常のJavaプログラムです。このプログラムは、別のJavaオブジェクトのメソッド呼び出しまたはプロパティの変更をリッスンするために特別に使用されます。上記のイベントが聴くオブジェクトで発生すると、リスナーの特定の方法がすぐに実行されます。
1.2。リスナーケース - ウィンドウウィンドウを聞いているエベントのリスナー
ge.gacl.listener.demo; import java.awt.frame; import java.awt.event.windowevent; import java.awt.event.windowlistener; public class demo1 { /***javaイベントリスニングメカニズム*1。イベントリスニングには、イベントソース、イベントオブジェクト、イベントリスナー*2の3つのコンポーネントが含まれます。イベントソースでアクションが発生すると、イベントリスナーのメソッドを呼び出し、メソッドを呼び出すときにイベントオブジェクトを渡します。 *開発者は、リスナーのイベントオブジェクトを介してイベントソースを取得でき、それによりイベントソースで動作します。 */ public static void main(string [] args){frame f = new frame(); f.setsize(400、400); f.setVisible(true); //イベントリスナーf.addwindowlistener(new Windowlistener(){public void windowactivated(windowevent e){} public void windowclosed(windowevent e){}/*** windowlistenerリスナーが聞かれると、ウィンドウclosingはwindows wid of in widcls wid wid call in wid call in wid call in wid call in wish formが聞こえます。 e){//イベントオブジェクトeframe f =(frame)e.getSource()を取得します。 windowpedened(windowevent e){}}); }}1.3。他のオブジェクトで聞くことができるオブジェクトを設計する
開発を行っているときは、リスナーを書いて他のオブジェクトを監視します。それでは、このオブジェクトが他のオブジェクトによって聞くことができるようにオブジェクトを設計したい場合はどうすればよいでしょうか?厳密なイベント処理モデルに従ってオブジェクトを設計できます。このオブジェクトは、他のオブジェクトで聞くことができます。イベント処理モデルには、イベントソース、イベントオブジェクト、イベントリスナーの3つのコンポーネントが含まれます。
イベント処理モデルに応じて、個人のオブジェクトを設計しましょう。特定のコードは次のとおりです。
packy me.gacl.observer;/*** @classname:person(event source)* @description:イベントソースとして個人クラスを設計します。このクラスのオブジェクトの動作(食事、ランニングなど)は、他のオブジェクトで聞くことができます* @author:lonely canglang* @date:2014-9-9 9:26:06 pm **/ public class person {/ *** @field:リスナー*人間クラスのパーソンリストナーの変数を削除します/** * @method:eat * @description:デザインの人の行動:eat * @anthor:lone and arrogance * */public void eat(){if(リスナー!= null){/** *リスナーのdoeatメソッドを呼び出して、人のクラスオブジェクトを聴きます。 listener.doeat(新しいイベント(これ)); }} /*** @method:run* @description:デザインの人の行動:run* @anthor:lone and arrogance** /public void run(){if(リスナー!= null){ /***リスナーのDorunメソッドを呼び出して、人のクラスオブジェクトラン(ラン)アクションを聞き、イベントオブジェクトイベントを渡します。 *イベントオブジェクトはイベントソースをカプセル化します。これは、新しいイベント(これ)でイベントソースを表します*/ ristener.dorun(新しいイベント(this))。 }} / ** * @method:RegisterListener * @description:この方法は、人のクラスオブジェクトの動作を聴くリスナーを登録するために使用されます * @anthor:@paramリスナー * / public void RegisterListener(PersonListenerリスナー){this.listener = sistener; }}/*** @classname:personlistener(イベントリスナー)* @description:人クラスのリスナーインターフェイスを設計(イベントソース)* @author:lonely canglang* @date:2014-9-9 9:28:06 **/インターフェイスパーソンリストナー{/** *実装クラスがdoeatメソッドを実装する場合、人クラスのオブジェクトeat(eat)のアクションを監視できます * @anthor:lonely canglang * * @param e */ void doeat(event e); /** * @method:dorun * @description:この方法は、人オブジェクトの実行(実行)の動作を聞くために使用されます。 *実装クラスがDorunメソッドを実装する場合、人クラスのオブジェクトのアクションを聴くことができます(実行) } public Person getSource(){return source; } public void setSource(個人ソース){this.source = source; }}このようなデザインの後、Peronクラスのオブジェクトは他のオブジェクトで聞くことができます。テストコードは次のとおりです。
packy me.gacl.observer; public class persontest { / ** * @method:main * @description:test person class * @anthor:the arrogant wolf * * @param args * / public static void main(string [] args){// person p = new person(); // Pオブジェクトの動作を聴くリスナーを登録しますpオブジェクトp.registerListener(// peathing動作を聞くパブリックボイドdoeat(event e){person p = e.getsource(); out.out.println(p + "eating");} system.out.println(p + "eating"); // p p.eat(); // p running p.run(); }}実行結果:
me.gacl.observer.person@4a5ab2はme.gacl.observer.person@4a5ab2を食べています
2。Javawebのリスナー
2.1。基本概念
Javawebのリスナーは、サーブレット仕様で定義されている特別なクラスです。これらは、WebアプリケーションのServletContext、httpsession、ServletRequestなどのドメインオブジェクトの作成および破壊イベントをリッスンしたり、これらのドメインオブジェクトのプロパティが変更されているイベントをリッスンするために使用されます。
2.2。サーブレットリスナーの分類
サーブレット仕様には、複数のタイプのリスナーが定義されています。リスニングに使用されるイベントソースは、servletcontext、httpsesssion、servletrequestです。サーブレット仕様は、これら3つのオブジェクトの操作のために、複数のタイプのリスナーを3つのタイプに分割します。
•ドメインオブジェクト自体の作成と破壊を聴くイベントリスナー。
•ドメインオブジェクトにプロパティを追加および削除するために耳を傾けるイベントリスナー。
•httpsessionドメイン内のオブジェクトのステータスを聴くイベントリスナー。
2.3。 ServletContextドメインオブジェクトの作成と破壊を聞く
ServletContextListenerインターフェイスは、ServletContextオブジェクトの作成と破壊イベントをリッスンするために使用されます。 ServletContextListenerインターフェイスを実装するすべてのクラスは、ServletContextオブジェクトの作成と破壊をリッスンできます。
•ServletContextオブジェクトが作成されると、ContextInitialized(ServletContextevent Scet)メソッドが起動されます。
•ServletContextオブジェクトが破壊されると、ContextDestroyed(ServletContextEvent Scet)メソッドがアクティブになります。
•ServletContextドメインオブジェクトを作成および破壊する時間:
create:server Startupは、各WebアプリケーションにServletContextを作成します
破壊:サーバーが閉じる前に各Webアプリケーションを表すServletContextを閉じます。
例:myServletContextListenerクラスを作成し、ServletContextListenerインターフェイスを実装し、ServletContextオブジェクトの作成と破壊を聞いてください
1。次のコードを使用してリスナーを書きます。
ge.gacl.web.listener; import javax.servlet.servletcontextevent; Import javax.servlet.servlet.servletcontextlistener;/*** @classname:myservletcontextlistener* @description:myservletcontextlistener creats crass emptement fortextextener、 ServletContextオブジェクトの破壊。 * @Author:誇りに思うウルフ* @Date:2014-9-9 10:26:16 PM **/ Public Class MyServletContextListenerは、ServletContextListener {@OverRide public void contextInitialized(servletcontextextevent scet){system.out.out.println( "servetcontext creational"); } @Override public void ContextDestroyed(servletContextEvent Scet){system.out.println( "servletContextオブジェクト破壊"); }}2。web.xmlファイルにリスナーを登録します
イベントソースを聞くには、イベントソースのアクションを監視するために、イベントソースにリスナーを登録する必要があることを上記で述べました。 Javawebでは、リスニング登録は次のようにweb.xmlファイルで構成されています。
<?xml version = "1.0" encoding = "utf-8"?> <web-appバージョン= "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instcance" xsi:schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/ns/javaee/web-app_0.xsd"> </display-name> <welcome-file-list> <welcome-file> index.jsp </welcome-file> </welcome-file-list> <! - servletcontextオブジェクトを聴くためにリスナーを登録 - > <リスナー> <説明> servletcontextlistenerリスナー</説明> <! <リスナークラス> me.gacl.web.listener.myservletcontextlistener </ristener-class> </ristener> </web-app>
これらの2つのステップの後、リスナーの執筆と登録を完了しました。 Webサーバーが起動すると、web.xmlで構成されたリスナーをservletcontextオブジェクトに自動的に登録します。このようにして、開発されたMyServletContextListenerリスナーは、ServletContextオブジェクトで聞くことができます。
2.4。 httpsessionドメインオブジェクトの作成と破壊を聞く
HTTPSESSIONLISTENERインターフェイスは、HTTPSESSIONオブジェクトの作成と破壊を聞くために使用されます。セッションを作成すると、セッションを破壊するときにセッションが作成(httpsessionevent se)メソッドがアクティブになり、セッションデストロイ(httpssessionevent se)メソッドがアクティブになります。
例:myhttpssessionListenerクラスを作成し、httpsessionlistenerインターフェイスを実装し、httpsessionオブジェクトの作成と破壊を聞く
1。次のコードを使用してリスナーを書きます。
packed me.gacl.web.listener; Import javax.servlet.http.httpsessionevent; Import javax.servlet.http.httpsessionlistener;/*** @classname:myhttpsessionlistener* @description:myhttpsessionlistener class emptpsener emptpsession httpssessionオブジェクトを作成および破壊するアクションを聞くことができます。 * @author:lonely canglang* @date:2014-9-9 11:04:33 pm **/ public class myhttpsessionlistenerはhttpssessionlistener {@override public void sessioneded(httpsessionevent se){system.out.out.out() }/* httpsessionの破壊時間は、次のようにweb.xmlで構成する必要があります:* <session-config> <session-timeout> 1 </session-timeout> </session-config> }}2。web.xmlファイルにリスナーを登録します
<! - httpsessionオブジェクトをリスニングするためにリスナーを登録 - > <リスナー> <説明> httpsessesslistenerリスナー</description> <リスナークラス> <リスナークラス> me.gacl.web.listener.myhttssessionlistener </ristener-class> </ristener> < httpsesssionオブジェクト - > <session-config> <! - httpsessionオブジェクトの1分後にhttpsessionオブジェクトの破壊を構成 - > <session-timeout> 1 </session-timeout> </session-config>
JSPページにアクセスすると、httpsessionオブジェクトが作成されます。この時点で、httpsessionListenerのhttpsessionオブジェクトの作成プロセスを観察できます。 JSPページを作成して、httpsessionオブジェクトの作成プロセスを観察できます。
次のように:index.jsp
<%@ページ言語= "java" import = "java.util。*" pageencoding = "utf-8"%> <!doctype html> <html> <head> <title> httpsessionlistenerリスナーは、httpsessionオブジェクトの作成に耳を傾けます</head> </<bodyにアクセスすると。作成されたセッションのIDは、$ {pagecontext.session.id} </body> </html>です操作結果は次のとおりです。
2.5。 ServletRequestドメインオブジェクトの作成と破壊を聞く
ServletRequestListenerインターフェイスを使用してServletRequestオブジェクトの作成と破壊を聞くと、リスナーのRequestInitialized(ServletRequestevent SRE)メソッドが呼び出されます。リクエストオブジェクトが破壊されると、リスナーのRequestDestroyed(ServletRequestEvent SRE)メソッドが呼び出されます。
ServletRequestドメインオブジェクトの作成と破壊のタイミング:
作成:ユーザーがアクセスするたびに、リクエストオブジェクトが作成され、リクエストオブジェクトが破壊されます。現在のアクセスが終了し、リクエストオブジェクトが破壊されます。
例:myServletRequestlistenerクラスを作成し、サーブレッツリクストリステナーインターフェイスを実装し、サーブレクレケストオブジェクトの作成と破壊を聞いてください
1。次のコードを使用してリスナーを書きます。
ge.gacl.web.listener; import javax.servlet.servletrequestevent; Import javax.servlet.servlet.servletrequestlistener;/*** @classname:myservletrequestlistener* @description:myservletrequestlistener creats class forefrements fortedener forefrecretlistener ServletRequestオブジェクトの破壊。 * @Author:誇りに思うウルフ* @date:2014-9-9 11:50:08 PM **/ Public Class MyServletRequestListenerは、ServletRequestListener {@Override Public void requestDestroyed(servletRequestevent sre){system.out.out.out.out !! } @Override public void requestInitialized(servletRequestevent sre){system.out.println(sre.getServletRequest() + "created !!"); }}2。web.xmlファイルにリスナーを登録します
<! - ServletRequestオブジェクトを聴くためにリスナーを登録 - > <リスナー> <説明> ServletRequestListenerリスナー</description> <リスナークラス> me.gacl.web.listener.myservletrequestlistener </ristener-class> </ristener>
テスト結果は次のとおりです。
実行結果から、ユーザーがアクセスするたびにリクエストオブジェクトを作成し、アクセスが完了した後にリクエストオブジェクトが破棄されることがわかります。
上記は、リスナーの簡単な説明です。