50 likes | 221 Views
Listeners. A listener is an event handler that the server invokes when certain events occur (e.g. web application initialization/shutdown, session created/timed out…)
E N D
Listeners • A listener is an event handler that the server invokes when certain events occur (e.g. web application initialization/shutdown, session created/timed out…) • In design pattern terms – observer pattern: An observer (in this case the listener) is notified when an event occurs in the subject(server). • Typical uses: • Application-wide initialization routines • Managing dependencies between data stored in context or session attributes • Monitoring the running application (e.g. number of current sessions)
Listeners – Cont. There are different kinds of listener, each corresponding to an interface and a group pf events. Some of them are: • ServletContextListener • Web application initialized / shut down • ServletRequestListener • request handler starting / finishing • HttpSessionListener • session created / invalidated • ServletContextAttributeListener • context attribute added / removed / replaced • HttpSessionAttributeListener • session attribute added / removed / replaced
Listeners – Cont. • To use a listener one simply implements the appropriate interface and registers the listener in the deployment descriptor. • As an example, the following listener monitors the current and maximum number of active sessions. • This class implements both HttpSessionListener and ServletContextListener such that it is notified when the application starts, to initialize the context attributes, and when a session is created or invalidated.
Example: SessionMonitor (1/2) import javax.servlet.*; import javax.servlet.http.*; public class SessionMonitor implements HttpSessionListener, ServletContextListener { private int active = 0, max = 0; public void contextInitialized(ServletContextEvent sce) { store(sce.getServletContext()); } public void contextDestroyed(ServletContextEvent sce) {} public void sessionCreated(HttpSessionEvent se) { active++; if (active>max) max = active; store(se.getSession().getServletContext()); } Next Slide (Update Context Attributes)
Example: SessionMonitor (2/2) public void sessionDestroyed(HttpSessionEvent se) { active--; store(se.getSession().getServletContext()); } private void store(ServletContext c) { c.setAttribute("sessions_active", new Integer(active)); c.setAttribute("sessions_max", new Integer(max)); } } Registration in web.xml: <listener> <listener-class>SessionMonitor</listener-class> <listener> Context Attributes Now that we have the class, what must we do?