サーブレット 7章 リスナー
7.2. ServletContextへのオブジェクトの登録/置換/削除を検知する
ServletContextへの、オブジェクトの登録/置換/削除を検知するリスナーも提供されています。「javax.servlet.ServletContextAttributeListener」です。ServletContextAttributeListenerで定義されているメソッドは以下の3つで、上から順に「ServletContextへオブジェクトが登録されたとき」「オブジェクトが置き換えられたとき」「オブジェクトが削除されたとき」に呼ばれるメソッドです。
// オブジェクトが登録されたときに呼ばれるメソッド void attributeAdded(javax.servlet.ServletContextAttributeEvent event) // オブジェクトが置き換えられたときに呼ばれるメソッド void attributeReplaced(javax.servlet.ServletContextAttributeEvent event) // オブジェクトが削除されたときに呼ばれるメソッド void attributeRemoved(javax.servlet.ServletContextAttributeEvent event)
ServletContextAttributeEventは、登録/置換/削除されたオブジェクトに関する情報を格納するイベントオブジェクトです。ServletContextAttributeEventが提供しているメソッドは以下の3つです。(注:getServletContext()はjavax.servlet.ServletContextEventから継承したメソッドです。)
// イベントが発生したServletContextを返す ServletContext getServletContext() // 登録/置換/削除されたオブジェクトが関連付けられている名前を返す String getName() // 登録/置換/削除されたオブジェクトを返す // 置換の場合は、置換された古いオブジェクトを返します Object getValue()
以下はServletContextAttributeListenerの例です。特定のオブジェクトが置き換えられたとき、ログに書き出すようにしています。
import javax.servlet.ServletContextAttributeListener; import javax.servlet.ServletContextAttributeEvent; import javax.servlet.ServletContext; public class LogWriteListener implements ServletContextAttributeListener{ public void attributeAdded(ServletContextAttributeEvent event){} public void attributeReplaced(ServletContextAttributeEvent event){ if(event.getName().equals("app_message")){ ServletContext context=event.getServletContext(); context.log("app_message:"+event.getValue()); } } public void attributeRemoved(ServletContextAttributeEvent event){} }
ServletContextAttributeListenerも動作させるには設定が必要です。その方法はServletContextListenerと同じで、web.xmlに<listener>タグで設定します。
(実習課題2)
任意のWebアプリケーションに、以下のリスナーを追加しなさい。
- ServletContextに登録/置換/削除されるオブジェクトを検知し、ログとして出力するリスナー。
- 処理が行われた時刻、オブジェクトのクラス名がログとして出力されるようにすること。