Listener可以用来监听不同的web事件。使用Listener,首先要有Listener实现类,然后要在web.xml中配置Listener(或者通过注解)。常用的Web事件监听器接口如下:
- ServletContextListener:监听web应用的启动和关闭
- ServletContextListener:监听ServletContext范围(application)内容属性的改变
- ServletRequestListener:监听用户请求
- ServletRequestAttributeListener:监听ServletRequest范围内的属性变化
- HttpSessionListener:用于监听session的开始和结束
- HttpsessionAttributeListener:监听session内属性的改变
ServletContextListener接口中的方法,contestInitialized()跟contextDestroyed()方法分别在应用启动、关闭的时候被触发。
配置Listener
配置Listener十分简单,只需要简单滴指定Listener实现类就行,不能配置初始化参数。只需在xml中用listener子元素的listener-class配置listener的实现类即可。如果配置了一个实现了ServletContextListener的监听类,那么当web应用被启动的时候,该listener的contextInitialized方法会被触发。
使用ServletContextAttributeListener
这个接口可以用于监听application范围内的属性的变化。实现该接口需要实现如下三个方法:
attributeAdded(ServletContextAttributeEvent event):存入属性触发
attributeRemoved(ServletContentAttributeEvent event):删除属性触发
attributeReplaced(ServletContentAttributeEvent event):替换属性触发
使用ServletRequestListener和ServletRequestAttributeListener
ServletRequestListener用于监听用户请求到达。实现该接口需要requestinitialized(servletRequestEvent sre)和requestDestroyed(ServletRequestEvent sre)这两个接口。第一个会在用户请求到达、被初始化时触发,第二个会在用户请求结束、被销毁的时候触发。
ServletRequestAttributeListener用于监听request范围内的变化,需要实现attributeAdded()、attributeRemoved()、attributeReplaced()三个方法
一个监听类如果实现了多个接口,就能即监听application范围变化,又能监听request范围变化。
HttpSessionListener和HttpSessionAttributeListener
HttpSessionListener用于监听session的创建跟销毁,需要实现sessionCreated(HttpSessionEvent se):方法和sessionDestroyed(HttpSessionEvent se)。
类似地,HttpSessionAttributeListener则用于监听HttpSesson范围的变化,需要实现attributeAdded、attributeRemoved、attributeReplaced三个方法。实现HttpSessonListener接口的监听器可以监听每个用户回话的开始和断开,因此可以利用该接口来监听系统用户的在线用户。此外通过分析request可以更详细地得到用户在线的各种信息