假如有这么一个需求,要记录所有用户访问某一页面的次数。
最先想到的可能是在该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.r