java记录访问次数_Java 利用监听器来实现记录用户访问网站次数(示例代码)

假如有这么一个需求,要记录所有用户访问某一页面的次数。

最先想到的可能是在该Controller定义一个静态成员,然后在相应Action里自增。但这样有一个问题,就是Tomcat或者其他服务器重启的话,这个值是没办法保存的。

当然在数据库中直接保存也是可以的,但因此便要去单独建张表,日后用户访问相应页面都要去访问数据库维护该表有点不值得。

利用自定义ServletContextListener可以很方便做到这一点。思路如下:

1 、在 Web 应用启动时从文件中读取计数器的数值,并把表示计数器的 Counter 对象存放到 Web应用范围内。存放计数器的文件的路径为helloapp/count/count.txt 。

2 、在Web 应用终止时把Web 应用范围内的计数器的数值保存到count.txt 文件中。

public class MyServletContextListener implementsServletContextListener{public voidcontextInitialized(ServletContextEvent sce){

System.out.println("helloapp application is Initialized.");//获取 ServletContext 对象

ServletContext context=sce.getServletContext();try{//从文件中读取计数器的数值

BufferedReader reader=newBufferedReader(newInputStreamReader(context.

getResourceAsStream("/count/count.txt")));int count=Integer.parseInt(reader.readLine());

reader.close();//把计数器对象保存到 Web 应用范围

context.setAttribute("count",count);

}catch(IOException e) {

e.printStackTrace();

}

}public voidcontextDestroyed(ServletContextEvent sce){

System.out.println("helloapp application is Destroyed.");//获取 ServletContext 对象

ServletContext context=sce.getServletContext();//从 Web 应用范围获得计数器

int count=(int)context.getAttribute("count");if(count!=0){try{//把计数器的数值写到 count.txt 文件中

String filepath=context.getRealPath("/count");

filepath=filepath+"/count.txt";

PrintWriter pw=newPrintWriter(filepath);

pw.println(count);

pw.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

同时在web.xml文件中要配置

ServletContextTest.MyServletContextListener

通过ServletContext对象便能获取到保存的count值。


版权声明:本文为weixin_30621659原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。