Java 利用監聽器來實現記錄用戶訪問網站次數

  假若有這麼一個需求,要記錄全部用戶訪問某一頁面的次數。web

  最早想到的多是在該Controller定義一個靜態成員,而後在相應Action裏自增。但這樣有一個問題,就是Tomcat或者其餘服務器重啓的話,這個值是沒辦法保存的。數據庫

  固然在數據庫中直接保存也是能夠的,但所以便要去單獨建張表,往後用戶訪問相應頁面都要去訪問數據庫維護該表有點不值得。服務器

  利用自定義ServletContextListener能夠很方便作到這一點。思路以下:app

      1 、在 Web 應用啓動時從文件中讀取計數器的數值,並把表示計數器的 Counter 對象存放到 Web應用範圍內。存放計數器的文件的路徑爲helloapp/count/count.txt 。spa

      2 、在Web 應用終止時把Web 應用範圍內的計數器的數值保存到count.txt 文件中。code

  

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文件中要配置xml

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

經過ServletContext對象便能獲取到保存的count值。對象

相關文章
相關標籤/搜索