ServletContextListener Beispiel
Der Listener sitzt etwas da und wartet, bis ein bestimmtes Ereignis eingetreten ist, dann "entführt" er das Ereignis und führt sein eigenes Ereignis aus.
Problem
Sie möchten einen Datenbankverbindungspool initialisieren, bevor die Webanwendung gestartet wird. Gibt es eine "main ()" - Methode in der Webanwendungsumgebung?
SolutionServletContextListener
ist das, was Sie wollen. Es wird Ihren Code ausführen, bevor die Webanwendung gestartet wird.
1. ServletContextListener Beispiel
In diesem Beispiel zeigen wir Ihnen, wie Sie eine benutzerdefinierte Listener-Klasse erstellen, indem SieServletContextListener
implementieren, die Ihren Code ausführen, bevor die Webanwendung gestartet wird.
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
Für den Servlet-Container 3.x können Sie den Listener mit@WebListener
versehen, ohne dassweb.xml
deklariert werden müssen.