カウンターサーブレットをヒット
ページのヒットカウンタ
多くの場合、あなたのサイトの特定のページのクリックの総量を知って興味があるかもしれません。 サーブレットの使用は、ライフサイクルは、それが制御を実行作られたサーブレットコンテナであるため、これらのクリックは、非常に単純です計算します。
以下は取るべき単純なサーブレットのライフサイクルページヒットカウンタステップの認識に基づいています:
- init()メソッドでグローバル変数を初期化します。
- それぞれがdoGet()またはdoPost()メソッドを呼び出して、我々はグローバル変数が増加しています。
- ()必要に応じて、破壊するグローバル変数の値を格納するデータベーステーブルを使用することができます。 次の初期化のサーブレットでは、この値は、init()メソッドで読み取ることができます。 このステップはオプションです。
- あなたは、セッション数ページヒット一度セッションをしたい場合は、セッションの会話が同じページ上でクリックされたかどうかを確認するためにISNEW()メソッドを使用します。 このステップはオプションです。
- あなたは、サイト上の総トラフィックのページを表示するには、カウンタのグローバル値を表示することができます。 このステップはオプションです。
ここでは、Webコンテナが再起動できないことを前提としています。 再起動またはサーブレットが破壊された場合、カウンタはリセットされます。
例
この例では、単純なページのヒットカウンタを実装する方法を示しています。
package com.w3big.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> \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() { // 这一步是可选的,但是如果需要,您可以把 hitCount 的值写入到数据库 } }
それでは、上記のサーブレットをコンパイルし、web.xmlファイルに次のエントリを作成してみましょう:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <servlet-name>PageHitCounter</servlet-name> <servlet-class>com.w3big.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を呼び出します。 次のようにこれは、カウンタ1の値を大きくするために、ページを毎回更新され、結果は次のとおりです。
総ヒット件数6 |
ウェブサイトのヒットカウンタ
多くの場合、あなたはサイト全体の総トラフィックを知って興味があるかもしれません。 サーブレットでは、これは非常に簡単です、我々はこれを行うには、フィルタを使用することができます。
以下は、単純なフィルタベースのライフサイクルのWebサイト取られるヒットカウンタのステップを実装することです:
- ()メソッドは、グローバル変数、フィルタのinitを初期化します。
- 各コールのdoFilterメソッドは、グローバル変数が増加しています。
- 必要に応じて、値を格納するグローバル変数を破壊するフィルタでデータベーステーブルを()を使用することができます。 値は、init()メソッドで読み取ることができ、フィルタの次の初期化は、このステップはオプションです。
ここでは、Webコンテナが再起動できないことを前提としています。 再起動またはサーブレットが破壊された場合、ヒットカウンタがリセットされます。
例
この例では、簡単なサイトのヒットカウンタを実装する方法を示しています。
// 导入必需的 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 的值写入到数据库 } }
それでは、上記のサーブレットをコンパイルし、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 ..................