ServletContextAttributeListener

监听对ServletContext属性的操作,比如增加/删除/修改

ServletContextListener

监听ServletContext,当创建ServletContext时,激发 contextInitialized(ServletContextEvent sce)方法;当销毁ServletContext时,激发contextDestroyed(ServletContextEvent sce)方法

HttpSessionListener

监听HttpSession的操作。当创建一个Session时,激发session Created(SessionEvent se)方法;当销毁(或超时)一个Session时,激发sessionDestroyed (HttpSessionEvent se)方法

HttpSessionBindingListener

valueBound---被设置到session中(setAttribute)
valueUnbound---从session中解除(removeAttribute)

HttpSessionBindingListener和HttpSessionListener之间的最大区别: HttpSessionListener只需要设置到web.xml中就可以监听整个应用中的所有session。 HttpSessionBindingListener必须实例化后放入某一个session中,才可以进行监听。

从监听范围上比较,HttpSessionListener设置一次就可以监听所有session,HttpSessionBindingListener通常都是一对一的。

HttpSessionBindingListener 需要存储在session 里 ,比如
session.setAttribute("ListenerName", new ImplBindingListener(username));

正是这种区别成就了HttpSessionBindingListener的优势,我们可以让每个listener对应一个username,这样就不需要每次再去session中读取username,进一步可以将所有操作在线列表的代码都移入listener,更容易维护。

这里可以直接使用listener的username操作在线列表,不必再去担心session中是否存在username。

valueUnbound的触发条件是以下三种情况:

执行session.invalidate()时。

session超时,自动销毁时。

执行session.setAttribute("ListenerName", "其他对象");或session.removeAttribute("ListenerName");将listener从session中删除时。

因此,只要不将listener从session中删除,就可以监听到session的销毁

HttpSessionAttributeListener

监听HttpSession中的属性的操作。当在Session增加一个属性时,激发 attributeAdded(HttpSessionBindingEvent se) 方法;当在Session删除一个属性时,激发attributeRemoved(HttpSessionBindingEvent se)方法;当在Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent se) 方法

HttpSessionActivationListener
使代码可以支持分布式环境
为了负载均衡或者fail-over,web容器可以迁移一个session到其他的jvm.
session的passivation是指非活动的session被写入持久设备(比如硬盘)。
activate自然就是相反的过程。在分布式环境中切换的属性必须实现serializable接口

转载于:https://blog.51cto.com/daheyuan/1136582

J2EE常用Listener(转载)相关推荐

  1. J2EE常用资源管理方式总结

    J2EE底层是多线程的,无论何种资源管理的策略都是与线程相关的,因此通过合理的资源管理来应对多线程的环境是非常关键的.现在总结一下几种J2EE中常见的资源管理方式: 实例池     容器管理的单例   ...

  2. MYSQL常用命令(转载)

    1.导出整个数据库 mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin1) mysqld ...

  3. WebStorm常用设置(转载)

    转载自: 点击我 今天下载了最新版本的WebStorm 7.反正又要重新设置一番了,干脆写下来记录到博客里面,免得以后每次忘了还要到处搜索比较麻烦. 加速 禁用多余的插件,关掉没必要的代码检查项. w ...

  4. PHP 常用设计模式 (转载)

    1.单例模式 单例模式顾名思义,就是只有一个实例.作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式的要点有三个: 一是某个类只能有一个实例: ...

  5. ASP.NET网站建设基本常用代码[转载]

    1.为按钮添加确认对话框Button.Attributes.Add("onclick","return confirm('确认?')"); Button.Att ...

  6. j2ee常用工作流比较(shart、osworkflow、jbpm)

    工作流引擎 Shark(EnhydraShark) Osworkflow opensymphony Jbpm(JBoss JBPM) 工作流描述语言 1.XPDL:WfMC制定的描述业务流程控制流的X ...

  7. AIX常用操作-转载

    问题(一)  aix64位编程,一些问题请教 编译器 vac 6.0 编译参数:cc -G -D__AIX__ -q64 -qcpluscmt -qwarn64 -g -O3 -qarch=pwr5 ...

  8. 一杯茶的功夫,掌握Git常用命令(转载)

    技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.创建与合并分支 (1).从master分支创建dev分支,并切换到dev分支 git ...

  9. VBA编程常用语句(转载)

    1.Option Explicit '强制对模块内所有变量进行声明 Option Private Module '标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示 Option Comp ...

最新文章

  1. 离开域后打开Office慢 Openfiler
  2. static final public synchronized abstract
  3. python网络爬虫的基本步骤-python爬虫入门需要哪些基础/python 网络爬虫教程
  4. php nfs,NFS(网络文件系统)服务器简单解析
  5. C/C++ ini配置文件的格式及如何读写ini配置文件
  6. jersey客户端_每个客户使用Jersey处理的Cookie
  7. java知识点3(null、引用相关知识(自己理解))
  8. 【BZOJ4566】找相同字符,后缀数组
  9. 【Hive】数据导出
  10. java基础代码实例_全网都在找的Python简单基础小程序的实例代码
  11. 全国计算机二级报名入口新疆,新疆2019年3月全国计算机等级(NCRE)考试(第54次)报名入口...
  12. c语言谭浩强第八章函数PPT,清华谭浩强C语言 第8章 函数.ppt
  13. 关于癌症的思考:癌症的本质是什么
  14. listlength函数头文件_length函数
  15. python毕业设计论文-基于Python的网络爬虫的设计与实现.doc
  16. java 高效列转行,java 列转行
  17. 为什么那些美事没有实现---生活中小事有感
  18. 后序线索化二叉树及遍历(图解)
  19. 蓝蓝算法04-字符串逆置
  20. vue 2.0 图片懒加载

热门文章

  1. centos 计算器_Linux学习之CentOS(十五)--Linux常用命令之bc、man、shutdown...
  2. 防火墙dhcp服务器性能,F100-A-G 防火墙当做DHCP服务器,下接E528交换机,能不能划分多个VLAN?...
  3. C语言丨线性表(三):双链表
  4. mysql三高讲解(二):2.2 B+树的B的意义
  5. linux 文件可执行_深入理解linux内核——可执行文件执行过程(2)
  6. 你的计算机usb管理策略,您的计算机已经实施了USB存储设备管理策略,系统发现你使用了USB存储设备,该设备已被阻止,如有疑问请与...
  7. python threading.Thread
  8. 编程语言对比 容器
  9. Backpropagation
  10. three.js和php,详解three.js本地运行的方法