域对象中属性变更的事件监听器用来监听ServletContext、HttpSession和HttpServletRequest 这三个对象中的属性变更信息事件的监听器。这三个监听器接口分别是ServletContextAttributeListener、HttpSessionAttributeListener和ServletRequestAttributeListener,这三个接口中都定义了三个方法来处理被监听对象中属性的增加、删除和替换事件,同一个事件在这三个接口中对应的方法名称完全相同,只是接受的参数类型不同。
以HttpSessionAttributeListener为例:
创建HttpSessionAttributeListener监听器:
- 1、创建一个普通Java类,实现HttpSessionAttributeListener接口
- 2、(eclipse)直接创建一个Listener,选择实现HttpSessionAttributeListener接口
配置web.xml:
- 1、如果直接创建的Listener,则web.xml会自动配置该监听器的url路径
- 2、如果是创建的Java类然后实现的HttpSessionAttributeListener接口,则需要配置web.xml:
<listener> <listener-class>HttpSessionAttributeListener实现类的路径</listener-class> </listener>
在监听器中实现HttpSessionAttributeListener接口的3个抽象方法:
- 1、attributeAdded():向HttpSession对象中添加数据时自动执行该方法
- 2、attributeReplaced():向HttpSession对象中添加键名已经存在的数据,实质上是将原来的数据用新数据替换了,此时会自动执行该方法
- 3、attributeRemoved():删除HttpSession对象中的数据时会自动执行该方法
例:
package cn.jingpengchong.listener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
public class SessionAttributeListener implements HttpSessionAttributeListener {
public void attributeAdded(HttpSessionBindingEvent arg0) {
System.out.println("有数据被添加到Session中了");
}
public void attributeRemoved(HttpSessionBindingEvent arg0) {
System.out.println("Session中有数据被删除了");
}
public void attributeReplaced(HttpSessionBindingEvent arg0) {
System.out.println("Session中有数据被替换了");
}
}
当执行“session.setAttribute(“name”, “孙悟空”);”时,会在eclipse控制台输出“有数据被添加到Session中了”;
当执行“session.setAttribute(“name”, “猪八戒”);”时,会在eclipse控制台输出“Session中有数据被删除了”;
当执行“session.removeAttribute(“name”);”时,会在eclipse控制台输出“Session中有数据被替换了”。