1、使用Mysql 实现简单的访问量统计,统计年、月、日统计量。
http://www.iteye.com/problems/14718
有一个方法可以一步到位进行查询。但限于在mysql上,使用BIT_COUNT函数。 下面给一个示例,资料来自互联网。 建表语句: DROP DATABASE IF EXISTS `test`; CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `test`; # # Table structure for table t1 # CREATE TABLE `t1` ( `year` year(4) default NULL, `month` int(2) unsigned zerofill default NULL, `day` int(2) unsigned zerofill default NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 查询语句: select year, month, BIT_COUNT(BIT_OR(1<<day)) as days from t1 group by year, month; 即按年月日自动统计并分组。
2、使用过滤器
http://zhidao.baidu.com/question/130322471.html
写一个filter,对每个请求都作处理, 在数据库创建今日访问量、总访问量和今日时间等字段, 如果根据IP来判断,那还要有一个表记录IP, 进入filter后->获取客户端IP->查询是否存在->存在访问量不加,不存在就加1,还可以限定每个IP一天一次或是一周一次什么的。。。 filter在网上找最简单的例子就行了,在doFilter里写 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req=(HttpServletRequest) request; HttpSession session=req.getSession(); String ip=客户端IP; 从数据库查IP是否存在; if(不存在){ 今日访问量和总访问量加1; if(今日时间不是当前时间){ 今日时间变为当前时间; } } long todayVisit=今日访问量(从数据库查); long totalVisit=总访问量; session.setAttribute("todayVisit", todayVisit); session.setAttribute("totalVisit", totalVisit); chain.doFilter(req, response); } 然后在jsp页面里 今日访问量为:${todayVisit},总访问量为:${totalVisit}
3、后台计数
由于服务器和客户端在交互中维持一个Session。当用户第一次进行一个请求时,服务器端创建一个Session,此时在Session中创建一个属性,类似是一个计数的Flag,然后进行计数,存入数据库,然后将Flag设置成已计数,作为一次访问。之后客户端只要在同一个Session中进行操作,由于Flag为已计数,故不再计数,除非在另外的Session中,则将作为另一次访问。这种方法实现比较简单,不过对于多并发的情况,需要考虑对数据库中同一个字段频繁操作时另外处理。