java统计网站访问量

人数统计好说,因为,可已设置监听器,让其在服务器启动的时候进行监听,然后统计登录人数,但是统计在线人数,就麻烦点了,因为大多数人都不愿意点击注销按钮,直接关闭浏览器,这样session的关闭就麻烦了点,我先给出统计人数的代码,我想统计在线人数可以定时调用程序来统计,但是不是实时的,所以最大的障碍就是怎么在关闭浏览器的时候,就关闭session
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class ApplicationListener implements ServletContextListener{
public void contextDestroyed(ServletContextEvent arg0) {
  ServletContext sc = arg0.getServletContext();
  Integer count = (Integer) sc.getAttribute("AccessCount");
  try {
   PrintWriter out = new PrintWriter(new FileWriter("c:/Users/god/count.txt"));// 将人数保存到文本文件
   System.out.println("count:"+count);
   out.print(count);
   out.flush();
   out.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
}
public void contextInitialized(ServletContextEvent arg0) {
  Integer count = 0;
  ServletContext sc = arg0.getServletContext();
 
  try {
   Scanner in = new Scanner(new FileReader("c:/Users/god/count.txt"));// 读取已经产生的人数信息,然后进行累加
   count = in.nextInt();
   in.close();
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  }
  sc.setAttribute("AccessCount", count);
}
}

在web.xml文件里面进行设置
<listener>
  <listener-class>
   文件的位置也就是包名.ApplicationListener
  </listener-class>
</listener>

统计的时候是设置拦截器,需要在struts.xml中设置

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

@SuppressWarnings("serial")
public class AccessInterceptor implements Interceptor{
private String id;
public void destroy() {
 
}

public void init() {
 
}

@SuppressWarnings("unchecked")
public String intercept(ActionInvocation ai) throws Exception {
  ServletContext sc = ServletActionContext.getServletContext();
  HttpServletRequest request = ServletActionContext.getRequest();
  HttpSession session = request.getSession();
  if(!session.getId().equals(id)){
   Integer count = (Integer) sc.getAttribute("AccessCount");// 判断如果登录成功,统计数字自增
   sc.setAttribute("AccessCount", count+1);
   id = session.getId();
  }
  String result = ai.invoke();
  return result;
}

}





你可以直接挂一个google或者51的统计脚本;
你也可以使用日志的方式来记录访问量,一般不要往数据库来;通过分析log即可;

回答者: ustbduanhang - 九级   2009-8-31 09:33

可以提供一些思路给你:

【网站级访问量】

一、  ServletContext  中存放一个计数器(Integer 也可)

    ServletRequestListener.requestInitialized(ServletRequestEvent sre)
    计数器++

二、  Filter 中使用 静态变量 进行统计。

【页面级访问量】

一、  Servlet 或 Action  中使用 静态变量 进行统计。

二、  Filter 中使用 静态变量 进行统计。

【网站在线人数】

  ServletContext  中存放一个计数器(Integer 也可)或 其他类中使用一个 静态变量

登录时:session.setAttribute("wangyf", "***")   计数器++

HttpSessionListener
      sessionDestroyed(HttpSessionEvent se)  {
          session.getAttribute("wangyf") != null   计数器--
      }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值