⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 统计在线人员列表.txt

📁 JAVA编写的统计WEB当前在线人员程序
💻 TXT
字号:
在线用户列表的写法近日项目中要用到这个功能,查阅很多资料后,总结如下。由于项目不只要统计用户数,还要显示相关在线用户的信息,所以考虑用HttpSessionBindingListener接口。该接口包含了valueBound()和valueUnbound()两个方法,分别可以对创建session和注销session、session过期做出响应。此处我们建立HttpSessionBindingListener接口实现类package com.sscm.common.organization;import javax.servlet.http.*;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;import java.util.*;import com.retop.scm.common.*;public class OnlineCounterListener implements HttpSessionBindingListener{ private OnlineUser  newUser=null; //OnlineUser是用户类 /**  * Constructor for OnlineCounterListener.  */ public OnlineCounterListener() {  newUser = new OnlineUser(); } public void valueBound(HttpSessionBindingEvent e){     ScmLogin scmLogin = (ScmLogin)e.getSession().getAttribute("ScmLogin");     newUser.setScmLogin(scmLogin);     try {      if(isInList(scmLogin))       newUser.updateOnline();     }     catch (Exception ex) {     }  //System.out.println("用户"+e.getSession().getAttribute("ScmLogin")+"上限");   }   public void valueUnbound(HttpSessionBindingEvent e){     ScmLogin scmLogin = (ScmLogin)e.getSession().getAttribute("ScmLogin");     newUser.setScmLogin(scmLogin);     try {      newUser.updateUnline();      }     catch (Exception ex) {     }  //System.out.println("用户"+e.getSession().getAttribute("ScmLogin")+"下限");   } public boolean isInList(ScmLogin scmLogin){  List list = OnlineUser.getList();  if(list.size()>0){   for(int i=0;i<list.size();i++){    ScmLogin myLogin = (ScmLogin)list.get(i);    if(scmLogin.getUserID().equalsIgnoreCase(myLogin.getUserID()))     return false;   }  }  return true; }}该类要在系统中注册,我用的是Websphere,所以只需在web.xml中添加listener>  <listener-class>com.sscm.common.organization.OnlineCounterListener</listener-class></listener>来注册该类。另外,要实现valueBound()方法,还需在用户登陆模块来激活该方法,OnlineCounterListener sessionListener=new OnlineCounterListener();request.getSession(false).setAttribute("listener",sessionListener);此处注册了listener,相当于后台多了一个session监听器。同理,要实现valueUnbound,在注销模块添加:session.removeAttribute("listener");来注销该用户session即可。再来看用户实现类package com.retop.scm.common;import java.util.*;public class OnlineUser { private ScmLogin scmLogin = null ; private static List list=new ArrayList(); //用来存放在线用户列表 /**  * Returns the scmLogin.  * @return ScmLogin  */ public ScmLogin getScmLogin() {  return scmLogin; } /**  * Sets the scmLogin.  * @param scmLogin The scmLogin to set  */ public void setScmLogin(ScmLogin scmLogin) {  this.scmLogin = scmLogin; }  public void updateOnline(){  list.add(this.scmLogin); } public void updateUnline(){  list.remove(this.scmLogin); } public static List getList(){  return list; }}将在线用户信息放在一个static的list中。此处还用到一个用户的基类ScmLogin,public class ScmLogin {  private String UserID;  private String RealName;  private Integer OrgID;  private String  OrgName;  private String  OrgCode; //add by starrain.tian 2003.12.17  private java.sql.Timestamp loginTime; //add by starrain.tian 2004.11.10  private String ip;  .....  setXX,getXX.....}在用户登录模块,只需把ScmLogin放入session即可。mysession.setAttribute("ScmLogin",mylogin);最后在实现页面,即访问的jsp页面里,<%@ page contentType="text/html; charset=GBK"%><%@ page import= "java.util.*"%><%@ page import="com.sscm.common.organization.OnlineCounterListener" %><%@ page import ="com.retop.scm.common.*" %><html><head><title>在线用户</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><link rel="stylesheet" href="../ScmStyle.css" type="text/css" media="screen"/></head><body><% //session.setMaxInactiveInterval(20); List list = OnlineUser.getList();%><TABLE style="width:100%;" cellSpacing="0" cellPadding="0" border="0">   <tr>    <TD width="13%" align="left"><img src="../images/w1.gif"><FONT color="#2f47cc">      在线用户列表   &nbsp;&nbsp;&nbsp;  当前在线用户<%=list.size()%>人</FONT> </TD>  </tr>  <tr><td height="6">&nbsp;</td></tr></Table><table class="DbGridStyle" cellspacing="1" cellpadding="4" rules="all" border="1" id="comlist" style="width:100%;">  <tr class="GridHeadStyle" nowrap align="Center">    <td><div align="center">用户ID</div></td>    <td><div align="center">用户名称</div></td>    <td><div align="center">所属组织</div></td>    <td><div align="center">登录时间</div></td>    <td><div align="center">用户IP</div></td>  </tr>  <% for(int i=0;i<list.size();i++) {  ScmLogin myLogin = (ScmLogin)list.get(i);%>  <tr class="ItemStyle">    <td><%=myLogin.getUserID()%></td>    <td><%=myLogin.getRealName()%></td>    <td><%=myLogin.getOrgName()%></td>    <td>      <%String loginttime=(String)myLogin.getLoginTime().toString().substring(0,16);out.println(loginttime);%>    </td>    <td><%=myLogin.getIp()%></td>  </tr>  <% }%></table></body></html>这样就可以得到在线用户信息。在实际测试当中,对用户直接关闭浏览器情况,可以对服务会话进行设置,在web.xml中添加<session-config>  <session-timeout>20</session-timeout></session-config>表示20秒    后服务器超时,可以用来测试该情况。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -