ServletContentListener
publicvoid contextDestroyed(ServletContextEvent arg0) {
System.out.println("-------app-------stroyed------");
}
publicvoid contextInitialized(ServletContextEvent arg0) {
System.out.println("app=-----starting---");
ServletContext context=arg0.getServletContext();
context.setAttribute("name1", "wugang1");
context.setAttribute("name2", "wugang2");
context.setAttribute("name3", "wugang3");
context.setAttribute("name4", "wugang4");
}
//应用程序初始化调用。
接口ServletContextAttributeListener
里面的三个方法:
public voidattributeAdded(ServletContextAttributeEvent scab) {//session添加时触发
publicvoid attributeRemoved(ServletContextAttributeEvent scab) {//session移除是触发
public voidattributeReplaced(ServletContextAttributeEvent scab) {//session键值时触发
只有是session发生的以上的改变,将被监听。。。。。做出相应的操作
2、HttpSessionBindingListener
HttpSessionBindingListener虽然叫做监听器,但使用方法与HttpSessionListener完全不同。我们实际看一下它是如何使用的。
新建类OnlineUserBindingListener,实现HttpSessionBindingListener接口,构造方法传入 username参数,HttpSessionBindingListener内有两个方法 valueBound(HttpSessionBindingEvent event)和valueUnbound(HttpSessionBindingEventevent),前者为数据绑定,后者为取消绑定
所谓对session进行数据绑定,就是调用session.setAttribute()把HttpSessionBindingListener保存进session中
这就是HttpSessionBindingListener和HttpSessionListener之间的最大区别:HttpSessionListener只需要设置到web.xml中就可以监听整个应用中的所有session。 HttpSessionBindingListener必须实例化后放入某一个session中,才可以进行监听。
从监听范围上比较,HttpSessionListener设置一次就可以监听所有session,HttpSessionBindingListener通常都是一对一的。
正是这种区别成就了HttpSessionBindingListener的优势,我们可以让每个listener对应一个username,这样 就不需要每次再去session中读取username,进一步可以将所有操作在线列表的代码都移入listener,更容易维护。
HttpSessionBindingListener代码如下:
User user3 = new User();
user3.setPassword(password);
user3.setUsername(username);
session.setAttribute("u3", user3);
public class User implements HttpSessionBindingListener{//监听器
publicvoid valueBound(HttpSessionBindingEvent event) {//数据绑定
System.out.println("当前对象" + this + "被加入到session中");
}
publicvoid valueUnbound(HttpSessionBindingEvent event) {//取消绑定
System.out.println("当前对象" + this + "被从session中移除");
}