详解Listener监听Http Session
创始人
2024-04-12 21:41:36
0

Listener 是Servlet 的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。当增加一个 Http Session时,就激发session Created(Http Session Event se)方法,这样就可以给在线人数加1。常用的监听接口有以下几个:

Servlet Context Attribute Listener监听对Servlet Context 属性的操作,比如增加、删除、修改属性。

Servlet Context Listener监听Servlet Context 。当创建Servlet Context 时,激发Context Initialized (Servlet Context Event sce)方法;当销毁Servlet Context 时,激发Context Destroyed(Servlet Context Event sce)方法。

Http Session Listener监听Http Session的操作。当创建一个Session时,激发session Created(Http Session Event se)方法;当销毁一个Session时,激发session Destroyed (Http Session Event se)方法。

Http Session Attribute Listener监听Http Session中的属性的操作。当在Session增加一个属性时,激发attribute Added (Http Session Binding Event se) 方法;当在Session删除一个属性时,激发attribute Removed(Http Session Binding Event se)方法;当在Session属性被重新设置时,激发attribute Replaced(Http Session Binding Event se) 方法。

下面我们开发一个具体的例子,这个监听器能够统计在线的人数。在Servlet Context 初始化和销毁时,在服务器控制台打印对应的信息。当Servlet Context 里的属性增加、改变、删除时,在服务器控制台打印对应的信息。

要获得以上的功能,监听器必须实现以下3个接口:
◆HttpSessionListener
◆Servlet Context Listener
◆Servlet Context AttributeListener

  1. import javax.servlet.http.*;  
  2. import javax.servlet.*;  
  3. public class OnLineCountListener implements HttpSessionListener,  
  4. ServletContextListener,ServletContextAttributeListener  
  5. {  
  6. private int count;  
  7. private ServletContext context = null;  
  8. public OnLineCountListener()  
  9. {  
  10. count=0;  
  11. //setContext();  
  12. }  
  13. //创建一个session时激发  
  14. public void sessionCreated(HttpSessionEvent se)  
  15. {  
  16. count++;  
  17. setContext(se);  
  18. }  
  19. //当一个session失效时激发  
  20. public void sessionDestroyed(HttpSessionEvent se)  
  21. {  
  22. count--;  
  23. setContext(se);  
  24. }  
  25. //设置context的属性,它将激发attributeReplaced或attributeAdded方法  
  26. public void setContext(HttpSessionEvent se)  
  27. {  
  28. se.getSession().getServletContext().  
  29. setAttribute("onLine",new Integer(count));  
  30. }  
  31. //增加一个新的属性时激发  
  32. public void attributeAdded(ServletContextAttributeEvent event) {  
  33. log("attributeAdded('" + event.getName() + "', '" +  
  34. event.getValue() + "')");  
  35. }  
  36. //删除一个新的属性时激发  
  37. public void attributeRemoved(ServletContextAttributeEvent event) {  
  38. log("attributeRemoved('" + event.getName() + "', '" +  
  39. event.getValue() + "')");  
  40. }  
  41. //属性被替代时激发  
  42. public void attributeReplaced(ServletContextAttributeEvent event) {  
  43. log("attributeReplaced('" + event.getName() + "', '" +  
  44. event.getValue() + "')");  
  45. }  
  46. //context删除时激发  
  47. public void contextDestroyed(ServletContextEvent event) {  
  48. log("contextDestroyed()");  
  49. this.context = null;  
  50. }  
  51. //context初始化时激发  
  52. public void contextInitialized(ServletContextEvent event) {  
  53. this.context = event.getServletContext();  
  54. log("contextInitialized()");  
  55. }  
  56. private void log(String message) {  
  57. System.out.println("ContextListener: " + message);  
  58. }  

在OnLine Count Listener 里,用count代表当前在线的人数,OnLine Count Listener将在Web服务器启动时自动执行。当 OnLine Count Listener构造好后,把count设置为0。每增加一个Session,OnLine Count Listener会自动调用 session Created(Http Session Event se)方法;每销毁一个Session,OnLine Count Listener会自动调用session Destroyed (Http Session Event se)方法。当调用session Created(Http Session Event se)方法时,说明又有一个客户在请求,此时使在线的人数(count)加1,并且把count写到Servlet Context 中。 Servlet Context 的信息是所有客户端共享的,这样,每个客户端都可以读取到当前在线的人数。

从作用域范围来说,Servlet 的作用域有Servlet Context ,Http Session,Servlet Request.以上是Listener监听Http Session

【编辑推荐】

  1. Servlet Context的范围
  2. 浅析Servlet 3.0 API的概念
  3. Servlet注释与部署描述符
  4. Java Servlet和Servlet 3.0的新特性
  5. Servlet和JSP潜在的隐患

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...