Java监听器学习 统计当前在线人数

javax.servlet.http.HttpSession 这个类是很常用的,每当我们浏览网站,不论有没有登陆,都会产生1个session,它记录了和浏览者相关的数据;

下面介绍session的2个监听器接口:

1)javax.servlet.http.HttpSessionBindingListen er;

实现这个接口的类,每当被存放到session或从session中移除都会出发接口中相应的方法,从而实现监听的效果;

2)javax.servlet.http.HttpSessionListener;

实现这个接口的类,本身就是1个监听器,每当有session生成或消亡时,都触发接口中相应的方法,从而实现监听器的效果;

HttpSessionListener 的实现类本身就是一个监听器,要使用它需要在 web.xml 中启动这个监听器,例如
Xml代码
  1. <listener>  
  2.  <listener-class>packname.classname</listener-class>  
  3. </listener>  


3)这2个监听器是有区别的

前者的触发取决于 session 中加入的属性;

后者的触发取决于 session 本身的产生和消亡;



与shangshu 之类似的还有
对ServletContext的监听和对Request监听

应用:当前在线人数列表
在线人数列表是对所有人起作用,数据应放到application中。即ServletContext对象

OnLineDemo.java
Java代码
package demo;   
  1.   
  2. import java.util.ArrayList;   
  3. import java.util.List;   
  4.   
  5. import javax.servlet.ServletContext;   
  6. import javax.servlet.ServletContextEvent;   
  7. import javax.servlet.ServletContextListener;   
  8. import javax.servlet.http.HttpSessionAttributeListener;   
  9. import javax.servlet.http.HttpSessionBindingEvent;   
  10. import javax.servlet.http.HttpSessionEvent;   
  11. import javax.servlet.http.HttpSessionListener;   
  12.   
  13.   
  14.   
  15. public class OnlineDemo implements ServletContextListener, HttpSessionListener,   
  16.         HttpSessionAttributeListener {   
  17.     // 声明一个ServletContext对象   
  18.     private ServletContext application null;   
  19.   
  20.     public void contextInitialized(ServletContextEvent sce) {   
  21.         // 容器初始化时,向application中存放一个空的容器   
  22.         this.application sce.getServletContext();   
  23.         this.application.setAttribute("alluser"new ArrayList());   
  24.     }   
  25.   
  26.     public void contextDestroyed(ServletContextEvent sce) {   
  27.     }   
  28.   
  29.     public void sessionCreated(HttpSessionEvent se) {   
  30.     }   
  31.   
  32.     public void sessionDestroyed(HttpSessionEvent se) {   
  33.         // 将用户名称从列表中删除   
  34.         List (List) this.application.getAttribute("alluser");   
  35.         String value (String) se.getSession().getAttribute("uname");   
  36.         l.remove(value);   
  37.         this.application.setAttribute("alluser"l);   
  38.     }   
  39.   
  40.     public void attributeAdded(HttpSessionBindingEvent se) {   
  41.         // 如果登陆成功,则将用户名保存在列表之中   
  42.         List (List) this.application.getAttribute("alluser");   
  43.         l.add(se.getValue());   
  44.         this.application.setAttribute("alluser"l);   
  45.     }   
  46.   
  47.     public void attributeRemoved(HttpSessionBindingEvent se) {   
  48.     }   
  49.   
  50.     public void attributeReplaced(HttpSessionBindingEvent se) {   
  51.     }   
  52.  



online.jsp
Html代码
  1. <%@ page contentType="text/html;charset=gb2312"%>  
  2. <%@ page import="java.util.*"%>  
  3. <form action="online.jsp" method="post">  
  4. 用户名:   
  5. <input type="text" name="name">  
  6. <input type="submit" value="登陆">  
  7. <a href="logout.jsp">注销</a>  
  8. </form>  
  9. <!-- 向session接收输入的用户名 -->  
  10. <%   
  11.     if(request.getParameter("name")!=null)   
  12.         session.setAttribute("uname",request.getParameter("name")) ;   
  13. %>  
  14. <h2>在线人员</h2>  
  15. <hr>  
  16. <%   
  17.     List l (List)application.getAttribute("allUser");   
  18.     for(Object l)   
  19.         out.println(o);   
  20. %>  


logout.jsp
Html代码
  1. <%   
  2.     session.invalidate() ;   
  3. %>  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值