Lebenszyklus-Listener und -ereignisse einer Anwendung
Mit Lebenszykluslistenern und -ereignissen für Anwendungen, die jetzt in der Servlet-API definiert sind, können Sie interessierte Listener darüber informieren, wenn sich Servlet-Kontexte und Sitzungen ändern. Es können z. B. Benutzer benachrichtigt werden, wenn Attribute sich ändern oder Sitzungen und Servlet-Kontexte erstellt oder zerstört werden.
Die Lebenszykluslistener geben dem Anwendungsentwickler bessere Steuerungsmöglichkeiten für Interaktionen mit ServletContext- und HttpSession-Objekten. Servlet-Kontext-Listener verwalten Ressourcen auf Anwendungsebene. Sitzungslistener verwalten Ressourcen, die einer Serie von Anforderungen von einem einzelnen Client zugeordnet sind. Listener sind für Lebenszyklusereignisse und für Attributänderungsereignisse verfügbar. Der Entwickler des Listeners erstellt eine Klasse, die die javax-Listener-Schnittstelle implementiert, die der gewünschten Listener-Funktionalität entspricht.
Beim Anwendungsstart erstellt der Container durch Introspektion eine Instanz Ihrer Listener-Klasse und registriert sie beim entsprechenden Event-Generator.
Beim Erstellen eines Servlet-Kontextes wird die Methode contextInitialized der Listener-Klasse aufgerufen, falls dieser Kontext für Ihre Anwendung bestimmt ist. Diese Methode stellt die Datenbankverbindungen für die zu verwendenden Servlets aus der Anwendung her. Alle Servlet-Kontext-Listener werden über die Kontextinitialisierung informiert, bevor ein Servlet in der Webanwendung initialisiert wird.
Wenn der Servlet-Kontext gelöscht wird, wird die Methode contextDestroyed aufgerufen, falls der Kontext für die Anwendung bestimmt ist. Diese Methode gibt die Datenbankverbindung frei. Sie müssen alle Servlets löschen, bevor die Servlet-Kontext-Listener über den gelöschten Kontext informiert werden.
Benachrichtigungen der Sitzungslistener haben Vorrang vor Benachrichtigungen der Kontext-Listener.
Listener-Klassen für Servlet-Kontext und Sitzungsänderung
- void contextInitialized(ServletContextEvent)
Benachrichtigung, dass die Webanwendung bereit ist, Anforderungen zu verarbeiten. Setzen Sie Code in diese Methode, um zu prüfen, ob der erstellte Kontext für Ihre Webanwendung vorgesehen ist. Falls ja, ordnen Sie eine Datenbankverbindung zu, und speichern Sie die Verbindung im Servlet-Kontext.
- void contextDestroyed(ServletContextEvent)
Benachrichtigung, dass der Servlet-Kontext heruntergefahren wird. Setzen Sie Code in diese Methode, um zu prüfen, ob der erstellte Kontext für Ihre Webanwendung vorgesehen ist. Falls ja, schließen Sie die im Servlet-Kontext gespeicherte Datenbankverbindung.
- public void requestInitialized(ServletRequestEvent re)
- Benachrichtigung, dass die Anforderung in den Geltungsbereich eintritt.
Eine Anforderung tritt in den Geltungsbereich ein, wenn der erste Filter in der Filterkette damit beginnt, die Anforderung zu verarbeiten.
- Benachrichtigung, dass die Anforderung in den Geltungsbereich eintritt.
- public void requestDestroyed(ServletRequestEvent re)
- Benachrichtigung, dass die Anforderung den Geltungsbereich verlässt.
Eine Anforderung verlässt den Geltungsbereich, wenn sie den letzten Filter in der Filterkette verlässt.
- Benachrichtigung, dass die Anforderung den Geltungsbereich verlässt.
Die folgenden Listener-Schnittstellen sind im Paket "javax.servlet" definiert:
- ServletContextListener
- ServletContextAttributeListener
Die folgende Filterschnittstelle ist im Paket "javax.servlet" definiert:
- Schnittstelle "FilterChain" - Methoden: doFilter()
Die folgenden Ereignisklassen sind im Paket "javax.servlet" definiert:
- ServletContextEvent
- ServletContextAttributeEvent
Die folgenden Schnittstellen sind als Teil des Pakets "javax.servlet" definiert:
- HttpSessionListener
- HttpSessionAttributeListener
- HttpSessionActivationListener
Eine folgenden Ereignisklassen sind im Paket javax.servlet.http definiert:
- HttpSessionEvent
Beispiel: Mit com.ibm.websphere.DBConnectionListener.java einen Listener für Servlet-Kontexte erstellen
Das folgende Beispiel veranschaulicht die Erstellung eines Listener für Servlet-Kontexte:
package com.ibm.websphere; import java.io.*; import javax.servlet.*; public class DBConnectionListener implements ServletContextListener { // implement the required context init method void contextInitialized(ServletContextEvent sce) { } // Erforderliche Löschmethode für Kontext implementieren void contextDestroyed(ServletContextEvent sce) { } }