目次へ

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に登録すること。

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp