リスナーを使ってイベント情報を拾ってみる

Webアプリに何らかのイベントが発生した際にそれをプログラムに通知する機能がリスナーです。
この機能があると、イベントの発生と連動したプログラムの実行を行う事ができる!!
ServletContextオブジェクト関連のイベントが発生した際に呼び出されるのがリスナーというわけ。

ServletContextListenerインターフェース
  • サーブレットコンテキスト(Webアプリケーション)が起動するときや破棄されるときに呼び出されます。
  • そのため、Servletプログラムの初期化処理をしたい場合や、終了処理をしたい場合に使用します。
  • ServletContextListenerインタフェースには以下のメソッドが定義されています。
戻り型 method 説明
void contextInitialized(ServletContextEvent) サーブレットコンテキスト(Webアプリケーション)が起動するときに呼び出されるメソッド
void contextDestroyed(ServletContextEvent) サーブレットコンテキスト(Webアプリケーション)が破棄されるときに呼び出されるメソッド
  • メソッドの引数に指定されているServletContextEventクラスには以下のメソッドが定義されている。
戻り型 method 説明
ServletContext getServletContext() 対象のServletContextオブジェクトを返す。
ServletContextAttributeListenerインターフェース
  • applicationスコープを持つデータが追加・置換・削除されたときに呼び出されます。
  • 該当のデータに変更があったときにその変更をログに出力したい場合などに使用します。
  • ServletContextAttributeListenerインタフェースには以下のメソッドが定義されています。
戻り型 method 説明
void attributeAdded(ServletContextAttributeEvent) applicationスコープを持つデータが追加されたときに呼び出されるメソッド。
void attributeReplaced(ServletContextAttributeEvent) applicationスコープを持つデータが置換されたときに呼び出されるメソッド。
void attributeRemoved(ServletContextAttributeEvent) applicationスコープを持つデータが削除されたときに呼び出されるメソッド。
  • メソッドの引数に指定されているServletContextAttributeEventクラスには以下のメソッドが定義されています。
戻り型 method 説明
ServletContext getServletContext() 対象のServletContextオブジェクトを返す。
String getName() 追加、置換、削除されたデータの名前を返す。
Object getValue() 追加、置換、削除されたデータの値を返す。
web.xmlの設定は?
要素 内容 素数
description リスナーの説明 0以上
display-name GUIツールで表示されるリスナーの名前を記載 0以上
icon GUIツールで表示される画像を指定 0以上
listener-class リスナーインタフェースを実装したServletクラスを記載 1
// sample code
<!DOCTYPE web-app PUBLIC 
  "-//Sun Microsystems,Inc.//DTD Web Application 2.2//EN" 
  "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app>
  <!-- (1)リスナークラスを登録します。 -->
  <listener>
    <listener-class>checkListenerServlet</listener-class>
  </listener>
  <servlet>
    <servlet-name>addDataServlet</servlet-name>
    <servlet-class>addDataServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>addDataServlet</servlet-name>
    <url-pattern>/addDataServlet</url-pattern>
  </servlet-mapping>
</web-app>