Java ServletContextListener

Ya hemos hablado del concepto de ServletContext en un articulo anterior .Vamos a complementar aquel articulo centrandonos en otro concepto importante de JEE a nivel web los listeners y en concreto en este caso el ServletContextListener . Estos listener estan diseñados para escuchar los diferentes eventos que se producen en el ciclo de vida de la aplicacion web. Los listener mas importantes son los siguientes .

ServletContextListener: Listener que se encarga de gestionar los eventos generales de la aplicación como son arranque y parada.

HttpSessionListener :Listener que se encarga de gestionar los propios eventos de la sessión como creación ,invalidación y destrucción de sessiones.

ServletRequestListener : Listener que se encarga de los eventos de creación y destruccion de peticiones.

Usando ServletContextListener

En nuestro caso vamos ha hacer un ejemplo elemental de ServletContextListener de tal forma que nos avise por consola cuando la aplicación se arranca y se para.

package com.arquitecturajava;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class MiListener implements ServletContextListener {
 @Override
 public void contextInitialized(ServletContextEvent sce) {
 System.out.print("aplicacion web arrancada");
 }

 @Override
 public void contextDestroyed(ServletContextEvent sce) {
 System.out.print("aplicacion web parada");
 }
 }

Este listener registra dos eventos fundamentales contextInitialized que se ejecuta al arrancar la aplicación y contextDestroyed que se ejecuta cuando la aplicación finaliza.

Podemos usar estos eventos para cargar datos en memoria cuando arranca la aplicación enviarnos un correo informándonos de inicio o parada ,o para otras muchas necesidades que se nos ocurran.

ServletContextListener y @WebListener

Hemos hecho uso de la anotación WebListener de Servlet 3.0 por simplicidad .Sin embargo podríamos haber registrado el listener a nivel de web.xml que es algo mas clásico y que permite un control mas exhaustivo . Ya que podriamos declarar varios y definir el orden entre ellos en el fichero.

</pre>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
 <display-name>ServletContextListener</display-name>
<listener>
<listener-class>com.arquitecturajava.MiListener</listener-class>
</listener>
</web-app>
<pre>

Related Post