7. リスナー
サーブレットでも様々なリスナーが提供されています。この章では、まずServletContextに関するリスナーの説明をします。次の章でセッションに関するリスナーの説明をします。
7.1. Webアプリケーションの起動/シャットダウンを検知する
「javax.servlet.ServletContextListener」はWebアプリケーションの起動/シャットダウンを検知するリスナーです。TomcatによってWebアプリケーションが起動/シャットダウンされた時にリスナーが呼ばれるので、Webアプリケーションの初期化や終了処理に利用する事ができます。ServletContextListenerで定義されているメソッドは以下の2つです。
// Webアプリケーションの起動時に呼ばれるメソッド void contextInitialized(javax.servlet.ServletContextEvent event) // Webアプリケーションのシャットダウン時に呼ばれるメソッド void contextDestroyed(javax.servlet.ServletContextEvent event)
contextInitializedはWebアプリケーションの起動時、contextDestroyedはシャットダウン時に呼ばれるメソッドです。ServletContextEventは起動/シャットダウンしたWebアプリケーションの情報を格納するイベントオブジェクトで、「getServletContext」メソッドによってServletContextを取得することができます。以下はServletContextListenerを利用して、Webアプリケーションの初期化処理を行うリスナーの例です。
import javax.servlet.ServletContextListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContext;
public class InitializationListener implements ServletContextListener{
public void contextInitialized(ServletContextEvent event){
ServletContext context=event.getServletContext();
String app_message=... // DBからデータを読み込む
context.setAttribute("app_message", app_message); // 登録処理
}
public void contextDestoryed(ServletContextEvent event){
ServletContext context=event.getServletContext();
context.removeAttribute("app_message"); // 削除処理
}
}
最後にリスナーの設定について説明します。ServletContextListenerを有効にするためには、web.xmlへの設定が必要です。
<web-app>
...
</filter-mapping>
<listener>
<listener-class>InitializationListener</listener-class>
</listener>
<servlet>
...
</web-app>
リスナーの設定は<listener>タグで行います。<listener>タグは<filter-mapping>の後、<servlet>の前に設定します。<listener>タグの子要素は<listener-class>のみで、<listener-class>にはリスナークラスの完全修飾名を指定します。<listener>タグはリスナーの数だけ設定します。
<listener>タグは<filter>や<servlet>と異なり、初期値を設定するためのタグを子要素に持ちません。もし何らかの初期値を読み込むようにしたい場合は、<context-param>に設定し、ServletContextで読み込むようにして下さい。
(実習課題1)
以下のWebアプリケーションを作成しなさい。
- DBに保存されているリンク集(タイトル・URL)を表示する。
- リンク集はアプリケーションの起動時に、DBから読み込み、ServletContextに登録すること。

