Servlet 监听器----Session
来源:互联网 发布:java葵花宝典2017 编辑:程序博客网 时间:2024/06/04 18:50
Session 监听器
有四个监听器接口与HttpSession有关,分别为: HttpSessionListener HttpSessionActivationListener HttpSessionAttributeListener HttpSessionBindingListener
1. HttpSessionListener
当HttpSession被创建或者被销毁时,Servlet容器就会调用所有已经注册的HttpSessionListener。
例子
java代码
public class SessionListener implements HttpSessionListener,ServletContextListener{ @Override public void sessionCreated(HttpSessionEvent se) { // TODO Auto-generated method stub HttpSession session = se.getSession(); ServletContext servletContext = session.getServletContext(); //AtomicInteger是在使用非阻塞算法实现并发控制 AtomicInteger userCounter = (AtomicInteger) servletContext.getAttribute("userCounter"); int userCount = userCounter.decrementAndGet(); System.out.println("userCount decreamented to:"+userCount); } @Override public void sessionDestroyed(HttpSessionEvent se) { // TODO Auto-generated method stub HttpSession session = se.getSession(); ServletContext servletContext = session.getServletContext(); AtomicInteger userCounter = (AtomicInteger) servletContext.getAttribute("userCounter"); int userCount = userCounter.decrementAndGet(); System.out.println("----------------userCount decreamented to:"+userCount); } @Override public void contextDestroyed(ServletContextEvent sce) { // TODO Auto-generated method stub } @Override public void contextInitialized(ServletContextEvent sce) { // TODO Auto-generated method stub ServletContext servletContext = sce.getServletContext(); servletContext.setAttribute("userCounter", new AtomicInteger()); }
可以看见,SessionListener实现了两个接口。
其中AtomicInteger的初始值为0,表示用户刚启动时的用户数为0,
其对象以原子方式将此更新器管理的给定对象的字段的当前值减 1。
将该监听器注册到部署,访问界面,可以看到控制台输出
从同一个浏览器再次发出请求时,userCounter的值不会发生变化,因为它与同一个HttpSession关联。但是使用不同浏览器访问时,这个值就会增加,值得注意的是:销毁HttpSession之前调用sessionDestroyed方法,它的userCounter值是递减的。
2. HttpSessionActivationListener
每当HttpSession中添加,删除或替换了某个属性时,ServletContextAttributeListener的实现都会收到通知,
该监听器接口种有三个方法:
void attributeAdded(HttpSessionBindingEvent event)
void attributeRemoveed(HttpSessionBindingEvent event)
void attributeReplaced(HttpSessionBindingEvent event)
获取属性名和属性值,使用以下两个方法
java.lang.String getName()
java.lang.Object getValue()
3.HttpSessionAttributeListener
在分布式环境中,多个Servlet会配置成可伸缩性的,为节省内存,Servlet可对session进行迁移或序列化,这个接口中有;两个方法 包含这个对象的HttpSession被激活就调用: void sessionDidActivate(HttpSessionEvent event) 包含这个对象的HttpSession被钝化就调用: void sessionWillPassivate(HttpSessionEvent event)
4. HttpSessionBindingListener
当HttpSessionBindingListener绑定到HttpSession或者取消绑定时,就会收到通知。
例子:
public class Banding implements HttpSessionBindingListener{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public void valueBound(HttpSessionBindingEvent event) { // TODO Auto-generated method stub String attributeName = event.getName(); System.out.println(attributeName+" valueBinding"); } @Override public void valueUnbound(HttpSessionBindingEvent event) { // TODO Auto-generated method stub String attributeName = event.getName(); System.out.println(attributeName+" valueUnBinding"); }}
当监听器与HttpSession绑定或取消绑定时,就会在控制台输出相关内容。
- Servlet 监听器----Session
- servlet监听对session监听器
- Servlet监听器/Session钝化和活化
- Servlet-监听器(ServletContext、Request、Session)
- session监听器
- session监听器
- session监听器
- Session监听器
- session监听器
- session监听器
- Servlet监听器
- servlet监听器
- Servlet监听器
- Servlet监听器
- servlet 监听器
- servlet监听器
- Servlet监听器
- servlet监听器
- es6-箭头函数详解
- Rails中的sql小记
- 数据结构实验之链表二:逆序建立链表
- 深入解析Java对象的hashCode和hashCode在HashMap的底层数据结构的应用
- RMQ入门
- Servlet 监听器----Session
- 机器学习-线性回归
- Linux 其他命令
- axis
- MYSQL存储过程循环遍历插入数据
- [LeetCode] 58. Length of Last Word
- Npm简介
- 读《人类简史》有感
- Google算法题:贪吃蛇