10 アプリケーション・イベントとイベント・リスナー・クラス
この章の内容は以下のとおりです。
アプリケーション・イベント・リスナー・クラスの概要
アプリケーション・イベントとは、サーブレット・コンテキストの状態の変更(各Webアプリケーションは独自のサーブレット・コンテキストを使用します)、またはHTTPセッション・オブジェクトの状態の変更を通知するものです。これらの状態の変更に応答するイベント・リスナー・クラスを作成して、Webアプリケーションでそれらを構成およびデプロイします。サーブレット・コンテナはイベント・リスナー・クラスになんらかの処理を実行させるイベントを生成します。つまり、サーブレット・コンテナはイベント・リスナー・クラスのメソッドを呼び出します。
この処理の概要は次のとおりです。
-
ユーザーが、いずれかのリスナー・インタフェースを実装するイベント・リスナー・クラスを作成します。
-
この実装がデプロイメント記述子に登録されます。
-
デプロイメント時、サーブレット・コンテナはイベント・リスナー・クラスのインスタンスを作成します。(このために、パブリック・コンストラクタが存在している必要があります。「イベント・リスナー・クラスの作成」を参照してください。)
-
実行時、サーブレット・コンテナはリスナー・クラスのインスタンスを呼び出します。
サーブレット・コンテキスト・イベントの場合、イベント・リスナー・クラスは、Webアプリケーションがデプロイされるときやアンデプロイされるとき(またはWebLogic Serverが停止するとき)、および、属性が追加、削除、置換されるときに、通知を受け取ることができます。
HTTPセッション・イベントの場合、イベント・リスナー・クラスは、HTTPセッションがアクティブ化されるかパッシブ化されようとしているとき、および、HTTPセッション属性が追加、削除、置換されるときに、通知を受け取ることができます。
Webアプリケーション・イベント・リスナー・クラスは次の目的で使用します。
-
Webアプリケーションがデプロイされるときや停止されるときにデータベース接続を管理する
-
標準カウンタ・ユーティリティを作成する
-
HTTPセッションとその属性の状態をモニターします
サーブレット・コンテキスト・イベント
サーブレット・コンテキスト・イベントのタイプ、イベント・リスナー・クラスが個々のサーブレット・コンテキスト・イベントに応答するために実装すべきインタフェース、およびサーブレット・コンテキスト・イベントが発生したときに起動されるメソッドを検証します。
表10-1 サーブレット・コンテキスト・イベント
| イベントのタイプ | インタフェース | メソッド |
|---|---|---|
|
サーブレット・コンテキストが作成されます。 |
javax.servlet.ServletContextListener |
contextInitialized() |
|
サーブレット・コンテキストが停止されようとしています。 |
javax.servlet.ServletContextListener |
contextDestroyed() |
|
属性が追加されます。 |
javax.servlet.ServletContextAttributesListener |
attributeAdded() |
|
属性が削除されます。 |
javax.servlet.ServletContextAttributesListener |
attributeRemoved() |
|
属性が置き換えられます。 |
javax.servlet.ServletContextAttributesListener |
attributeReplaced() |
HTTPセッション・イベント
HTTP Session Eventsには、イベント・タイプのリスト、インタフェースおよびメソッド contains a list of event types, interfaces and methods that are used to indicate the activation and deactivation of a HTTP session along with the addition and removal of attributes during a HTTP session.
次の表は、イベント・リスナー・クラスがHTTPセッション・イベントに応答するために実装すべきHTTPセッション・イベントのタイプ、およびHTTPセッション・イベントが発生したときに起動されるメソッドを示しています。
表10-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 4.0仕様にもjavax.servlet.http.HttpSessionBindingListenerインタフェースとjavax.servlet.http.HttpSessionActivationListenerインタフェースが含まれています。これらのインタフェースは、セッション属性として格納されるオブジェクトによって実装され、web.xmlへのイベント・リスナーの登録を必要としません。
サーブレット・リクエスト・イベント
サーブレット・リクエスト・イベントのタイプ、イベント・リスナー・クラスがサーブレット・リクエストのライフサイクルにわたって状態を管理するために実装する必要があるインタフェース、およびリクエスト・イベントの発生時に呼び出されるメソッドを検証します。
表10-3 サーブレット・リクエスト・イベント
| イベントのタイプ | インタフェース | メソッド |
|---|---|---|
|
リクエストがWebアプリケーションのスコープ外に移ろうとしています。 |
javax.servlet.ServletRequestListener |
requestDestroyed() |
|
リクエストがWebアプリケーションのスコープ内に移ろうとしています。 |
javax.servlet.ServletRequestListener |
requestInitialized() |
|
サーブレット・リクエストに新しく属性が追加されたという通知。属性の追加後に呼び出されます。 |
javax.servlet.ServletRequestAttributeListener |
attributeAdded() |
|
サーブレット・リクエストから新しく属性が削除されたという通知。属性の削除後に呼び出されます。 |
javax.servlet.ServletRequestAttributeListener |
attributeRemoved() |
|
サーブレット・リクエストで属性が置き換えられたという通知。属性の置換後に呼び出されます。 |
javax.servlet.ServletRequestAttributeListener |
attributeReplaced() |
イベント・リスナー・クラスのテンプレート
イベント・リスナー・クラスの基本的なテンプレートの例を検討します。
サーブレット・コンテキスト・イベント・リスナー・クラスの例
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.
*/
}
}
追加のリソース
-
サーブレット4.0仕様(
https://jcp.org/en/jsr/detail?id=369) -
Java EE APIリファレンス(Javadoc)(
http://docs.oracle.com/javaee/8/api/) -
『The Java EE tutorial』(
https://javaee.github.io/tutorial/toc.html)