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