首先我在网上查了一下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

  1. public class UsersOnlineCountListener implements HttpSessionBindingListener {
  2. int uid;
  3. public int getUid() {
  4. return uid;
  5. }
  6. public void setUid(int uid) {
  7. this.uid = uid;
  8. }
  9. public void valueBound(HttpSessionBindingEvent arg0) {
  10. System.out.println(uid+"登录了"+new Date());
  11. }
  12. public void valueUnbound(HttpSessionBindingEvent arg0) {
  13. System.out.println(uid+"下线了"+new Date());
  14. }
  15. }

会员登录成功的时候,代码中加上:

  1. UsersOnlineCountListener uocl = new UsersOnlineCountListener();
  2. uocl.setUid(obj.getUid());
  3. 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超时后。

本文转自:http://blog.csdn.net/lovesea9/article/details/7612017

session监听器HttpSessionBindingListener的更多相关文章

  1. Session监听器

    Session监听器,是用来监听session对象创建和关闭的.有时我们需要在session创建或关闭时执行一些操作.这是就可以使用Session Listenner. .在项目的web.xml文件中 ...

  2. 使用Session监听器实现统计在线人数

    使用Session监听器实现统计在线人数 1.工作目录结构 包含监听器类和jsp页面 2.session监听器 首先利用session监听器来实现对访问网站时的session计数,当有session创 ...

  3. session监听器和Attribute监听器

    session监听器 有一个web项目,每次一个新的浏览器链接,都会走下面SessionListerenr 方法,该技术可用于网站当前用户的统计 package com.cisst.controlle ...

  4. HttpSessionListener和HttpSessionBindingListener监听session的销毁

    1. 使用HttpSessionListener public class OnlineUserListener implements HttpSessionListener { public voi ...

  5. 【学习笔记】【Javaweb】二、Session对象过期时间三种设置方法、Session失效监听器

    一.前言 本文:https://www.cnblogs.com/Twobox/p/10361712.html 参考:https://www.cnblogs.com/diewufeixian/p/422 ...

  6. Java监听器

    监听器 1.概念 监听器:主要是用来监听特定对象的创建,属性的变化的!,本质上却是一个实现特定接口的普通java类! 对象分为自己创建自己使用的,和别人创建自己用的,自己创建的不需要监听,值需要取监听 ...

  7. 用HttpSessionListener与HttpSessionBindingListener实现在线人数统计

    在线人数统计方面的实现,最初我的想法是,管理session,如果session销毁了就减少,如果登陆用户了就新增一个,但是如果是用户非法退出,如:未注销,关闭浏览器等,这个用户的session是管理不 ...

  8. java web session监听销毁跳转

    1.了解如何使用HttpSessionListener监听session的销毁. 2.了解如何使用HttpSessionBindingListener监听session的销毁. 一. 使用HttpSe ...

  9. Servlet监听器类型

    ------------------------serlvet对象监听器------------------------------------------- request监听器(ServletRe ...

随机推荐

  1. Android两次后退键退出

    转载请注明出处:http://blog.csdn.net/javacattle/article/details/41964045 仅仅要在 *.Java 文件里加入就可以 private int ba ...

  2. MapReduce中的分布式缓存使用

    MapReduce中的分布式缓存使用 @(Hadoop) 简介 DistributedCache是Hadoop为MapReduce框架提供的一种分布式缓存机制,它会将需要缓存的文件分发到各个执行任务的 ...

  3. Android之横屏竖屏显示问题

    1.採用不同的布局文件 在res下创建目录layout-land 在该目录下写入的layout(xml文件)横屏的时候系统自己主动选择显示的layout 同理: 在res下创建目录layout-por ...

  4. CAS中的ABA问题

    http://coolshell.cn/articles/8239.html CAS的ABA问题 所谓ABA(见维基百科的ABA词条),问题基本是这个样子: 进程P1在共享变量中读到值为A P1被抢占 ...

  5. Struts2之文件上传(单文件/多文件)

    <一>简述: Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置,<interceptor name="fileUp ...

  6. 在Jquery validation里验证通过后,自定义提交不同的action路径,适合一个窗口既可以作为添加对话框也可以作为编辑对话框

    $("#myform").validate({ debug: true, //调试模式取消submit的默认提交功能 ignore: '#Password,#ConfirmPass ...

  7. Android系统源代码——所需工具

    一.概述 众所周知,Android移动操作系统是Google花费了很大的财力.物力及人力的前提下,推广到世界各个角落,以开放源代码的方式(当然也不是完全开放所有),使其在世界范围内迅速漫延开来,到目前 ...

  8. VS2010 DLL库生成和使用

    一.生成dll文件(VS2010 Win32 程序) CreateDll.h // 下列 ifdef 块是创建使从 DLL 导出更简单的// 宏的标准方法.此 DLL 中的所有文件都是用命令行上定义的 ...

  9. 请介绍WCF服务

    WCF本质上提供一个跨进程.跨机器以致跨网络的服务调用 WCF合并了Web服务..net Remoting.消息队列和Enterprise Services的功能并集成在Visual Studio中, ...

  10. shell中的find和xargs详细解析