ServletContextListenerの例
リスナーはそこに座って、指定されたイベントが発生するのを待ってから、イベントを「ハイジャック」して独自のイベントを実行します。
Problem
Webアプリケーションを起動する前にデータベース接続プールを初期化したいのですが、Webアプリケーション環境に「main()」メソッドはありますか?
SolutionServletContextListener
は必要なものであり、Webアプリケーションが開始される前にコードを実行します。
1. ServletContextListenerの例
この例では、ServletContextListener
を実装してカスタムリスナークラスを作成する方法を示します。これは、Webアプリケーションが開始される前にコードを実行します。
1.1 Create a class and implement the ServletContextListener
interface.
MyAppServletContextListener.java
package com.example.listener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class MyAppServletContextListener implements ServletContextListener{ @Override public void contextDestroyed(ServletContextEvent arg0) { System.out.println("ServletContextListener destroyed"); } //Run this before web application is started @Override public void contextInitialized(ServletContextEvent arg0) { System.out.println("ServletContextListener started"); } }
1.2 Put it in the deployment descriptor.
web.xml
com.example.listener.MyAppServletContextListener
1.3 Starting Tomcat….
//... Dec 2, 2009 10:11:46 AM org.apache.catalina.core.StandardEngine start INFO: Starting Servlet Engine: Apache Tomcat/6.0.20 ServletContextListener started <-------------- Your code here, before we application ---> Dec 2, 2009 10:11:46 AM org.apache.coyote.http11.Http11Protocol start INFO: Starting Coyote HTTP/1.1 on http-8080 //... INFO: Server startup in 273 ms
Note
サーブレットコンテナ3.xの場合、リスナーに@WebListener
で注釈を付けることができ、web.xml
で宣言する必要はありません。