欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Servlet實(shí)現(xiàn)點(diǎn)擊計(jì)數(shù)器的方法

 更新時(shí)間:2017年08月28日 09:55:44   作者:EasonJim  
這篇文章主要介紹了Servlet實(shí)現(xiàn)點(diǎn)擊計(jì)數(shù)器的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

一、Web頁(yè)面的點(diǎn)擊計(jì)數(shù)器

很多時(shí)候,可能有興趣知道網(wǎng)站的某個(gè)特定頁(yè)面上的總點(diǎn)擊量。使用Servlet來(lái)計(jì)算這些點(diǎn)擊量是非常簡(jiǎn)單的,因?yàn)橐粋€(gè)Servlet的生命周期是由它運(yùn)行的容器控制的。

以下是基于Servlet生命周期實(shí)現(xiàn)一個(gè)簡(jiǎn)單的頁(yè)面點(diǎn)擊計(jì)數(shù)器需要的步驟:

  • 在init()方法中初始化一個(gè)全局變量。
  • 每次調(diào)用doGet()或doPost()方法時(shí),增加全局變量。
  • 如果需要,可以使用一個(gè)數(shù)據(jù)庫(kù)表來(lái)存儲(chǔ)destroy()方法中的全局變量。在下次初始化Servlet時(shí),這個(gè)值可以在init()方法內(nèi)被讀取。這一步是可選的。
  • 如果想計(jì)算一個(gè)會(huì)話(huà)內(nèi)一個(gè)頁(yè)面的點(diǎn)量擊,那么可以使用isNew()方法來(lái)查看該會(huì)話(huà)內(nèi)是否已點(diǎn)擊過(guò)相同的頁(yè)面。這一步是可選的。
  • 可以顯示全局計(jì)數(shù)器的值來(lái)顯示網(wǎng)站中的總點(diǎn)擊量。這一步是可選的。

在這里我假設(shè)Web容器不會(huì)被重新啟動(dòng)。如果Web容器被重新啟動(dòng)或Servlet被銷(xiāo)毀,計(jì)數(shù)器將被重置。

實(shí)例:

這個(gè)例子演示了如何實(shí)現(xiàn)一個(gè)簡(jiǎn)單的頁(yè)面點(diǎn)擊計(jì)數(shù)器:

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 
   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.
 } 
} 

現(xiàn)在編譯上述Servlet并在web.xml文件中創(chuàng)建以下條目:

....
 <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>
....

現(xiàn)在使用URL http://localhost:8080/PageHitCounter來(lái)調(diào)用這個(gè)Servlet。每次頁(yè)面刷新時(shí),計(jì)數(shù)器的值都會(huì)加1,這將產(chǎn)生如下所示的結(jié)果:

二、網(wǎng)站點(diǎn)擊計(jì)數(shù)器

很多時(shí)候,可能有興趣知道整個(gè)網(wǎng)站的總點(diǎn)擊量。在Servlet中,這也是非常簡(jiǎn)單的,可以使用過(guò)濾器實(shí)現(xiàn)這一點(diǎn)。

以下是實(shí)現(xiàn)一個(gè)基于過(guò)濾器生命周期的簡(jiǎn)單的網(wǎng)站點(diǎn)擊計(jì)數(shù)器需要的步驟:

  • 在過(guò)濾器的init()方法中初始化一個(gè)全局變量。
  • 每次調(diào)用doFilter方法時(shí),增加全局變量。
  • 如果需要,可以使用一個(gè)數(shù)據(jù)庫(kù)表來(lái)存儲(chǔ)過(guò)濾器的destroy()方法中的全局變量的值。在下次初始化過(guò)濾器時(shí),該值可以在init()方法內(nèi)被讀取。這一步是可選的。

在這里我假設(shè)Web容器不會(huì)被重新啟動(dòng)。如果Web容器被重新啟動(dòng)或Servlet被銷(xiāo)毀,點(diǎn)擊計(jì)數(shù)器將被重置。

實(shí)例:

這個(gè)例子演示了如何實(shí)現(xiàn)一個(gè)簡(jiǎn)單的網(wǎng)站點(diǎn)擊計(jì)數(shù)器:

// 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.
 } 
} 

現(xiàn)在來(lái)編譯上述Servlet并在web.xml文件中創(chuàng)建以下條目:

....
<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>
....

現(xiàn)在調(diào)用任意URL如URL:http://localhost:8080/。每次任意頁(yè)面被點(diǎn)擊時(shí),計(jì)數(shù)器的值都會(huì)加1并且會(huì)在日志中顯示如下所示的消息:

 測(cè)試工程:https://github.com/easonjim/5_java_example/tree/master/servletbasics/test14

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java讀取網(wǎng)頁(yè)內(nèi)容并下載圖片的實(shí)例

    Java讀取網(wǎng)頁(yè)內(nèi)容并下載圖片的實(shí)例

    這篇文章主要介紹了Java讀取網(wǎng)頁(yè)內(nèi)容并下載圖片的實(shí)例的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-09-09
  • java后端操作樹(shù)結(jié)構(gòu)的案例代碼

    java后端操作樹(shù)結(jié)構(gòu)的案例代碼

    這篇文章主要介紹了java后端操作樹(shù)結(jié)構(gòu),樹(shù)結(jié)構(gòu)的三種組裝方式(遞歸.雙層for循環(huán),map),通過(guò)實(shí)例代碼介紹了使用遞歸查詢(xún)某個(gè)節(jié)點(diǎn)所在的樹(shù)結(jié)構(gòu),需要的朋友可以參考下
    2023-10-10
  • Java上傳文件FTP服務(wù)器代碼實(shí)例

    Java上傳文件FTP服務(wù)器代碼實(shí)例

    這篇文章主要介紹了Java上傳文件FTP服務(wù)器代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • SpringBoot整合ElasticSearch的示例代碼

    SpringBoot整合ElasticSearch的示例代碼

    本篇文章主要介紹了SpringBoot整合ElasticSearch的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • java 讀取系統(tǒng)Properties代碼實(shí)例

    java 讀取系統(tǒng)Properties代碼實(shí)例

    這篇文章主要介紹了java 讀取系統(tǒng)Properties代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 詳解Java線(xiàn)程池的使用及工作原理

    詳解Java線(xiàn)程池的使用及工作原理

    在日常開(kāi)發(fā)過(guò)程中總是以單線(xiàn)程的思維去編碼,沒(méi)有考慮到在多線(xiàn)程狀態(tài)下的運(yùn)行狀況.由此引發(fā)的結(jié)果就是請(qǐng)求過(guò)多,應(yīng)用無(wú)法響應(yīng).為了解決請(qǐng)求過(guò)多的問(wèn)題,又衍生出了線(xiàn)程池的概念.本文記錄了Java中線(xiàn)程池的使用及工作原理,需要的朋友可以參考下
    2021-05-05
  • JavaSE基礎(chǔ)之反射機(jī)制(反射Class)詳解

    JavaSE基礎(chǔ)之反射機(jī)制(反射Class)詳解

    反射機(jī)制有什么用?通過(guò)java語(yǔ)言中的反射機(jī)制可以操作字節(jié)碼文件,可以讀和修改字節(jié)碼文件。所以本文將為大家講講反射機(jī)制的使用,需要的可以參考一下
    2022-09-09
  • 淺談一下Java中枚舉的用法

    淺談一下Java中枚舉的用法

    這篇文章主要介紹了淺談一下Java中枚舉的用法,枚舉是一個(gè)被命名的整型常數(shù)的集合,用于聲明一組帶標(biāo)識(shí)符的常數(shù),當(dāng)一個(gè)變量有幾種固定可能的取值時(shí),就可以將它定義為枚舉類(lèi)型,需要的朋友可以參考下
    2023-04-04
  • IDEA中解決 git pull 沖突的方法

    IDEA中解決 git pull 沖突的方法

    這篇文章主要介紹了IDEA中解決 git pull 沖突的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java并發(fā)工具類(lèi)之CountDownLatch詳解

    Java并發(fā)工具類(lèi)之CountDownLatch詳解

    這篇文章主要介紹了Java并發(fā)工具類(lèi)之CountDownLatch詳解,CountDownLatch可以使一個(gè)獲多個(gè)線(xiàn)程等待其他線(xiàn)程各自執(zhí)行完畢后再執(zhí)行,CountDownLatch可以解決那些一個(gè)或者多個(gè)線(xiàn)程在執(zhí)行之前必須依賴(lài)于某些必要的前提業(yè)務(wù)先執(zhí)行的場(chǎng)景,需要的朋友可以參考下
    2023-12-12

最新評(píng)論