ServletContextListenerの例

ServletContextListenerの例

リスナーはそこに座って、指定されたイベントが発生するのを待ってから、イベントを「ハイジャック」して独自のイベントを実行します。

Problem
Webアプリケーションを起動する前にデータベース接続プールを初期化したいのですが、Webアプリケーション環境に「main()」メソッドはありますか?

Solution
ServletContextListenerは必要なものであり、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で宣言する必要はありません。