ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server Web アプリケーション、サーブレット、JSP の開発
11g リリース 1 (10.3.1)
B55521-01
  目次
目次

戻る
戻る
 
次へ
次へ
 

11 アプリケーション イベントとイベント リスナ クラス

以下の節では、アプリケーション イベントとイベント リスナ クラスについて説明します。

アプリケーション イベント リスナ クラスの概要

アプリケーション イベントとは、サーブレット コンテキストのステートの変更 (各 Web アプリケーションは独自のサーブレット コンテキストを使用する)、または HTTP セッション オブジェクトのステートの変更を通知するものです。これらのステートの変更に応答するイベント リスナ クラスを作成して、Web アプリケーションでそれらをコンフィグレーションおよびデプロイします。サーブレット コンテナはイベント リスナ クラスに何らかの処理を実行させるイベントを生成します。つまり、サーブレット コンテナはイベント リスナ クラスのメソッドを呼び出します。

この処理の概要は次のとおりです。

  1. ユーザが、いずれかのリスナ インタフェースを実装するイベント リスナ クラスを作成します。

  2. この実装がデプロイメント記述子に登録されます。

  3. デプロイメント時、サーブレット コンテナはイベント リスナ クラスのインスタンスを作成します (そのためにパブリック コンストラクタが存在している必要があります。「イベント リスナ クラスの作成」を参照)。

  4. 実行時、サーブレット コンテナはリスナ クラスのインスタンスを呼び出します。

サーブレット コンテキスト イベントの場合、イベント リスナ クラスは、Web アプリケーションがデプロイされるときやアンデプロイされるとき (または WebLogic Server が停止するとき)、および、属性が追加、削除、置換されるときに、通知を受け取ることができます。

HTTP セッション イベントの場合、イベント リスナ クラスは、HTTP セッションがアクティブ化されるかパッシベーションされようとしているとき、および、HTTP セッション属性が追加、削除、置換されるときに、通知を受け取ることができます。

Web アプリケーション イベント リスナ クラスは次の目的で使用します。

サーブレット コンテキスト イベント

次の表は、サーブレット コンテキスト イベントのタイプ、イベント リスナ クラスが個々のサーブレット コンテキスト イベントに応答するために実装すべきインタフェース、およびサーブレット コンテキスト イベントが発生したときに起動されるメソッドを示しています。

表 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 セッション イベントのタイプ、および 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()

イベント リスナ クラスのコンフィグレーション

イベント リスナ クラスをコンフィグレーションするには、次の手順に従います。

  1. イベント リスナ クラスを作成する Web アプリケーションの web.xml デプロイメント記述子をテキスト エディタで開きます。web.xml ファイルは、Web アプリケーションの WEB-INF ディレクトリにあります。

  2. 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>
    
  3. イベント リスナ クラスを作成し、デプロイします。詳細については、「イベント リスナ クラスの作成」の節を参照してください。

イベント リスナ クラスの作成

イベント リスナ クラスを作成するには、次の手順に従います。

  1. クラスが応答するイベントのタイプに対して適切なインタフェースを実装する新しいイベント リスナ クラスを作成します。これらのインタフェースのリストについては、「サーブレット コンテキスト イベント」または「HTTP セッション イベント」を参照してください。作業の開始に利用できるサンプルのテンプレートについては、「イベント リスナ クラスのテンプレート」を参照してください。

  2. 引数をとらないパブリック コンストラクタを作成します。次に例を示します。

    public class MyListener { 
    // public constructor 
    public MyListener() { /* ... */ } 
    }
    
  3. インタフェースの必須メソッドを実装します。詳細については、http://java.sun.com/javaee/5/docs/api/ の Java EE API リファレンス (Javadoc) を参照してください。

  4. コンパイル済みのイベント リスナ クラスを 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 が
         停止するときに呼び出される      */    

    }
}

HTTP セッション属性イベント リスナ クラスの例

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) {
      /* このメソッドは、属性がセッションで置き換えられるときに
         呼び出される      */
    }
}

その他の情報源