Oracle® Fusion Middleware Oracle WebLogic Server Web アプリケーション、サーブレット、JSP の開発 11g リリース 1 (10.3.1) B55521-01 |
|
![]() 戻る |
![]() 次へ |
以下の節では、アプリケーション イベントとイベント リスナ クラスについて説明します。
アプリケーション イベントとは、サーブレット コンテキストのステートの変更 (各 Web アプリケーションは独自のサーブレット コンテキストを使用する)、または HTTP セッション オブジェクトのステートの変更を通知するものです。これらのステートの変更に応答するイベント リスナ クラスを作成して、Web アプリケーションでそれらをコンフィグレーションおよびデプロイします。サーブレット コンテナはイベント リスナ クラスに何らかの処理を実行させるイベントを生成します。つまり、サーブレット コンテナはイベント リスナ クラスのメソッドを呼び出します。
この処理の概要は次のとおりです。
ユーザが、いずれかのリスナ インタフェースを実装するイベント リスナ クラスを作成します。
この実装がデプロイメント記述子に登録されます。
デプロイメント時、サーブレット コンテナはイベント リスナ クラスのインスタンスを作成します (そのためにパブリック コンストラクタが存在している必要があります。「イベント リスナ クラスの作成」を参照)。
実行時、サーブレット コンテナはリスナ クラスのインスタンスを呼び出します。
サーブレット コンテキスト イベントの場合、イベント リスナ クラスは、Web アプリケーションがデプロイされるときやアンデプロイされるとき (または WebLogic Server が停止するとき)、および、属性が追加、削除、置換されるときに、通知を受け取ることができます。
HTTP セッション イベントの場合、イベント リスナ クラスは、HTTP セッションがアクティブ化されるかパッシベーションされようとしているとき、および、HTTP セッション属性が追加、削除、置換されるときに、通知を受け取ることができます。
Web アプリケーション イベント リスナ クラスは次の目的で使用します。
Web アプリケーションがデプロイされるときや停止されるときにデータベース接続を管理する
標準カウンタ ユーティリティを作成する
HTTP セッションとその属性のステートをモニタする
次の表は、サーブレット コンテキスト イベントのタイプ、イベント リスナ クラスが個々のサーブレット コンテキスト イベントに応答するために実装すべきインタフェース、およびサーブレット コンテキスト イベントが発生したときに起動されるメソッドを示しています。
表 11-1 サーブレット コンテキスト イベント
イベントのタイプ | インタフェース | メソッド |
---|---|---|
サーブレット コンテキストが作成される。 |
javax.servlet.ServletContextListener |
contextInitialized() |
サーブレット コンテキストが停止されようとしている。 |
javax.servlet.ServletContextListener |
contextDestroyed() |
属性が追加される。 |
javax.servlet. ServletContextAttributesListener |
attributeAdded() |
属性が削除される。 |
javax.servlet. ServletContextAttributesListener |
attributeRemoved() |
属性が置き換えられる。 |
javax.servlet. ServletContextAttributesListener |
attributeReplaced() |
次の表は、イベント リスナ クラスが HTTP セッション イベントに応答するために実装すべき HTTP セッション イベントのタイプ、および HTTP セッション イベントが発生したときに起動されるメソッドを示しています。
表 11-2 HTTP セッション イベント
イベントのタイプ | インタフェース | メソッド |
---|---|---|
HTTP セッションがアクティブ化される。 |
javax.servlet.http.HttpSessionListener |
sessionCreated() |
HTTP セッションがパッシベーションされようとしている。 |
javax.servlet.http.HttpSessionListener |
sessionDestroyed() |
属性が追加される。 |
javax.servlet.http.HttpSessionAttributeListener |
attributeAdded() |
属性が削除される。 |
javax.servlet.http.HttpSessionAttributeListener |
attributeRemoved() |
属性が置き換えられる。 |
javax.servlet.http.HttpSessionAttributeListener |
attributeReplaced() |
注意 : Servlet 2.5 仕様にもjavax.servlet.http.HttpSessionBindingListener インタフェースと javax.servlet.http.HttpSessionActivationListener インタフェースが含まれています。これらのインタフェースは、セッション属性として格納されるオブジェクトによって実装され、web.xml へのイベント リスナの登録を必要としません。 |
次の表は、サーブレット要求イベントのタイプ、イベント リスナ クラスがサーブレット要求のライフサイクルに渡って状態を管理するために実装する必要があるインタフェース、および要求イベントの発生時に呼び出されるメソッドについて示しています。
表 11-3 サーブレット要求イベント
イベントのタイプ | インタフェース | メソッド |
---|---|---|
要求が Web アプリケーションのスコープ外に移ろうとしている。 |
javax.servlet.ServletRequestListener |
requestDestroyed() |
要求が Web アプリケーションのスコープ内に移ろうとしている。 |
javax.servlet.ServletRequestListener |
requestInitialized() |
サーブレット要求に新しく属性が追加されたという通知。属性の追加後に呼び出される。 |
javax.servlet.ServletRequestAttributeListener |
attributeAdded() |
サーブレット要求から新しく属性が削除されたという通知。属性の削除後に呼び出される。 |
javax.servlet.ServletRequestAttributeListener |
attributeRemoved() |
サーブレット要求で属性が置き換えられたという通知。属性の置換後に呼び出される。 |
javax.servlet.ServletRequestAttributeListener |
attributeReplaced() |
イベント リスナ クラスをコンフィグレーションするには、次の手順に従います。
イベント リスナ クラスを作成する Web アプリケーションの web.xml
デプロイメント記述子をテキスト エディタで開きます。web.xml
ファイルは、Web アプリケーションの WEB-INF
ディレクトリにあります。
web.xml
デプロイメント記述子の listener
要素を使用してイベント宣言を追加します。イベント宣言は、イベントが発生するときに起動されるイベント リスナ クラスを定義します。listener
要素は、filter
要素と filter-mapping
要素のすぐ後ろで、servlet
要素のすぐ前に指定します。それぞれのイベント タイプに複数のイベント リスナ クラスを指定できます。WebLogic Server は、デプロイメント記述子に記述されている順にイベント リスナ クラスを起動します (停止イベントだけは、逆順で起動されます)。次に例を示します。
<listener> <listener-class>myApp.MyContextListenerClass</listener-class> </listener> <listener> <listener-class>myApp.MySessionAttributeListenerClass</listener-class> </listener>
イベント リスナ クラスを作成し、デプロイします。詳細については、「イベント リスナ クラスの作成」の節を参照してください。
イベント リスナ クラスを作成するには、次の手順に従います。
クラスが応答するイベントのタイプに対して適切なインタフェースを実装する新しいイベント リスナ クラスを作成します。これらのインタフェースのリストについては、「サーブレット コンテキスト イベント」または「HTTP セッション イベント」を参照してください。作業の開始に利用できるサンプルのテンプレートについては、「イベント リスナ クラスのテンプレート」を参照してください。
引数をとらないパブリック コンストラクタを作成します。次に例を示します。
public class MyListener { // public constructor public MyListener() { /* ... */ } }
インタフェースの必須メソッドを実装します。詳細については、http://java.sun.com/javaee/5/docs/api/
の Java EE API リファレンス (Javadoc) を参照してください。
コンパイル済みのイベント リスナ クラスを Web アプリケーションの WEB-INF/classes
ディレクトリにコピーするか、または、それらを JAR ファイルにパッケージ化してからその JAR ファイルを Web アプリケーションの WEB-INF/lib
ディレクトリにコピーします。
次の便利なクラスは、イベント リスナ クラスのメソッドに渡されます。
javax.servlet.http.HttpSessionEvent
- HTTP セッション オブジェクトへのアクセスを提供します。
javax.servlet.ServletContextEvent
- サーブレット コンテキスト オブジェクトへのアクセスを提供します。
javax.servlet.ServletContextAttributeEvent
- サーブレット コンテキストとその属性へのアクセスを提供します。
javax.servlet.http.HttpSessionBindingEvent
- HTTP セッションとその属性へのアクセスを提供します。
次の例は、イベント リスナ クラスの基本的なテンプレートです。
package myApp; import javax.servlet.http.*; public final class MyContextListenerClass implements ServletContextListener { public void contextInitialized(ServletContextEvent event) { /* このメソッドは、サーブレット コンテキストが初期化される前 (Web アプリケーションがデプロイされるとき) に呼び出される。 この時点で、サーブレット コンテキストに関連するデータを初期化できる */ } public void contextDestroyed(ServletContextEvent event) { /* このメソッドは、サーブレット コンテキスト (Web アプリケーション) が アンデプロイされるとき、または WebLogic Server が 停止するときに呼び出される */ } }
package myApp; import javax.servlet.*; public final class MySessionAttributeListenerClass implements HttpSessionAttributeListener { public void attributeAdded(HttpSessionBindingEvent sbe) { /* このメソッドは、属性がセッションに追加されるときに 呼び出される */ } public void attributeRemoved(HttpSessionBindingEvent sbe) { /* このメソッドは、属性がセッションから削除されるときに 呼び出される */ } public void attributeReplaced(HttpSessionBindingEvent sbe) { /* このメソッドは、属性がセッションで置き換えられるときに 呼び出される */ } }
Sun Microsystems の Servlet 2.5 仕様 (http://java.sun.com/products/servlet/index.jsp
)
Java EE 5 API リファレンス (Javadoc) (http://java.sun.com/javaee/5/docs/api/
)
Sun Microsystems の『The Java EE 5 Tutorial』(http://java.sun.com/javaee/5/docs/tutorial/doc/
)