java统计当前在线数
2024年03月08日
package com.hnedu.stat;/**
*计算在线人数,说明:
*
*在访问页面放入:
*com.hnedu.stat.OnlineCounter.addUser(Object object)
*一般用ip来作为object的传入值,当然,如果网站统计登陆在线人数,也可用用户名
*来作为object传入值。
*
*调用显示在线人数
*com.hnedu.stat.OnlineCounter.getOnlineCount()*
*
*com.hnedu.stat.OnlineCounter.getOnline()
*返回一个List,里面以String[]形式存放传入的object值和最后访问页面时间。
*by crazyren 2003-08-05 email:c_crazyren hotmail.com
*/
import java.util.List;
import java.util.ArrayList;
import javax.servlet.http.HttpSession;
public class OnlineCounter{
private static List list=new ArrayList();
private OnlineCounter(){
}
public static void addUser(Object object){
//得到用户当前访问时间
String nowtime=com.hnedu.util.StringUtils.getTime("mm:ss");
//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=0;i<list.size();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])>300){
list.remove(i);
}
}
//添加一个新的在线用户
list.add(str);
//释放资源
str=null;temp=null;
}
public static int getOnlineCount(){
//返回当前在线人数
return list.size();
}
public static List getOnline(){
return list;
}
/**计算两个时间差,返回相差秒数*/
private static int subTime(String src,String des){
int n=0;
java.util.Calendar ca=java.util.Calendar.getInstance();
long time1=
com.hnedu.util.StringUtils.compareStringTime(src,des,"mm:ss");
ca.setTimeInMillis(time1);
n=(ca.get(java.util.Calendar.MINUTE))*60;
n=n+ca.get(java.util.Calendar.SECOND);
return n;
}
}
引用的StringUtils里面的两个方法:
/**
*获得当前时间
* param parrten输出的时间格式
* return返回时间
*/
public static String getTime(String parrten)
{
String timestr;
if(parrten==null||parrten.equals(""))
{
parrten="yyyyMMddHHmmss";
}
java.text.SimpleDateFormat sdf=new SimpleDateFormat(parrten);
java.util.Date cday=new Date();
timestr=sdf.format(cday);
return timestr;
}
/**
*比较两个字符串时间的大小
* param t1时间1
* param t2时间2
* param parrten时间格式:yyyy-MM-dd
* return返回long=0相等,>0 t1>t2,<0 t1<t2
*/
public static long compareStringTime(String t1,String t2,String parrten)
{
SimpleDateFormat formatter=new SimpleDateFormat(parrten);
ParsePosition pos=new ParsePosition(0);
ParsePosition pos1=new ParsePosition(0);
Date dt1=formatter.parse(t1,pos);
Date dt2=formatter.parse(t2,pos1);
long l=dt1.getTime()-dt2.getTime();
return l;
}