當前位置:首頁 » Servlets » Servlet點擊計數器

Servlet點擊計數器

Servlets點擊計數器實例代碼教學 - 這是非常簡單的使用servlet來計算這些點擊,因為一個servlet的生命周期是由容器在它運行的。

網頁點擊計數器

很多時候,你有興趣知道網站的某個特定頁麵上的總點擊次數。這是非常簡單的使用servlet來計算這些點擊,因為一個servlet的生命周期是由容器在它運行的。

以下是實現一個簡單的頁麵計數器采取的步驟,這是基於Servlet的生命周期:

  • 在init()方法中初始化的全局變量

  • 無論是doGet()或doPost()方法被每次調用都增加全局變量。

  • 如果需要,您可以使用一個數據庫表來存儲全局變量的值在destroy()。在init()方法裡可以被讀取當servlet在下一次初始化,一步是可選的。

  • 如果你想在一個會話中隻有唯一的頁麵點擊數,那麼你可以使用isNew()方法來檢查,如果同一個頁麵在該會話已經被點擊,一步是可選的。

  • 您可以在網站上,顯示值的全局計數器顯示的總點擊量。此步驟也是可選的。

在這裡,我假設的Web容器將無法重新啟動。如果是重新啟動或servlet銷毀,計數器將被重置。

例子:

這個例子展示了如何實現一個簡單的頁麵計數器:

import java.io.*;
import java.sql.Date;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class PageHitCounter extends HttpServlet{
    
  private int hitCount; 
               
  public void init() 
  { 
     // Reset hit counter.
     hitCount = 0;
  } 

  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // Set response content type
      response.setContentType("text/html");
      // This method executes whenever the servlet is hit 
      // increment hitCount - by www.gitbook.net
      hitCount++; 
      PrintWriter out = response.getWriter();
      String title = "Total Number of Hits";
      String docType =
      "<!doctype html public \"-//w3c//dtd html 4.0 " +
      "transitional//en\">\n";
      out.println(docType +
        "<html>\n" +
        "<head><title>" + title + "</title></head>\n" +
        "<body bgcolor=\"#f0f0f0\">\n" +
        "<h1 align=\"center\">" + title + "</h1>\n" +
        "<h2 align=\"center\">" + hitCount + "</h2>\n" +
        "</body></html>");

  }
  public void destroy() 
  { 
      // This is optional step but if you like you
      // can write hitCount value in your database.
  } 
} 

現在讓我們來編譯上麵的servlet在web.xml文件中創建以下條目

....
 <servlet>
     <servlet-name>PageHitCounter</servlet-name>
     <servlet-class>PageHitCounter</servlet-class>
 </servlet>

 <servlet-mapping>
     <servlet-name>PageHitCounter</servlet-name>
     <url-pattern>/PageHitCounter</url-pattern>
 </servlet-mapping>
....

現在調用該servlet,使用URL http://localhost:8080/PageHitCounter的。這將增加一個計數器,每次這個頁麵被刷新,它會顯示下麵的結果:

Total Number of Hits

6

網站計數器:

很多時候,你有興趣知道在你的整個網站的總點擊次數。在Servlet,這也是很簡單的,我們可以使用過濾器做到這一點。

以下是應采取的步驟,以實現一個簡單的網站計數器,這是基於過濾器的生命周期:

  • 在init()方法的過濾器初始化的全局變量。

  • 每一次doFilter方法被調用增加全局變量

  • 如果需要,您可以使用一個數據庫表來存儲全局變量的值在destroy()方法的過濾器。這個值可以讀取裡麵init() 方法時,過濾器將被初始化的時間。這一步是可選的。 

在這裡,我假設的Web容器將無法重新啟動。如果是重新啟動,或servlet銷毀,計數器將被重置。

例子:

這個例子展示了如何實現一個簡單的網站計數器:

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

public class SiteHitCounter implements Filter{
    
  private int hitCount; 
               
  public void  init(FilterConfig config) 
                    throws ServletException{
     // Reset hit counter.
     hitCount = 0;
  }

  public void  doFilter(ServletRequest request, 
              ServletResponse response,
              FilterChain chain) 
              throws java.io.IOException, ServletException {

      // increase counter by one
      hitCount++;

      // Print the counter.
      System.out.println("Site visits count :"+ hitCount );

      // Pass request back down the filter chain
      chain.doFilter(request,response);
  }
  public void destroy() 
  { 
      // This is optional step but if you like you
      // can write hitCount value in your database.
  } 
} 

現在讓我們來編譯上麵的servlet在web.xml文件中創建以下條目

....
<filter>
   <filter-name>SiteHitCounter</filter-name>
   <filter-class>SiteHitCounter</filter-class>
</filter>

<filter-mapping>
   <filter-name>SiteHitCounter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

....

現在,調用任何URL,如URL輸入http://localhost:8080/。這會增加一個計數器每次任何頁麵被點擊,它會在日誌中顯示以下消息:

Site visits count : 1
Site visits count : 2
Site visits count : 3
Site visits count : 4
Site visits count : 5
..................