Java 利用监听器来实现记录用户访问网站次数

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

  最先想到的可能是在该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!=0){  

       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值。

时间: 2024-10-11 00:26:51

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

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

最近一段时间发现AD这东西老火了,尤其是涉及到安全这一方面的,所以AD域用户认证成了现在网络安全方面的产品必备!这里就简单的分享一下,Java通过jcifs集成AD域用户实现认证,以实现网络安全! 我们通过一个demo来看看jcifs实现SSO,SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同一 个用户的登录的机制.它是目前比较流行的企业业务整合的解决方案之一. 第

云时代来临,快速利用CDN服务为海外用户访问国内网站加速

云时代,如何利用CDN服务为海外用户访问国内网站加速 本文Blog地址:http://www.cnblogs.com/taosha/p/6760079.html,您可以自由转载,请保留出处,谢谢配合! 众所周知,海外用户访问国内网站速度都不尽人意,主要原因是地理距离比较远,中国到海外的Internet出口带宽有限且中间还隔着"长城防火墙".那我们有什么办法可以来加速海外用户对国内网站的访问速度么?答案就是CDN服务.本文主要就是介绍CDN服务提高海外客户访问国内网站的加速原理,海外CD

老男孩教育每日一题-2017年3月22日:请说明用户访问网站流程

本题目也可以说为: 描述从浏览器打开http://www.oldboyedu.com地址回车发送请求到看到页面的过程? 打开浏览器输入网址回车,到看到页面的过程 大纲: 1.用户访问网站流程框架 2.DNS解析原理 ***** 3.tcp/ip三次握手原理 ***** 4.http协议原理(www服务的请求过程)请求报文细节! 5.大规模网站集群架构细节. 6.http协议原理(www服务的响应过程)响应报文细节! 7.tcp/ip四次挥手过程原理 ***** , 当我们打开浏览器输入网址回车,

用户访问网站的流程

请说明用户访问网站流程 2017-04-10 16:25:17 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://lidao.blog.51cto.com/3388056/1914578 本题目也可以说为: 描述从浏览器打开http://www.oldboyedu.com地址回车发送请求到看到页面的过程? 打开浏览器输入网址回车,到看到页面的过程 大纲: 1.用户访问网站流程框架 2.DNS解析原理 ***** 3.tcp/ip

简单介绍用户访问网站基本流程

第一步:客户端用户从浏览器输入www.baidu.com网站网址后回车,系统会查询本地hosts文件及DNS缓存信息,查找是否存在网址对应的IP解析记录.如果有就直接获取到IP地址,然后访问网站,一般第一次请求时,DNS缓存是没有解析记录的: 第二步:如果客户端没有DNS缓存或hosts没有对应www.baidu.com网站网址的域名解析记录,那么,系统会把浏览器的解析请求,交给客户端本地设置的DNS服务器地址解析(此DNS为LDNS,即Local DNS),如果LDNS服务器的本地缓存有对应的

js记录用户在网站的浏览记录和停留时间(2)

问题:上次的代码确实解决了一部分用户访问记录的收集,但是还是存在一个问题就是 我们网站的注册 都是新页面打开的,如果用户刚进入网站就点击注册(打开了新的页面) ,我代码里用到的 onbeforeunload 就无法将用户进入的页面存储到本地了,也就是导致 访问了网站 直接点击注册的用户 无法被记录.所以这次对数据的记录方式做了拆分. 这个是上一次文章的链接:http://weber.pub/js记录用户行为浏览记录和停留时间/163.html 思路 当用户进入网站,页面加载完成的时候执行 win

用户访问网站的完整流程

在浏览器输入想要访问的域名之后,浏览器会进行域名解析获得IP地址,在经过TCP的连接,实现数据的传输就会有两种报文,及请求报文和响应报文.最终才能实现通信.因此想要实现通信,就得先弄懂DNS的解析原理以及TCP连接通道的流程. 理论内容: 1.DNS的介绍以及原理 2.TCP/IP协议的介绍和三次握手及四次挥手 3.HTTP协议的介绍及请求与响应报文 4.用户访问浏览器的完整过程 1.DNS的介绍及解析原理 1)说说DNS是什么: DNS(Domain Name System,域名系统),因特网

用户访问网站基本流程

1:用户访问www.baidu.com这个网站,系统会首先查看DNS缓存或hosts文件信息,确定是否存在域名对应的IP解析记录,如果有就直接获取IP地址.一般第一次请求时,DNS缓存是没有记录的,而hosts文件一般多在内部测试使用. 2:如果客户端本地hosts的文件或DNS缓存没有对应的解析记录,则系统会将解析请求发送给LDNS(local DNS)服务器,如果LDNS服务器本地缓存有对应的解析记录就会直接返回IP地址给客户端.如果没有,LDNS会负责继续请求给其它的DNS服务器 3:LD

用户访问网站的基本流程

用户从浏览器里输入网站地址,到看到网站的完整流程: 第一步:用户在浏览器输入https://ke.qq.com/course/28714 网站地址,回车会,系统首先会查询本地的DNS缓存及hosts文件信息,确定是否需存在https://ke.qq.com/course/28714 对应的IP解析记录,如果有就直接获取地址,然后去访问这个IP对应的域名www.ke.qq.com的服务器并找到https://ke.qq.com/course/28714. 第二步:如果客户端本地DNS缓存及host