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; str = object.toString(); str = nowtime; //temp数组用来临时存放从list里面取出的用户ip和访问时间 String[] temp = new String; //循环list for (int i = list.size()-1; i >= 0; i--) { temp = (String[])list.get(i); //如果从list里面取出的用户ip和str里面存放的ip相同,则更新访问时间 if(temp.equals(str)) { list.set(i,str); return; } //如果用户超过5分钟没有访问,则认为不在线 if(subTime(nowtime,temp) > 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; } } 还有一个问题, 就是在不进行超时功能时 不知道如何解决用户已经退出的问题!
页:
[1]