一个简单统计在线用户信息的工具类(更新中)

很多的论坛上,我们有时候不仅仅能看到在线的人数以及登录的人数,而且还能能知道哪些用户在线,哪些用户不在线,再加上一些即时通讯工具的集成支持,这大大的方便了用户之间的相互交流,也方便了运行商对网站每天访问情况的统计以及对网站人群的统计。在Java中怎样来实现这种统计呢?方法有很多,可以统计利用session和Applaction的结合来进行统计,也可以用实时修改数据库的状态来进行实现,自己可以根据功能的强弱自己来自行设计,一般来说,我们都会使用监听器来进行实现,自己写一个监听器要实现HttpSessionListener,然后实现其方法就行了,在相应的方法中实现不同的功能。以下是一个简单的监听器:
package mj.util;

import java.util.Enumeration;
import java.util.Hashtable;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
 * 实现在线用户统计的监听器
 
 @author yongtree
 */
public class SessionListener implements HttpSessionListener {

  private static Hashtable htSessionUser = new Hashtable();

  /**
   * 构造函数
   */
  public SessionListener() {
  }

  /**
   @param se -
   *            HttpSessionEvent
   */
  public void sessionCreated(HttpSessionEvent se) {

    htSessionUser.put(se.getSession().getId()"");

  }

  /**
   * @如果登录之后,请调用此方法。
   @param sessionId
   @param obj
   *            一般为登陆用户ID,或者登陆用户对象。此处放对象较好。
   * @特别说明。如果用此形式,同一用户,同一时间多次登陆,进行判断,比较困难。最后在加一个HashTable,以账号为主键,其它相关信息为value
   */
  public static void userLogin(String sessionId, Object obj) {
    htSessionUser.put(sessionId, obj);
  }

  /**
   @param se -
   *            HttpSessionEvent
   */
  public void sessionDestroyed(HttpSessionEvent se) {
    htSessionUser.remove(se.getSession().getId());
    se.getSession().invalidate();

  }

  /**
   @return Hashtable,该Hashtable的KEY含有所有会话的ID,如果该用户登录,则VALUE含有该用户的id。
   */
  public static Hashtable getSessionUser() {
    return htSessionUser;
  }

  /**
   @return int,访问当前站点的会话数。
   */
  public static int getSessionCount() {
    return htSessionUser.size();
  }

  /**
   @return int,访问当前站点的登录会话数。
   */
  public static int getLoginSessionCount() {
    Enumeration em = htSessionUser.elements();
    int i = 0;
    while (em.hasMoreElements()) {
      String sValue = (Stringem.nextElement();
      if (!sValue.equals(""))
        i++;
    }
    return i;
  }
}

由于时间的匆忙,很多的功能还没有实现,我会在以后的时间里继续的完善,使其功能更加的全面和更具有通用性。(更新中)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值