Java在WEB中如何统计在线人数

  原理:   建立一个Session级别的Listener,然后在Session建立的时候往Application的一个向量变量List中写入用户信息,当Session释放时从变量List中删除该用户信息,就可以在Application的列表中得到在线用户列表了。

  
  1. import javax.servlet.http.*; 
  2. import javax.servlet.*; 
  3. import java.util.*; 
  4. public class onLineUser implements HttpSessionBindingListener { 
  5.         private Vector users=new Vector();    
  6.                
  7.         public   int  getCount(){ 
  8.                     users.trimToSize(); 
  9.                     return  users.capacity(); 
  10.         } 
  11.         
  12.           public  boolean existUser(String userName){ 
  13.                     users.trimToSize(); 
  14.                      boolean existUser= false
  15.                     for (int i=0;i <users.capacity();i++ ) 
  16.                        { 
  17.                                 if (userName.equals((String)users.get(i))) 
  18.                                    { 
  19.                                             existUser=true
  20.                                             break
  21.                                        } 
  22.                            } 
  23.                         return existUser; 
  24.             }     
  25.             public  boolean deleteUser(String userName) { 
  26.                     users.trimToSize(); 
  27.                     if (existUser(userName)){ 
  28.                                 int currUserIndex=-1; 
  29.                                 for ( int  i=0;i <users.capacity();i++){ 
  30.                                         if(userName.equals((String)users.get(i))){ 
  31.                                                 currUserIndex=i; 
  32.                                                 break
  33.                                             } 
  34.                       } 
  35.                     if  (currUserIndex!=-1){ 
  36.                                 users.remove(currUserIndex); 
  37.                                 users.trimToSize(); 
  38.                     return true
  39.                     } 
  40.                 } 
  41.                 return   false
  42.             } 
  43.  
  44.             public Vector getOnLineUser() 
  45.             { 
  46.                         return users; 
  47.                 } 
  48.     
  49.                 public void valueBound(HttpSessionBindingEvent e) { 
  50.                             users.trimToSize(); 
  51.                             if(!existUser(e.getName())){ 
  52.                                             users.add(e.getName()); 
  53.                                             System.out.print(e.getName()+"/t 登入到系统/t"+(new Date())); 
  54.                                             System. out .println( " 在线用户数为:" +getCount()); 
  55.                             }else 
  56.                                             System. out .println(e.getName()+ "已经存在" ); 
  57.                             } 
  58.  
  59.                 public void valueUnbound(HttpSessionBindingEvent e) { 
  60.                                     users.trimToSize(); 
  61.                                         String userName=e.getName(); 
  62.                                     deleteUser(userName); 
  63.                                     System.out.print(userName+"/t 退出系统/t"+(new Date())); 
  64.                                     System. out .println( " 在线用户数为:" +getCount()); 
  65.                     } 

 

 

  1. JSP程序
  2. jsp: 
  3. <%@ page contentType="text/html;charset=gb2312" %> 
  4. <%@ page import= "java.util.*"  %> 
  5. <jsp:useBean id="onlineuser" class="temp.jb.onLineUser" scope="application"/> 
  6. <html> 
  7. <head> 
  8. </head> 
  9. <body onUnload="postMessage()"
  10. <center> 
  11. <p> <h1>登陆成功,欢迎访问 </h1> </p> 
  12. </center> 
  13. <% session = request.getSession(false); %> 
  14. <% 
  15. String username=request.getParameter("username"); 
  16. if  (onlineuser.existUser(username)){ 
  17. out.println("用户 <font color=red>"+username+" </font>已经登陆!"); 
  18. } else
  19. session.setMaxInactiveInterval(50); //Sesion有效时长,以秒为单位 
  20. session.setAttribute(username,onlineuser); 
  21. out.println("欢迎新用户: <font color=red>"+username+" </font>登陆到系统!"); 
  22. out.println(" <br>当前在线用户人数: <font color=red>"+onlineuser.getCount()+" </font> <br>"); 
  23. String ip = request.getRemoteAddr(); 
  24. out.println(" <br>IP: <font color=red>"+ip+" </font> <br>"); 
  25. Vector vt=onlineuser.getOnLineUser(); 
  26. Enumeration e = vt.elements(); 
  27. out .println( "在线用户列表" ); 
  28. out.println(" <table border=1>"); 
  29. out .println( " <tr> <td>用户名 </td> </tr>" ); 
  30. while(e.hasMoreElements()){ 
  31. out .println( " <tr> <td>" ); 
  32. out.println((String)e.nextElement()+" <br>"); 
  33. out .println( " </td> </tr>" ); 
  34. out .println( " </table>" ); 
  35. %> 
  36. <center> 
  37. <p> </p> 
  38. [ <a href="javascript:window.close()">关闭窗口 </a>] 
  39. <% 
  40. out.println(" <p> <a href='logout.jsp?username="+username+"'>退出系统 </a> </p>"); 
  41. %> 
  42. </center> 
  43. <Script> 
  44. function postMessage(){ 
  45. <%onlineuser.deleteUser(request.getParameter( "username" ));%> 
  46. </Script> 
  47. </body> 
  48. </html>
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值