アプリケーション・ライフサイクルのリスナーとイベント
アプリケーション・ライフサイクルのリスナーとイベント (現在はサーブレット API の一部) を使用すると、 サーブレットのコンテキストやセッションに変更があった場合に、 関係のあるリスナーに通知できます。 例えば、属性に変更があった場合や、セッションまたはサーブレット・コンテキストが作成または破棄された場合に、 ユーザーに通知できます。
ライフサイクル・リスナーにより、アプリケーション開発者は、 ServletContext および HttpSession オブジェクトとの対話に対してより強力な制御が得られます。 サーブレット・コンテキスト・リスナーは、リソースをアプリケーション・レベルで管理します。 セッション・リスナーは、1 つのクライアントからの一連のリクエストに関連付けられたリソースを管理します。 リスナーは、ライフサイクル・イベントおよび属性変更イベントで利用可能です。 リスナー開発者は、必要なリスナー機能に応じて、 javax リスナー・インターフェースを実装するクラスを作成します。
アプリケーションの起動時に、コンテナーは、イントロスペクションを使用して、 リスナー・クラスのインスタンスを作成し、それを該当のイベント・ジェネレーターに登録します。
サーブレット・コンテキストが作成されるとき、このコンテキストがアプリケーションに適している場合は、 リスナー・クラスの contextInitialized メソッドが呼び出され、 このメソッドにより、使用するアプリケーションのサーブレットのためにデータベース接続が作成されます。 すべてのサーブレット・コンテキスト・リスナーは、Web アプリケーションのすべてのサーブレットが初期化される前に、コンテキストの初期化について通知されます。
サーブレット・コンテキストが破棄されるとき、 このコンテキストがアプリケーションに適している場合は、 contextDestroyed メソッドが呼び出され、このメソッドがデータベース接続を解放します。 すべてのサーブレットは、 サーブレット・コンテキスト・リスナーがコンテキスト消滅を通知される前に破棄される必要があります。
セッション・リスナーへの通知は、コンテキスト・リスナーへの通知より前に行われます。
サーブレット・コンテキストおよびセッション変更用のリスナー・クラス
- void contextInitialized(ServletContextEvent)
Web アプリケーションがいつでも要求を処理できるという通知。このメソッド内にコードを配置して、作成されたコンテキストが Web アプリケーション用であるかどうかを確認します。Web アプリケーション用である場合は、データベース接続を割り振り、サーブレット・コンテキスト内に接続を保管します。
- void contextDestroyed(ServletContextEvent)
サーブレット・コンテキストがシャットダウンしようとしているという通知。 このメソッド内にコードを配置して、作成されたコンテキストが Web アプリケーション用であるかどうかを確認します。Web アプリケーション用である場合は、サーブレット・コンテキスト内に保管されているデータベース接続をクローズします。
- public void requestInitialized(ServletRequestEvent re)
- 要求が有効範囲に入ろうとしているという通知
要求は、要求を処理するフィルター・チ ェーンの最初のフィルターに入ろうとする際に、 有効範囲に入ろうとしているとして定義されます。
- 要求が有効範囲に入ろうとしているという通知
- public void requestDestroyed(ServletRequestEvent re)
- 要求が有効範囲から出ようとしているという通知
要求は、フィルター・チェーンの最後のフィルターを出ようとする際に、 有効範囲から出ようとしているとして定義されます。
- 要求が有効範囲から出ようとしているという通知
以下のリスナー・インターフェースは、 javax.servlet パッケージの一部として定義されます。
- ServletContextListener
- ServletContextAttributeListener
以下のフィルター・インターフェースは、 javax.servlet パッケージの一部として定義されます。
- FilterChain インターフェース - メソッド: doFilter()
以下のイベント・クラスは、javax.servlet パッケージの一部として定義されます。
- ServletContextEvent
- ServletContextAttributeEvent
以下のインターフェースは、javax.servlet.http パッケージの一部として定義されます。
- HttpSessionListener
- HttpSessionAttributeListener
- HttpSessionActivationListener
以下のイベント・クラスは、javax.servlet.http パッケージの一部として定義されます。
- HttpSessionEvent
例: com.ibm.websphere.DBConnectionListener.java を使用したサーブレット・コンテキスト・リスナーの作成
次の例は、サーブレット・コンテキスト・リスナーの作成方法を示したものです。
package com.ibm.websphere; import java.io.*; import javax.servlet.*; public class DBConnectionListener implements ServletContextListener { // implement the required context init method void contextInitialized(ServletContextEvent sce) { } // implement the required context destroy method void contextDestroyed(ServletContextEvent sce) { } }