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

  最先想到的可能是在该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. Could not contact Selenium Server; have you started it on 'localhost:4444'

    今天学习selenium RC例子的时候遇到一个问题:java.lang.RuntimeException: Could not contact Selenium Server; have you s ...

  2. 经典SQL面试题(转)

    http://www.cnblogs.com/kcher90/archive/2013/03/13/2957932.html 有三个表,如果学生缺考,那么在成绩表中就不存在这个学生的这门课程成绩的记录 ...

  3. v8随心记

    因为node原因,研究v8已经有段时间了,但是一直也没有抽空写点什么,现在想想有好多当时清晰的东西又模糊了.哎,伤心的很啊.但是一时又想不起什么章法,所以只能随手胡乱写了. 下载.编译: https: ...

  4. django头像上传详解

    使用form组件上传头像 实现的效果如下: 将默认的上传文件框隐藏起来变成了一个默认的头像 而且可以点击上传 处理步骤 avatar = forms.FileField( widget = widge ...

  5. WPF InitializeComponent() 方法介绍

    namespace WindowsApplication1 { /// <summary> /// Interaction logic for Window1.xaml /// </ ...

  6. Eclipse导入MyEclipseproject(web项目显示为java项目解决的方法)

    在直接Import MyEclipse的项目文件导入到Eclipse之后,须要在项目所放的workspace内改动引入项目文件夹下的.project文件,改动例如以下: 1.在eclipse中新建一个 ...

  7. shrink-to-fit(自适应宽度)

    自适应宽度是指当未明白设定容器的宽度(或外边距设为auto)时,在特定的情况下容器的宽度会依据情况自行设定.而设定的结果往往并非我们想要的. W3C规范中描写叙述了几种shrink-to-fit的情况 ...

  8. 自定义控件_水平滑动的View 自定义属性

    保持饥饿,保持愚蠢,我们对待事情本来应该就是这样的 接下来我要写一个水平滑动的自写义,实现效果 水平滑动我们有很多种实现方法,recyceryView,HorizontalScrollView都可以, ...

  9. 5个基于Linux命令行的文件下载和网站浏览工具

    导读 命令行是GNU/Linux中最神奇迷人的部分,它是非常强大的工具;命令行本身功能多样,多种内建或者第三方的命令行应用使得Linux变得更加健壮和强大.Linux Shell支持多种不同类型的网络 ...

  10. ipad4没有声音提示消息

    打开『设置』-『通用』-侧边开关用于: 1:锁定屏幕旋转 2:静音 √ 把对号去掉 选择1即可