ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server Webアプリケーション、サーブレット、JSPの開発
11gリリース1 (10.3.6)
B60993-04
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストヘ移動
製品
目次へ移動
目次

前
 
次
 

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://download.oracle.com/javaee/5/api/のJava EE 5 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) {

      /* This method is called prior to the servlet context being
         initialized (when the Web application is deployed). 
         You can initialize servlet context related data here.
      */ 

    }
    public void contextDestroyed(ServletContextEvent event) {

      /* This method is invoked when the Servlet Context 
         (the Web application) is undeployed or 
         WebLogic Server shuts down.
      */    

    }
}

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

package myApp;
import javax.servlet.*;

public final class MySessionAttributeListenerClass implements
   HttpSessionAttributeListener {

    public void attributeAdded(HttpSessionBindingEvent sbe) {
      /* This method is called when an attribute 
         is added to a session.
      */
    }
    public void attributeRemoved(HttpSessionBindingEvent sbe) {
      /* This method is called when an attribute
         is removed from a session.
      */
    }
    public void attributeReplaced(HttpSessionBindingEvent sbe) {
      /* This method is invoked when an attibute
         is replaced in a session.
      */
    }
}

その他の情報源