HttpSessionBindingListener和HttpSessionAttributeListener区别
HttpSessionBindingListener和HttpSessionAttributeListener是两个经常让初学者弄混的监听器,其实它们有很大的区别。这2个监听器在文章中简称为BindingListener和AttributeListener.
1.BindingListener有2个方法,valueBound(HttpSessinBindingEvent)和valueUnbount(HttpSessionBindingEvent)。实现BindingListener接口的对象被绑 定到session时触发valueBound事件,解除绑定时触发valueUnbound事件。举例来说:
- public class UserObject implements HttpSessionBindingListener{
- public void valueBound(HttpSessionBindingEvent event){
- System.out.println("触发绑定事件!");
- }
- public void valueUnbound(HttpSessionBindingEvent event){
- System.out.println("解除和session的绑定");
- }
UserObject user = new UserObject();
当把该监听器保存到session中,session.setAttribute("user",user)时就会触发valueBound事件.
当该监听器从session中移除时即session.removeAttribute("user"),触发valueUnbound事件;session失效或超时
时也会触发valueUnbound事件。
注意:只有当该监听器(UserObject)保存到session中或从session移除时才会触发事件,其他没有实现该listener对象保存到session时不会触发该事件。
2.AttributeListener接口有3个方法,attributeAdded(HttpSessionBindingEvent),attributeRemoved(HttpSessionBindingEvent),
attributeReplaced(HttpSeesionEvent)。当在session中添加、移除或更改属性值时会触发相应的事件。
例子:
- MyListener implements HttpSessionAttributeListener{
- attributeAdded(HttpSessionBindingEvenet event){
- System.out.println("有对象加入session中");
- }
- attributeRemoved(HttpSessionBindingEvent event){
- System.out.println("有对象从session中移除");
- }
- attributeReplaced(HttpSessionBindingEvent event){
- System.out.println("属性值改变");
- }
- }
OtherObject other = new OtherObject();
当有对象添加到session中时,session.setAttribute("object",other)触发attributeAdded事件,
当该对象从session移除时,session.removeAttribute("object")触发attriubteRemoved事件,
当该属性的值发生变化时, session.replaceAttribute("object",another)触发attributeRepalced事件。
注意:只要有对象保存到session中或从session中移除或改变属性的值都会触发相应事件,不论该对象是否实现了AttributeListener。
总结:
1.只有实现了HttpSessionBindingListener的类,在和session绑定、解除绑定时触发其事件。
2.实现了HttpSessionAttributeListener后,任何对象(不论其是否实现了AttributeListener)在变化时均触发对应的事件。
最新文章
- html5文件上传
- Linux编程
- 关于this
- (转)苹果推送通知服务教程 Apple Push Notification Services Tutorial
- Oracle VM VirtualBox 随系统自动启动虚拟机的方法
- BZOJ 2707: [SDOI2012]走迷宫( tarjan + 高斯消元 )
- fork进程函数总结
- grunt api 文档
- 收集整理的非常有用的PHP函数
- Hdu 1016 Prime Ring Problem (素数环经典dfs)
- Linxu指令--crond
- 仿QQ发语音、图片选择、表情选择demo
- y
- 使用cmd命令导入SQL文件
- CentOS 7.2 下nginx SSL证书部署的方法(使用crt以及key 配置)
- OSPF笔记
- 21. Spring Boot Druid 数据源配置解析
- AI硬件 XPU
- 【代码笔记】iOS-collectionView实现照片删除
- 400+节点的 Elasticsearch 集群运维
热门文章
- python基础-5 冒泡排序、递归
- [Python3] 019 函数:确认过参数,返回对的值
- Dijkstra经典算法注意点
- stl应用
- 动画可以暂停animation-play-state
- #10017 传送带(SCOI 2010)(三分套三分)
- 洛咕 【P1891】疯狂LCM &; 三倍经验
- Spring boot集成Swagger,并配置多个扫描路径
- wxpython中列表框(ListBox类)、复选列表框(CheckListBox)、下拉选项(Choice)、进度条(Gauge)、滑块(Slider)使用实例源码分享
- redis 安装和运行