Escuchas y sucesos del ciclo de vida de las aplicaciones
Con las escuchas y sucesos del ciclo de vida de las aplicaciones, que ahora forman parte de la API de servlets, puede notificar a las escuchas interesadas cuando se modifican los contextos de servlets y sesiones. Por ejemplo, puede notificar a los usuarios cuando cambien los atributos, y si se crean o destruyen contextos de servlets o sesiones.
Las escuchas de ciclo de vida ofrecen a los desarrolladores de aplicaciones un mayor control sobre las interacciones con los objetos ServletContext y HttpSession. Las escuchas de contexto de servlets gestionan los recursos en el nivel de aplicación. Las escuchas de sesión gestionan los recursos que están asociados a una serie de solicitudes de un solo cliente. Las escuchas están disponibles para sucesos de ciclo de vida y para sucesos de modificación de atributos. El desarrollador de escuchas crea una clase que implementa la interfaz de escucha javax, correspondiente a la función deseada para la escucha.
En el momento del inicio de la aplicación, el contenedor utiliza la introspección para crear una instancia de la clase de escucha y la registra con el generador de sucesos adecuado.
Cuando se crea un servlet de contexto, se invoca al método contextInitialized de la clase de escucha que crea la conexión de base de datos para utilizar los servlets en la aplicación, si este contexto es para la aplicación. La inicialización del contexto se notifica a todas las escuchas de contexto de servlets antes de inicializar ningún servlet en la aplicación web.
Cuando se destruye el contexto de servlet, se invoca al método contextDestroyed, que libera la conexión de base de datos, si este contexto es para la aplicación. Debe destruir todos los servlets antes de notificar de la destrucción del contexto a ninguna escucha de contexto de servlets.
Las notificaciones a los escuchas de sesión precederán a las notificaciones a los escuchas de contexto.
Clases de escucha para el contexto del servlet y los cambios de sesión
- void contextInitialized(ServletContextEvent)
Notificación de que la aplicación está preparada para procesar solicitudes. Incluya código en este método para comprobar si el contexto creado es para la aplicación web y si es así, asigne una conexión de base de datos y almacene la conexión de contexto de servlet.
- void contextDestroyed(ServletContextEvent)
Notificación de que el contexto de servlet se va a cerrar. Incluya código en este método para comprobar si el contexto creado es para la aplicación web y si es así, cierre la conexión de base de datos almacenada en el contexto de servlet.
- public void requestInitialized(ServletRequestEvent re)
- Notificación de que la solicitud está a punto de entrar en el ámbito.
Se define como una solicitud que está a punto de entrar en el ámbito, cuando está a punto de entrar el primer filtro de la cadena de filtro que procesa la solicitud.
- Notificación de que la solicitud está a punto de entrar en el ámbito.
- public void requestDestroyed(ServletRequestEvent re)
- Notificación de que la solicitud está a punto de salir del ámbito.
Se define como una solicitud que está a punto de salir del ámbito, cuando sale el último filtro de su cadena de filtro.
- Notificación de que la solicitud está a punto de salir del ámbito.
Como parte del paquete javax.servlet se definen las interfaces de escucha siguientes:
- ServletContextListener
- ServletContextAttributeListener
Como parte del paquete javax.servlet.http se define la interfaz de filtros siguiente:
- Interfaz FilterChain - métodos: doFilter()
Como parte del paquete javax.servlet se definen las clases de sucesos siguientes:
- ServletContextEvent
- ServletContextAttributeEvent
Como parte del paquete javax.servlet.http se definen las interfaces siguientes:
- HttpSessionListener
- HttpSessionAttributeListener
- HttpSessionActivationListener
Como parte del paquete javax.servlet.http se define la clase de suceso siguiente:
- HttpSessionEvent
Ejemplo: Creación de un escucha de contexto de servlet con com.ibm.websphere.DBConnectionListener.java
En el siguiente ejemplo se muestra cómo crear una escucha de contexto de servlet:
package com.ibm.websphere; import java.io.*; import javax.servlet.*; public class DBConnectionListener implements ServletContextListener { // implementar el método context init requerido void contextInitialized(ServletContextEvent sce) { } // implementar el método context destroy requerido void contextDestroyed(ServletContextEvent sce) { } }