java(简单的网站流量统计)过滤器 监听器 配置

本文介绍了一个基于Java的网站访问统计系统实现方案,通过应用监听器和拦截器记录并统计网站访问次数。具体包括使用ApplicationListener在应用程序启动和关闭时读取和保存访问计数,以及AccessInterceptor在每次请求时更新计数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

监听器
/**
* @author 作者: zhujiang
* @version 创建时间:2010-5-17 上午10:25:33
* 类说明
*/
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;

import org.apache.log4j.Logger;

public class ApplicationListener implements ServletContextListener {
private static final Logger logger = Logger.getLogger(ApplicationListener.class);
public void contextDestroyed(ServletContextEvent arg0) {
ServletContext sc = arg0.getServletContext();
Integer count = (Integer) sc.getAttribute("AccessCount");
try {
PrintWriter out = new PrintWriter(new FileWriter("c:/count.txt"));// 将人数保存到文本文件
System.out.println("count:" + count);
logger.error("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:/count.txt"));// 读取已经产生的人数信息,然后进行累加
count = in.nextInt();
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
sc.setAttribute("AccessCount", count);
}
}


//过滤器
/**
* @author 作者: zhujiang
* @version 创建时间:2010-5-17 上午10:29:45
* 类说明
*/
import java.io.FileWriter;
import java.io.PrintWriter;

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

import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;

import com.duanqu.wap.action.booklt.BookltAction;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

@SuppressWarnings("serial")
public class AccessInterceptor implements Interceptor {
private static final Logger logger = Logger.getLogger(AccessInterceptor.class);
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);
PrintWriter out = new PrintWriter(new FileWriter("c:/count.txt"));// 将人数保存到文本文件
logger.error("AccessCount:"+count);
id = session.getId();
logger.error("id:"+id);
System.out.println("count:" + count);
logger.error("count:"+count);
out.print(count);
out.flush();
out.close();
}
String result = ai.invoke();
return result;
}

}



struts配置过滤器
<interceptor name="accInter"
class="com.duanqu.common.AccessInterceptor" />
配置于Action配置中
<interceptor-ref name="accInter">
<param name="includeMethods">*</param>
</interceptor-ref>
<interceptor-ref name ="defaultStack" />

web.xml 监听
<listener>
<listener-class>
com.duanqu.common.ApplicationListener
</listener-class>
</listener>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值