Mit Event-Listenern erhält der Java EE Entwickler den Zugriff auf sämtliche wichtigen Ereignisse der Servlet-Technolgie. Hierzu gehören die Ereignisse des Lebensszyklus' der Objekte ServletContext, HttpSession sowie ServletRequest. Diese Objekte stehen stellvertretend für den Applikationskontext, die Session eines Benutzers sowie für jeden Request, der am Server für diese Applikation eintrifft.

Jedes dieser Objekte wird zu einem bestimmten Zeitpunkt erzeugt und zu einem anderen wieder verworfen. Es gibt also zwei Lebenszyklus-Ereignisse für jedes dieser Objekttypen. Folgende Tabelle verdeutlicht alle grundlegenden Ereignisse des  Lebenszyklus' der drei Objekte:

Ereignis ServletContext HttpSession ServletRequest
Erzeugen contextInitalized sessionCreated requestInitialized
Verwerfen contextDestroyed sessionDestroyed requestDesdroyed
       
übergebener Parameter ServletContextEvent HttpSessionEvent ServletRequestEvent
       

zu
implementierende
Schnittstelle

ServletContextListener HttpSessionListener ServletRequestListener

Die für den jeweiligen Typ des Event-Listeners vorgesehene Schnittstelle sieht genau die Methoden mit den für diesen Listener vorgesehenen Event-Parametern vor. Schließlich muss der Listener über die Details des Ereignisses informiert werden. Die Schnittstelle  ServletContextListener sieht beispielsweise die Methoden contextInitialized und contextDestroyed mit jeweils einem ServletContextEvent als Parameter vor.

Wenn also auf den Start oder das Beenden der Applikation reagiert werden muss, etwa zur Initialisierung von Objekten oder zur Freigabe von Ressourcen, so ist ein ServletContextListener zu implementieren. Denn der ServletContext ist das zentrale Objekt, dass der Servlet-Container der Applikation zur Verfügung stellt.

Ein typischer ServletContext-Listener würde also wie folgt implementiert werden:

@WebListener
public class MeinContextListener implements ServletContextListener {

	@Override
	public void contextInitialized(ServletContextEvent sce) {
		ServletContext context = sce.getServletContext();
		//. . . 
	}
@Override public void contextDestroyed(ServletContextEvent sce) { //. . . } }

Damit der Servlet-Container weiß, dass es sich um einen Listener handelt, der über bestimmte Ereignisse informiert werden muss, wird der Kode mit der Annotation @WebListener gekennzeichnet. Welche Ereignisse an den Listener gemeldet werden müssen, weiß der Servlet-Container anhand der Schnittstelle(n), welche die Klasse des Listeners implementiert.

Es ist an diesem Beispiel auch zu sehen, dass die notwendigen Informationen über das Ereignis aus dem Event-Objekt gelesen werden können, welches mit der eintreffenden Nachricht übergeben wurde. In diesem Fall ist es der ServletContextEvent, der mit der Nachricht contextInitialized übergeben wird. Der Listener kann auf den ServletContext über diesen Event zugreifen.

Ebenso sind für den Lebenszyklus der Attribut-Objekte Ereignisse vorgesehen:

Ereignis ServletContextAttribute HttpSessionAttribute ServletRequestAttribute
Erzeugen attributeAdded attributeAdded attributeAdded
Verändern attributeReplaced attributeReplaced attributeReplaced
Löschen attributeRemoved attributeRemoved attributeRemoved
       
übergebener
Parameter
ServletContextAttributeEvent HttpSessionAttributeEvent ServletRequestEvent
       

zu
implementierende
Schnittstelle

ServletContextAttributeListener HttpSessionAttributeListener ServletRequestAttributeListener

Weitere Informationen können im Java EE Tutorial oder in der Javadoc der Firma Oracle (beide in englischer Sprache) gefunden werden.