/* * 系统名称: * * 文件名称: org.quickbundle.tools.helper --> RmVisitSumTextHelper.java * * 功能描述: * * 版本历史: * 2006-4-17 22:06:24 创建1.0.0版 (Administrator) * */ package org.quickbundle.tools.support.visitsum; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.OutputStream; import java.sql.Timestamp; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Properties; import java.util.Set; import javax.servlet.http.HttpServletRequest; import org.quickbundle.tools.support.path.RmPathHelper; /** * 功能、用途、现存BUG: * * @author 白小勇 * @version 1.0.0 * @see 需要参见的其它类 * @since 1.0.0 */ public class RmVisitSumTextHelper { /** * 构造函数: * */ public RmVisitSumTextHelper() { } /** * visitSum 表示: 访问量 */ private static long visitSum = 0; private static int step = 0; private static int maxSessionSum = 0; private static Set<String> sSessionId = null; private static List<String> lSessionId = null; private static String visitSumPropertyPath = RmPathHelper.getWebInfDir() + File.separator + "config" + File.separator + "rm" + File.separator + "visitSum.properties"; /** * isInit 表示: 标识是否被初始化 */ private static boolean isInit = false; /** * 功能: 初始化访问量 * * @param request */ private static synchronized void initData() { try { Properties properties = new Properties(); // 文件位置:当前package properties.load(new FileInputStream(visitSumPropertyPath)); visitSum = Long.parseLong(properties.getProperty("visitSum")); step = Integer.parseInt(properties.getProperty("step")); maxSessionSum = Integer.parseInt(properties.getProperty("maxSessionSum")); sSessionId = new HashSet<String>(); lSessionId = new ArrayList<String>(); } catch (Exception e) { e.printStackTrace(); } } /** * 功能: 保存访问量 * * @param request */ private static synchronized void saveData() { try { Properties properties = new Properties(); properties.load(new FileInputStream(visitSumPropertyPath)); properties.setProperty("visitSum", String.valueOf(visitSum)); properties.setProperty("step", String.valueOf(step)); OutputStream os = new FileOutputStream(visitSumPropertyPath); properties.store(os, new Timestamp(System.currentTimeMillis()).toString()); } catch (Exception e) { e.printStackTrace(); } } /** * 功能: 计数器加1 * * @param request */ public static long increaseVisitSum() { if (!isInit) { initData(); isInit = true; } visitSum++; if (step > 0 && visitSum % step == 0) { try { saveData(); } catch (Exception e) { e.printStackTrace(); } } return visitSum; } /** * 功能: 对Session判断 * * @param request */ public static long increaseVisitSum(HttpServletRequest request) { try { if (!isInit) { initData(); isInit = true; } if(!sSessionId.contains(request.getSession(true).getId())) { if(sSessionId.size() >= maxSessionSum) { sSessionId.remove(lSessionId.get(0)); lSessionId.remove(0); } sSessionId.add(request.getSession(true).getId()); lSessionId.add(request.getSession(true).getId()); visitSum++; if (step > 0 && visitSum % step == 0) { try { saveData(); } catch (Exception e) { e.printStackTrace(); } } } } catch (Exception e) { e.printStackTrace(); } return visitSum; } public static void main(String[] args) { System.out.println(increaseVisitSum()); for (int i = 0; i < 50; i++) { increaseVisitSum(); } } }