JSP页面中实现网站访问量统计

时间:2024-04-16 21:13:53

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中,则将作为另一次访问。这种方法实现比较简单,不过对于多并发的情况,需要考虑对数据库中同一个字段频繁操作时另外处理。