Servlet 监听器----Session
2017-08-07 14:15
246 查看
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-监听器(ServletContext、Request、Session)
- [原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)
- servlet监听对session监听器
- [原创]java WEB学习笔记47:Servlet 监听器简介, ServletContext(Application 对象), HttpSession (Session 对象), HttpServletRequest (request 对象) 监听器,利用listener理解 三个对象的生命周期
- JavaEE框架类——监听器(观察者模式)和Servlet技术的监听器session沌化与活化技术
- servlet自学——Cookie和Session
- 介绍一篇关于session的好文章,写的很详细(jsp-servlet 技术)
- Servlet自学第27讲:Session与Cookie对比总结
- 浅谈servlet中的session
- 20160417javaweb之servlet监听器
- 深入理解Servlet/JSP之“Cookie和Session原理”
- 使用servlet过滤器和监听器
- Servlet事件监听器(1)
- 这几天讲的jsp+servlet+javabean实现mvc,很多东西只是入门,自己要努力。。。。。Session的
- Servlet事件监听器
- 【Java.Web】Session —— 示例 —— Servlet —— 购物车示例,与JSP区别
- Servlet中取不到session值的问题
- 客服人员在线session监听器
- [转]Servlet中监听器介绍