Пример ServletContextListener
Слушатель что-то сидит и ждет, когда произойдет указанное событие, затем «перехватывает» событие и запускает собственное событие.
Problem
Вы хотите инициализировать пул соединений с базой данных перед запуском веб-приложения. Есть ли в среде веб-приложения метод main ()?
SolutionServletContextListener
- это то, что вы хотите, он запустит ваш код до запуска веб-приложения.
1. Пример ServletContextListener
В этом примере мы покажем вам, как создать собственный класс слушателя, реализовавServletContextListener
, который запускает ваш код до запуска веб-приложения.
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
.