TOPサーバ構築・運用> リスナでアプリケーションイベントを捕捉する
はじめてのサーバサイドJava
はじめてのサーバサイドJava

第12回:デプロイメントディスクリプタ活用術(後編)

著者:山田 祥寛   2006/5/29
前のページ  1  2
リスナでアプリケーションイベントを捕捉する

   リスナクラスを利用することで、アプリケーションやセッション、リクエストの開始/終了を捕捉し、そのタイミングでさまざまな共通処理を実行することが可能になります。

   たとえば、アプリケーションリスナを介することで、アプリケーションの開始時に必要なリソースをメモリ(コンテキスト属性)上にロードし、アプリケーション内でのデータアクセスの負荷を軽減することができます。

   メニュー情報のような、変更頻度は少ないのにアクセス頻度が多い情報は、アプリケーション開始時にコンテキスト属性としてセットすることで、画面生成の負荷を軽減することもできます。

   また、リクエストリスナを利用すれば、リクエスト時のロギング処理を、個別のJSP&サーブレットに影響を与えることなく追加することもできるでしょう。このように、リスナ・クラスを利用することで、アプリケーション内でイベントが発生するタイミングで、さまざまなサービスを提供することができるというわけです。

JSP 2.0&サーブレット2.4で利用可能なリスナ
表3:JSP 2.0&サーブレット2.4で利用可能なリスナ
(画像をクリックすると別ウィンドウに拡大図を表示します)

   JSP 2.0&サーブレット2.4で利用可能なリスナは表3のとおりです。目的に応じて、必要なインターフェースを実装(implements)したリスナクラスを定義する必要があります。必要なメソッドをオーバライドして、イベント発生時に行うべき処理を記述してください。リスト3には、最も単純なリクエスト時にログ情報をTomcat標準のログに出力する例を示します。

リスト3:LoggingListener.java(抜粋)
public class LoggingListener implements ServletRequestListener {
   public void requestDestroyed(ServletRequestEvent event) {}
   public void requestInitialized(ServletRequestEvent event) {
      HttpServletRequest request=(HttpServletRequest)event.getServletRequest();
      ServletContext application=event.getServletContext();
      // アクセスされたURIをコンテナの標準ログに記録
      application.log(request.getRequestURI() + "にアクセスがありました。");
   }
}

リスト4:web.xml(抜粋)
<listener>
   <listener-class>to.msn.wings.marugoto.LoggingListener</listener-class>
<listener>

   なお、リスナクラスは、必ずweb.xmlに登録しておく必要があります(リスト4)。

   といっても、<listener>要素配下の<listener-class>要素にリスナクラスの完全修飾名を定義するだけです。これで、アプリケーション配下のリソースにリクエストがあるたびに、コンテナの標準ログにロギング情報が記録されるようになります(図1)。

記録されたログの内容
図1:記録されたログの内容
(画像をクリックすると別ウィンドウに拡大図を表示します)

   複数のリスナクラスを定義したい場合は、<listener>要素を複数個列記します。ただし、1つの<listener>要素配下に複数の<listener-class>要素を記述することはできませんので注意してください。

   以上駆け足でしたが、本連載では、JSP&サーブレットの主要な機能について紹介してきました。誌面の都合上、本連載ではサーブレットやJavaBeans、あるいはデプロイメントディスクリプタによるJSPコンフィギュレーションやユーザ認証などについては割愛しています。書籍では本連載では扱えなかった諸テーマについても扱っていますので、興味のある方はあわせて参照してみることをお勧めします。

前のページ  1  2


WINGSプロジェクト  山田 祥寛
著者プロフィール
有限会社WINGSプロジェクト   山田 祥寛
Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト(http://www.wings.msn.to/)」の代表。主な著書に「10日でおぼえる入門教室シリーズ(Jakarta・JSP/サーブレット・PHP・XML)」(以上、翔泳社)、「書き込み式 SQLのドリル」(ソシム)など。最近ではIT関連技術の取材、講演まで広くを手がける毎日。

INDEX
第12回:デプロイメントディスクリプタ活用術(後編)
  共通処理をフィルタで記述する
リスナでアプリケーションイベントを捕捉する