这个参考了csdn一个首页访问量的demo,在这个基础上进行了些并发修改,框架采用了spring,数据库sqlserver,当然任何数据库都可以,记得把包自己加进去,我这只有sqlserver和mysql的,oracle的自己加个包就行。
核心代码,很简单,Commons.count方法是得到一个静态的list,为了防止高并发下内存溢出,没有采集按照时间来提交,而采取的是访问5次commit,当然是为了测试方便,这个按照需求来。用ajax进行回调,先加载的首页,不影响首页的相应速度。
测试用的jmeter,并发线程1万访问还是可以的,并发1千相当轻松。
//保存当前访问记录 5条commit一次
try {
synchronized(Commons.count){
Commons.count.add(logBean);
if(Commons.count.size()==5){
logService.saveCommons(Commons.count);
Commons.count.clear();
}
}
//logService.saveLog(logBean); //这个是单个保存
} catch (Exception e) {
e.printStackTrace();
logger.error(e.getMessage());
}
jsp
<%@ page language="java" c>"text/html;" pageEncoding="utf-8" %><%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><html><head><basehref="<%=basePath%>"><title>index counttitle><metahttp-equiv="pragma"content="no-cache"><metahttp-equiv="cache-control"content="no-cache"><metahttp-equiv="expires"content="0"><metahttp-equiv="keywords"content="keyword1,keyword2,keyword3"><metahttp-equiv="description"content="This is my page"><scriptlanguage="javascript"src="jquery-2.1.4.min.js">script>head><body><div>这是个首页div><br><br><divid="count">div>body><scripttype="text/javascript">
$(function(){
$.ajax( {
url:'<%=basePath%>mst/CountServlet',// 跳转到 action
traditional: true,
type:'post',
success: function(data){var json=JSON.parse(data);
$("#count").append(" 本首页访问量为"
+json.counts+"人次");
}
});
})
script>html>
web.xml设置filter,我设置的这个过滤器只过滤首页的,根据需求可以定义需要过滤的页面。