监听器的作用:
增加WEB的事件处理机制,更好的监视和控制web应用状态的变化
每当web应用中某些某些状态发生变化时,Servlet容器将产生相应的事件,此时我们实现的监听器会接收和处理这些事件.
Servlet2.4规范中定义了8个监听器接口和6个事件
监听器和监听事件的对应关系:
1.ServletContextListener --- ServletContextEvent//应用程序加载并初始化或应用程序卸载关闭
2.ServletContextAttributeListener --- ServletContextAttributeEvent //application应用范围内有对象add(加入)或 replace(取代) 或remove(移除)
3.HttpSessionListener || HttpSessionActivationListener --- HttpSessionEvent //Http会话的创建和销毁||会话的有效(active)和无效(passivate)状态
4.HttpsessionAttributeListener || HttpSessionBindingListener --- HttpSessionBindingEvent //会话属性的设置[session会话范围内有对象add(加入)或 replace(取代) 或remove(移除)] || 监听会话中对象的绑定信息,对象加入或移除(唯一无需在web.xml中设定listener)
5.ServletRequestListener --- ServletRequestEvent //请求对象加载并初始化或销毁时
6.ServletRequestAttributeListener --- ServletRequestAttributeEvent //request请求范围内有对象add(加入)或 replace(取代) 或remove(移除)(例如校内网,通过请求事件监听拒绝远程访问,通过从request中获取的ip地址判断是否准许访问)
按监听的事件可把监听器分为两种:
1)监听域对象自身的创建和销毁的事件监听器
2)监听对象中属性(attribute)的增加和删除的事件监听器
简单介绍其中三个监听器接口()
一.ServletContextListener 监听应用程序环境对象
接口中有两个方法:
public void contextInitializes(ServletContextEvent sce)//当应用程序部署时,web容器会创建一个ServletContextEvent事件对象,同时调用该方法,我们在实现类方法体中编写的事件处理代码即被执行.
public void contextDestroyed(ServletContextEvent sce)//在应用程序被卸载时会激发此方法
二.HttpSessionListener 监听用户会话对象(监听绑定到HttpSession域中的某个对象的状态)
接口中的两个方法接收一个HttpSessionEvent类型的事件对象参数
public void sessionCreated(HttpSessionEvent se)//在容器创建一个新的Session对象时激发
public void sessionDestroyed(HttpSessionEvent se)//在容器销毁一个Session对象时激发,可以通过参数获得当前被销毁的ServletRequest对象
三.ServletRequestListener 监听请求消息对象
其两个方法接收一个ServletRequestEvent类型事件对象参数
public void requestInitilized(ServletRequestEvent sre)//容器新建一个Request请求对象时激发
public void requestDestroyed(ServletRequestEvent sre)//可以通过参数获得当前被销毁的ServletRequest对象
编写特定功能的监听器只需要实现上述接口即可(可以实现其中之一,也可以全部实现,实现相应的方法完成你的目的;视开发实际情况而定)
例如:
package com.mycompany; import javax.servlet.*; import javax.servlet.http.*;
public class MyListener implements ServletContextListener,HttpSessionListener,ServletRequestListener{
......
}
如web容器是tomcat可在web.xml中注册该监听器(可以注册一个或多个实现某一接口的事件监听器)
<listener> <listener-class>com.mycompany.MyListener</listener-class> </listener>