當前位置:
首頁 > 知識 > Servlet 點擊計數器

Servlet 點擊計數器

網頁點擊計數器

很多時候,您可能有興趣知道網站的某個特定頁面上的總點擊量。使用 Servlet 來計算這些點擊量是非常簡單的,因為一個 Servlet 的生命周期是由它運行所在的容器控制的。

以下是實現一個簡單的基於 Servlet 生命周期的網頁點擊計數器需要採取的步驟:

  • 在 init() 方法中初始化一個全局變數。

  • 每次調用 doGet() 或 doPost() 方法時,都增加全局變數。

  • 如果需要,您可以使用一個資料庫表來存儲全局變數的值在 destroy() 中。在下次初始化 Servlet 時,該值可在 init() 方法內被讀取。這一步是可選的。

  • 如果您只想對一個 session 會話計數一次頁面點擊,那麼請使用 isNew() 方法來檢查該 session 會話是否已點擊過相同頁面。這一步是可選的。

  • 您可以通過顯示全局計數器的值,來在網站上展示頁面的總點擊量。這一步是可選的。

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

Servlet 點擊計數器

實例

本實例演示了如何實現一個簡單的網頁點擊計數器:

package com.runoob.test;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/**
* Servlet implementation class PageHitCounter
*/@WebServlet("/PageHitCounter")public class PageHitCounter extends HttpServlet { private static final long serialVersionUID = 1L; private int hitCount;
public void init() { // 重置點擊計數器 hitCount = 0; }
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); // 增加 hitCount hitCount++; PrintWriter out = response.getWriter(); String title = "總點擊量"; String docType = "<!DOCTYPE html>
"; out.println(docType + "<html>
" + "<head><title>" + title + "</title></head>
" + "<body bgcolor="#f0f0f0">
" + "<h1 align="center">" + title + "</h1>
" + "<h2 align="center">" + hitCount + "</h2>
" + "</body></html>"); }
public void destroy() { // 這一步是可選的,但是如果需要,您可以把 hitCount 的值寫入到資料庫 } }

現在讓我們來編譯上面的 Servlet,並在 web.xml 文件中創建以下條目:

<?xml version="1.0" encoding="UTF-8"?><web-app>
<servlet>
<servlet-name>PageHitCounter</servlet-name>
<servlet-class>com.runoob.test.PageHitCounter</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PageHitCounter</servlet-name>
<url-pattern>/TomcatTest/PageHitCounter</url-pattern>
</servlet-mapping></web-app>

現在通過訪問 http://localhost:8080/TomcatTest/PageHitCounter 來調用這個 Servlet。這將會在每次頁面刷新時,把計數器的值增加 1,結果如下所示:


總點擊量

6

網站點擊計數器

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

以下是實現一個簡單的基於過濾器生命周期的網站點擊計數器需要採取的步驟:

  • 在過濾器的 init() 方法中初始化一個全局變數。

  • 每次調用 doFilter 方法時,都增加全局變數。

  • 如果需要,您可以在過濾器的 destroy() 中使用一個資料庫表來存儲全局變數的值。在下次初始化過濾器時,該值可在 init() 方法內被讀取, 這一步是可選的。

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

實例

本實例演示了如何實現一個簡單的網站點擊計數器:

// 導入必需的 java 庫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{
// 重置點擊計數器
hitCount = 0;
}
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws java.io.IOException, ServletException {
// 把計數器的值增加 1
hitCount++;
// 輸出計數器
System.out.println("網站訪問統計:"+ hitCount );
// 把請求傳回到過濾器鏈
chain.doFilter(request,response);
}
public void destroy()
{
// 這一步是可選的,但是如果需要,您可以把 hitCount 的值寫入到資料庫
} }

現在讓我們來編譯上面的 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>
....

現在訪問網站的任意頁面,比如 http://localhost:8080/。這將會在每次任意頁面被點擊時,把計數器的值增加 1,它會在日誌中顯示以下消息:

網站訪問統計: 1網站訪問統計: 2網站訪問統計: 3網站訪問統計: 4網站訪問統計: 5..................

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

Servlet 實例
Shell test 命令

TAG:程序員小新人學習 |