1.工程说明
在前一阶段介绍了监听器监听我们这三个对象创建和销毁的监听事件,现在我们要监听这三个对象存放属性的时候的一个监听事件。
存放数据指的是这三个对象在工程中setAttribute(),removeAttribute()的时候,我们的监听器就会知道,然后在对应的方法中执行相应的操作。
以下是定义这三个对象需要实现的接口:
监听器的接口----监听对象
ServletContextAttributeListener----ServletContext对象中的属性的变化情况
HttpSessionAttributeListener----session对象中的属性的变化情况
ServletRequestAttributeListener----request对象中的属性的变化情况
实现以上监听器需要重写的方法都一样:添加 、删除 、 修改的方法名称全部一致
当我们在代码中添加,删除,修改属性的时候,监听器都会收到信息,然后执行相应的代码。
这三个对象需要实现的方法都一样,行为也差不多,所以在此演示session对象添加,删除,替换属性时,我们监听器所做的操作。
基本步骤:
1.定义一个实现HttpSessionAttributeListener的监听器
2.采用注解的方式注册监听器
3.在实现的三个方法内向控制台打印相应的信息
4.在jsp中写一段代码:在session对象中添加,修改,替换属性
2.定义监听器MyHttpSessionAttributeListener
package listener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
/*
* 2018.5.15
* @author Dragon
* 监听session属性变化的监听器
*/
@WebListener
public class MyHttpSessionAttributeListener implements HttpSessionAttributeListener {
@Override
public void attributeAdded(HttpSessionBindingEvent arg0) {
System.err.println("MyHttpSessionAttributeListener----------attributeAdded");
}
@Override
public void attributeRemoved(HttpSessionBindingEvent arg0) {
System.err.println("MyHttpSessionAttributeListener----------attributeRemoved");
}
@Override
public void attributeReplaced(HttpSessionBindingEvent arg0) {
System.err.println("MyHttpSessionAttributeListener----------attributeReplaced");
}
}
在上面的代码中,我们在相应的方法中打印了相应的信息。同时采用注解的方式对我们的监听器进行了注册。
3.给session对象存放数据
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%
//添加数据
session.setAttribute("test", "Dragon");
//替换数据
session.setAttribute("test", "long");
//删除数据
session.removeAttribute("test");
%>
4.部署工程并运行
运行结果:
MyHttpSessionAttributeListener----------attributeAdded
MyHttpSessionAttributeListener----------attributeReplaced
MyHttpSessionAttributeListener----------attributeRemoved
ok了,从上面可以发现当我们session对属性执行相应的操作的时候,监听器会知道并向控制台打印相应的信息。同理,监听这两个对象request,ServletContext需要执行的操作也一样,不一样的是实现的接口不一样。
5.下一阶段的学习
到目前为止,学习了两类监听器,分别是监听对象创建和销毁的监听器和监听对象存放数据的监听器,接下来要学习的是:监听session中保存的javabean状态的监听器。
加油~继续前行!