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

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

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

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

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

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

  

public class MyServletContextListener implements ServletContextListener{  

  public void contextInitialized(ServletContextEvent sce){  

    System.out.println("helloapp application is Initialized.");  

    // 获取 ServletContext 对象  

    ServletContext context=sce.getServletContext();  

    try{  

       // 从文件中读取计数器的数值  

       BufferedReader reader=new BufferedReader(  

           new InputStreamReader(context.  

           getResourceAsStream("/count/count.txt")));  

       int count=Integer.parseInt(reader.readLine());  

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

       context.setAttribute("count",count);  

       } catch(IOException e) {  

          e.printStackTrace();  

       }  

   }  

   public void contextDestroyed(ServletContextEvent sce){  

       System.out.println("helloapp application is Destroyed.");  

       // 获取 ServletContext 对象  

       ServletContext context=sce.getServletContext();  

       // 从 Web 应用范围获得计数器 

       int count=(int)context.getAttribute("count");  

       if(count!=){  

       try{  

          // 把计数器的数值写到 count.txt 文件中  

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

          filepath=filepath+"/count.txt";  

          PrintWriter pw=new PrintWriter(filepath);  

          pw.println(count);  

          pw.close();  

         } catch(IOException e) {  

             e.printStackTrace();  

         }  

     }  

   }  

}   

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

<listener>
<listener-class> ServletContextTest.MyServletContextListener<listener-class />
</listener>

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

Java 利用监听器来实现记录用户访问网站次数的更多相关文章

  1. 利用Spring AOP切面对用户访问进行监控

    开发系统时往往需要考虑记录用户访问系统查询了那些数据.进行了什么操作,尤其是访问重要的数据和执行重要的操作的时候将数记录下来尤显的有意义.有了这些用户行为数据,事后可以以用户为条件对用户在系统的访问和 ...

  2. SpringMVC拦截器实现:当用户访问网站资源时,监听session是否过期

    SpringMVC拦截器实现:当用户访问网站资源时,监听session是否过期 一.拦截器配置 <mvc:interceptors> <mvc:interceptor> < ...

  3. 从用户访问网站流程开始,细说web网络基础

    1.用户访问网站流程框架 2.dns解析原理 3.tcp/ip三次握手过程原理,11种连接状态 4.tcp/ip四次挥手过程原理,11种连接状态 5.http协议原理(www服务的请求过程)请求细节, ...

  4. js记录用户访问页面和停留时间

    1.setInterval setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式. setInterval(code,millisec[,"lang" ...

  5. Java利用jcifs集成AD域用户认证

    近期一段时间发现AD这东西老火了,尤其是涉及到安全这一方面的,所以AD域用户认证成了如今网络安全方面的产品必备!这里就简单的分享一下,Java通过jcifs集成AD域用户实现认证,以实现网络安全! 我 ...

  6. js记录用户在网站的浏览记录和停留时间

    by weber开发者 from http://weber.pub/ 本文地址: http://weber.pub/js记录用户行为浏览记录和停留时间/163.html 问题 公司想统计一个用户从进入 ...

  7. 禁止 一些地区的ip用户访问 网站

    01 framework.php 中 获取请求的ip地址.保存为常量 define('IP', request::get_clientip()); 02 setting表中.属于system模块,保存 ...

  8. 用jsp的application写一个记录用户登陆网站的数量

    </head><body><%int i = 0;Object number = application.getAttribute("num");if ...

  9. Nginx记录用户请求Header到access log

    为了统计和其它用途,经常有人需要自定义Nginx日志,把http请求中的某个字段记录到日志中,刚好在看lua+nginx的文章,第一想到的是用lua赋值来做,但是想想有点小恶心,于是Google了一番 ...

随机推荐

  1. php if语句判定ms查询是否为空

    $select_re_id=$cnx->query("select count(*) c from Yid where pid='".$pid."' and gid ...

  2. python爬虫<urlopen error [Errno 10061] >

    在网上看了十几篇文章,都是说的是IE的代理设置,具体是: Tools->Internet Options->Connections->Lan Settings 将代理服务器的小勾勾去 ...

  3. GitHub搭建个人网站续

    来源:http://www.cnblogs.com/crazyacking/p/4678976.html http://www.cnblogs.com/crazyacking/category/716 ...

  4. 浅谈Spring(一)

    Spring 框架是一个分层架构,由 7 个定义良好的模块组成.Spring 模块构建在核心容器之上,核心容器定义了创建.配置和管理 bean 的方式. watermark/2/text/aHR0cD ...

  5. 列表框清屏/CListBox清空

    CListBox自带方法: MyListBox->ResetContent(); CListBox用法: 关联一个变量m_List,m_List.AddString("test&quo ...

  6. [转]VC++下使用ADO操作数据库

    (1).引入ADO类 1 2 3 #import "c:program filescommon filessystemadomsado15.dll" no_namespace re ...

  7. Github Pages建立个人博客

    使用Github Pages可以建立个人博客.官方教程:https://pages.github.com/步骤(以下步骤中假设用户名为username):1.建立一个项目,项目名为username.g ...

  8. 84、PullToRefresh使用详解

    PullToRefresh使用详解(一)--构建下拉刷新的listView http://blog.csdn.net/harvic880925/article/details/17680305 Pul ...

  9. Java反序列化漏洞的挖掘、攻击与防御

    一.Java反序列化漏洞的挖掘 1.黑盒流量分析: 在Java反序列化传送的包中,一般有两种传送方式,在TCP报文中,一般二进制流方式传输,在HTTP报文中,则大多以base64传输.因而在流量中有一 ...

  10. Tomcat Server启动报错:Multiple Contexts have a path of "/east".

    原因是 conf/server.xml 文件中多了一个<Context></Context>标签,路径有重复,把他删掉就好了.