Servlet 2.3 仕様は、Web アプリケーション用のリスナクラスについて規定しています。イベントリスナはイベントハンドラとも呼ばれ、特定のイベントの発生時に JRun が呼び出すコールバックメソッドが用意されています。イベントリスナを使用すると、Web アプリケーションのさまざまな要素を管理し、ServletContext および HttpSession オブジェクト内のステートの変化を追跡できます。
イベントの発生時にエンジンがリスナ内の適切なメソッドを排除しないように、イベントリスナをサーブレットエンジンに登録する必要があります。この作業は、Web アプリケーションの web.xml デプロイメントディスクリプタ内で行います。
ServletContext および HttpSession オブジェクトのアクティビティを監視するサーブレットイベントリスナには 2 つの基本タイプがあります。これらのタイプにはそれぞれ、リスナインターフェイスと属性リスナインターフェイスがあります。
サーブレット オブジェクト |
関連付けられているリスナインターフェイス |
---|---|
ServletContext |
ServletContextListener ServletContextAttributeListener |
HttpSession |
HttpSessionListener HttpSessionAttributeListener |
基本リスナインターフェイスには、オブジェクトの変更をリスンするメソッドが用意されています。属性リスナインターフェイスメソッドは、新規属性の追加、属性の値の変更、またはそれらのオブジェクトに関連付けられている属性の削除をリスンします。
イベントリスナは、次のような多数の一般的なタスクに使用します。
サーブレットイベントリスナの詳細については、Servlet 2.3 仕様の「Application Lifecycle Events」の章を参照してください。
イベントリスナは java.util.EventListener
インターフェイスを拡張します。イベントリスナを作成するには、リスンするインターフェイスの 1 つを実装する必要があります。各リスナには、引数なし public コンストラクタも必要です。コンストラクタを指定しないと、コンパイラは引数なし public コンストラクタを使用します。イベントリスナをコンパイルするとき、クラスパスに <JRun のルートディレクトリ>/lib/jrun.jar を指定する必要があります。
WEB-INF/classes または WEB-INF/lib ディレクトリの Web アプリケーションがリスナクラスにアクセスできるようにする必要があります。JAR または WEB-INF/classes ディレクトリ構造のサブディレクトリまたはパッケージにリスナクラスを含めることができます。
イベントリスナは、Web アプリケーションの web.xml デプロイメントディスクリプタ内で定義する必要があります。このシンタックスは次のとおりです。
<listener>
<listener-class>listener_class</listener-class> </listener>
次の例では、SessionWatcher フィルタを定義します。
<listener>
<listener-class>jrunsamples.events.SessionWatcher</listener-class> </listener>
サーブレットの定義がある場合は、その前にリスナの定義を指定する必要があります。リスナは、その前に定義されたサーブレットに対しては呼び出されません。JRun は起動時にリスナを登録し、シャットダウン時に登録を解除します。