javaEE如何统计日访问量和总访问量?

南林狼 2015-06-01 02:00:37
package com.space.model;

import java.text.SimpleDateFormat;
import java.util.Date;

public class Count {
private int totalCount;
private int todayCount;
private Date date = new Date();
private static Count instance = null;

public static Count getInstance() {
if (instance == null) {
instance = new Count();
}
return instance;
}

public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
public int getTodayCount() {
return todayCount;
}
public void setTodayCount(int todayCount) {
this.todayCount = todayCount;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}

public synchronized void addCount(Date date) {// 比较日期增加计数
if (new SimpleDateFormat("yyyy-MM-dd").format(this.getDate()).equals(
new SimpleDateFormat("yyyy-MM-dd").format(date))){
this.setTodayCount(this.getTodayCount() + 1);
}else{
this.setTodayCount(1);
}
this.setTotalCount(this.getTotalCount() + 1);
System.out.println("today->"+this.getTodayCount());
System.out.println("total->"+this.getTotalCount());
}
}

上面是我的Count类,封装了日访问量和总访问量两个数据
然后是过滤器:
HttpSession session = request.getSession();
ServletContext context = request.getServletContext();
Count count = null;
count = (Count) context.getAttribute("count");
if (null == count) {
count = Count.getInstance();
}
if(session.isNew())
count.addCount(new Date());
context.setAttribute("count", count);


但是我好像无法统计日访问量,日访问量总是和总访问量一样,我现在想做的是每次一到24:00,就将Count中的date变量置为new Date().但是不知道怎么做。
...全文
350 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
二十亩鱼 2015-06-02
  • 打赏
  • 举报
回复
引用 2 楼 ylovep 的回复:
登录就算一次 每个ip一天只能一次 第一次写进数据库
当访问量巨大的时候,写进数据库的这种方式,就不科学了; 无端增加了数据库的压力,而且这种存储访问量的活儿,交给硬盘,记录在文本里即可。 也可以在某一个时刻再一次性写进库里。
南林狼 2015-06-02
  • 打赏
  • 举报
回复
引用 5 楼 u010737972 的回复:
代码就不写了,提供一个思路给你,希望能用到,首先得到application会话对象,因为这个对象是对整个应用都起作用的,里面存储一个值(访问数量),每次访问就+1这样就避免了频繁的操作数据库,等到每天24:00整的时候,将这个数据存入数据库里,然后将application中的值初始化为0,第二天的话,还是一样,直接24:00累加存入到数据库中,然后将应用中的数据初始化为0即可,还有一点就是写个监听器,当web应用关闭的时候将当前applicaiton的数据保存起来,这样才不会因为服务器down掉而少纳入总数中。望采纳。
思路我都知道啊,只是代码实现的时候有点不知道如何处理。
我以为我会懂 2015-06-02
  • 打赏
  • 举报
回复
将Count中的date变量置为new Date() 一般没有这么做的,你可以用quartz 定时任务,设置每天0点的时候执行你的代码,剩下的 就可以参考5L的思路,不用application可以用本地内存的方式,如果访问量很大的话,也可以用 memcache
SUN丶XT 2015-06-02
  • 打赏
  • 举报
回复
代码就不写了,提供一个思路给你,希望能用到,首先得到application会话对象,因为这个对象是对整个应用都起作用的,里面存储一个值(访问数量),每次访问就+1这样就避免了频繁的操作数据库,等到每天24:00整的时候,将这个数据存入数据库里,然后将application中的值初始化为0,第二天的话,还是一样,直接24:00累加存入到数据库中,然后将应用中的数据初始化为0即可,还有一点就是写个监听器,当web应用关闭的时候将当前applicaiton的数据保存起来,这样才不会因为服务器down掉而少纳入总数中。望采纳。
a540464544 2015-06-02
  • 打赏
  • 举报
回复
用timer定时器
ylovep 2015-06-01
  • 打赏
  • 举报
回复
登录就算一次 每个ip一天只能一次 第一次写进数据库
cjh_tostring 2015-06-01
  • 打赏
  • 举报
回复
简单的方式,搞一个java.util.Timer定时器来定时更新时间就好了。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧