javaweb 在线人数统计

package org.login.actions;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import   java.util.List; 
import   java.util.ArrayList; 

import javax.servlet.http.HttpSession;

/** 
  *   计算在线人数,说明: 
  * 
  *   在访问页面放入: 
  *   OnlineCounter.addUser(Object   object) 
  *   一般用ip来作为object的传入值,统计登陆在线人数,也可用用户名 
  *   来作为object传入值。 
  * 
  *   调用显示在线人数 
  *   OnlineCounter.getOnlineCount()   * 
  * 
  *   返回一个List,里面以String[]形式存放传入的object值和最后访问页面时间。 
  *   OnlineCounter.getOnline() 
  *   
  */
@SuppressWarnings("unused")
public   class   OnlineCounter   { 
    private   static   List<String[]>   list   =   new   ArrayList<String[]>(); 

    private   OnlineCounter()   { 
    } 
    public   static   void   addUser(Object   object)   {
        //得到用户当前访问时间
    	SimpleDateFormat sm = new SimpleDateFormat("yyyy-MM-dd   HH:mm:ss");
    	String   nowtime   = sm.format( new Date());
        //Str数组用来存放用户得ip和访问时间 
        String[]   str   =   new   String[2]; 
        str[0]   =   object.toString(); 
        str[1]   =   nowtime; 

        //temp数组用来临时存放从list里面取出的用户ip和访问时间 
        String[]   temp   =   new   String[2]; 

        //循环list 
        for   (int   i   =   list.size()-1;   i   >=   0;   i--)   { 
            temp   =   (String[])list.get(i); 
            //如果从list里面取出的用户ip和str里面存放的ip相同,则更新访问时间 
            if(temp[0].equals(str[0]))   { 
                list.set(i,str); 
                return; 
            } 
            //如果用户超过5分钟没有访问,则认为不在线 
            if(subTime(nowtime,temp[1])   >   60)   { 
                list.remove(i); 
        }}
        //添加一个新的在线用户 
        list.add(str); 
        //释放资源 
        str   =   null;temp   =   null; 
    } 
    public   static   int   getOnlineCount()   { 
        //返回当前在线人数 
        return   list.size(); 
    } 

    public   static   List<String[]>   getOnline()   { 
        return   list; 
    } 

    private static long getLongDate(String date){
    	date = date.replace("-", "").replace(" ", "").replace(":", "");
    		
		return Long.parseLong(date);
    	
    }

    private   static   long   subTime(String   src,String   des)   {
        int   n   =   0; 
        java.util.Calendar   ca   =   java.util.Calendar.getInstance(); 
        long   time1   = getLongDate(src)-getLongDate(des); 
        return   time1; 
    } 

} 

 还有一个问题, 就是在不进行超时功能时 不知道如何解决用户已经退出的问题!

你可能感兴趣的:(java,session,人数统计)