HttpSessionBindingListener
2015-11-01 20:47
489 查看
[该文章转载至:http://blog.sina.com.cn/s/blog_4dacfb010100qxf8.html]
首先我在网上查了一下session的真正销毁条件:
1调用 session.invalidate();方法
2 session到了设置或者默认的超时时间,自动销毁(关闭浏览器此session还未销毁,只是不能再用了);
明白了上面的两条就可以去研究一下HttpSessionBindingListener这种session监听了。
新建一个类,继承HttpSessionBindingListener,实现了两个方法,分别是:
valueBound()和valueUnbound(),这个类按照通俗的理解就是对session绑定对象(setAttribute)过程的一种监听类型,它不需要配置xml文件,只是将实例化的HttpSessionBindingListener对象setAttribute到session里面就可以对HttpSessionBindingListener对象对象进行监听了,其实也就是对HttpSessionBindingListener对象所对应的session进行监听,还可以记录该session的具体信息(例如会员的登录信息)。
valueBound是在setAttribute时触发
valueUnbound则是在session销毁时触发。^-^(什么时候销毁上文有提到)
做出这样的一个例子:
新建一个继承自HttpSessionBindingListener的类UsersOnlineCountListener
[java] view plaincopyprint?
public class UsersOnlineCountListener implements HttpSessionBindingListener {
int uid;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public void valueBound(HttpSessionBindingEvent arg0) {
System.out.println(uid+"登录了"+new Date());
}
public void valueUnbound(HttpSessionBindingEvent arg0) {
System.out.println(uid+"下线了"+new Date());
}
}
会员登录成功的时候,代码中加上:
[java] view plaincopyprint?
UsersOnlineCountListener uocl = new UsersOnlineCountListener();
uocl.setUid(obj.getUid());
session.setAttribute("uocl", uocl);//这个时候要触发valueBound方法了
控制台输出:
11登录了Mon Sep 20 02:09:37 CST 2010
点击注销的时候,session销毁,触发valueUnbound
控制台输出:
11下线了Mon Sep 20 02:10:22 CST 2010
如果直接关闭浏览器,控制台不会立刻输出"11下线了Mon Sep 20 02:40:13 CST 2010"
大约30分钟后(session的自动销毁时间,可以设定)
控制台输出:
11下线了Mon Sep 20 02:40:13 CST 2010
这里总结下:valueUnbound方法将被以下任一条件触发
a. 执行session.setAttribute("uocl", 非uocl对象) 时。
b. 执行session.removeAttribute("uocl") 时。
c. 执行session.invalidate()时。
d. session超时后。
首先我在网上查了一下session的真正销毁条件:
1调用 session.invalidate();方法
2 session到了设置或者默认的超时时间,自动销毁(关闭浏览器此session还未销毁,只是不能再用了);
明白了上面的两条就可以去研究一下HttpSessionBindingListener这种session监听了。
新建一个类,继承HttpSessionBindingListener,实现了两个方法,分别是:
valueBound()和valueUnbound(),这个类按照通俗的理解就是对session绑定对象(setAttribute)过程的一种监听类型,它不需要配置xml文件,只是将实例化的HttpSessionBindingListener对象setAttribute到session里面就可以对HttpSessionBindingListener对象对象进行监听了,其实也就是对HttpSessionBindingListener对象所对应的session进行监听,还可以记录该session的具体信息(例如会员的登录信息)。
valueBound是在setAttribute时触发
valueUnbound则是在session销毁时触发。^-^(什么时候销毁上文有提到)
做出这样的一个例子:
新建一个继承自HttpSessionBindingListener的类UsersOnlineCountListener
[java] view plaincopyprint?
public class UsersOnlineCountListener implements HttpSessionBindingListener {
int uid;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public void valueBound(HttpSessionBindingEvent arg0) {
System.out.println(uid+"登录了"+new Date());
}
public void valueUnbound(HttpSessionBindingEvent arg0) {
System.out.println(uid+"下线了"+new Date());
}
}
public class UsersOnlineCountListener implements HttpSessionBindingListener { int uid; public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public void valueBound(HttpSessionBindingEvent arg0) { System.out.println(uid+"登录了"+new Date()); } public void valueUnbound(HttpSessionBindingEvent arg0) { System.out.println(uid+"下线了"+new Date()); } }
会员登录成功的时候,代码中加上:
[java] view plaincopyprint?
UsersOnlineCountListener uocl = new UsersOnlineCountListener();
uocl.setUid(obj.getUid());
session.setAttribute("uocl", uocl);//这个时候要触发valueBound方法了
UsersOnlineCountListener uocl = new UsersOnlineCountListener(); uocl.setUid(obj.getUid()); session.setAttribute("uocl", uocl);//这个时候要触发valueBound方法了
控制台输出:
11登录了Mon Sep 20 02:09:37 CST 2010
点击注销的时候,session销毁,触发valueUnbound
控制台输出:
11下线了Mon Sep 20 02:10:22 CST 2010
如果直接关闭浏览器,控制台不会立刻输出"11下线了Mon Sep 20 02:40:13 CST 2010"
大约30分钟后(session的自动销毁时间,可以设定)
控制台输出:
11下线了Mon Sep 20 02:40:13 CST 2010
这里总结下:valueUnbound方法将被以下任一条件触发
a. 执行session.setAttribute("uocl", 非uocl对象) 时。
b. 执行session.removeAttribute("uocl") 时。
c. 执行session.invalidate()时。
d. session超时后。
相关文章推荐
- python webserver, based on SimpleHTTPServer
- Apache学习笔记(1)——http协议
- HttpClient I/O exception (java.net.SocketException) caught when processing request: Connect
- 面对电信运营商HTTP劫持如何是好,投诉太折腾,不如路由器直接屏蔽广告源
- Node.js实践HTTP安全认证之一~~基本认证
- 黑马程序员------网络编程概及其练习
- TCP之深入浅出send和recv
- 保护HTTP的安全
- 网络推广区别与关系
- 网络推广策划和覆盖率
- springMVC使用注解操作HttpSession中的对象
- Http的使用及XML和JSON数据解析
- ueditor上传大容量视频报http请求错误的解决方法
- 高速网络下的 Netmap 单 RX 队列内核旁路技术
- 计算机网络
- 解决https需要验证问题
- apache httpd学习笔记一 - 下载安装并初步了解
- 网络体系概述
- Android HTTP实例 使用GET方法和POST方法发送请求
- TCP/IP 面试题整理