有時(shí)候我們需要知道某個(gè)頁(yè)面被訪問(wèn)的次數(shù),這時(shí)我們就需要在頁(yè)面上添加頁(yè)面統(tǒng)計(jì)器,頁(yè)面訪問(wèn)的統(tǒng)計(jì)一般在用戶第一次載入時(shí)累加該頁(yè)面的訪問(wèn)數(shù)上。
要實(shí)現(xiàn)一個(gè)計(jì)數(shù)器,您可以利用應(yīng)用程序隱式對(duì)象和相關(guān)方法getAttribute()和setAttribute()來(lái)實(shí)現(xiàn)。
這個(gè)對(duì)象表示JSP頁(yè)面的整個(gè)生命周期中。當(dāng)JSP頁(yè)面初始化時(shí)創(chuàng)建此對(duì)象,當(dāng)JSP頁(yè)面調(diào)用jspDestroy()時(shí)刪除該對(duì)象。
以下是在應(yīng)用中創(chuàng)建變量的語(yǔ)法:
application.setAttribute(String Key, Object Value);
您可以使用上述方法來(lái)設(shè)置一個(gè)計(jì)數(shù)器變量及更新該變量的值。讀取該變量的方法如下:
application.getAttribute(String Key);
在頁(yè)面每次被訪問(wèn)時(shí),你可以讀取計(jì)數(shù)器的當(dāng)前值,并遞增1,然后重新設(shè)置,在下一個(gè)用戶訪問(wèn)時(shí)就將新的值顯示在頁(yè)面上。
該實(shí)例將介紹如何使用JSP來(lái)計(jì)算特定頁(yè)面訪問(wèn)的總?cè)藬?shù)。如果你要計(jì)算你網(wǎng)站使用頁(yè)面的總點(diǎn)擊量,那么你就必須將該代碼放在所有的JSP頁(yè)面上。
<%@ page import="java.io.*,java.util.*" %>
<html>
<head>
<title>Applcation object in JSP</title>
</head>
<body>
<%
Integer hitsCount = (Integer)application.getAttribute("hitCounter");
if( hitsCount ==null || hitsCount == 0 ){
/* 第一次訪問(wèn) */
out.println("Welcome to my website!");
hitsCount = 1;
}else{
/* 返回訪問(wèn)值 */
out.println("Welcome back to my website!");
hitsCount += 1;
}
application.setAttribute("hitCounter", hitsCount);
%>
<center>
<p>Total number of visits: <%= hitsCount%></p>
</center>
</body>
</html>
現(xiàn)在我們將上面的代碼放置于main.jsp文件上,并訪問(wèn)http://localhost:8080/main.jsp文件。你會(huì)看到頁(yè)面會(huì)生成個(gè)計(jì)數(shù)器,在我們每次刷新頁(yè)面時(shí),計(jì)數(shù)器都會(huì)發(fā)生變化(每次刷新增加1)。 你也可以通過(guò)不同的瀏覽器訪問(wèn),計(jì)數(shù)器會(huì)在每次訪問(wèn)后增加1。如下所示:
Welcome back to my website!
Total number of visits: 12
復(fù)位計(jì)數(shù)器
使用以上方法,在web服務(wù)器重啟后,計(jì)數(shù)器會(huì)被復(fù)位為0,即前面保留的數(shù)據(jù)都會(huì)消失,你可以使用一下幾種方式解決該問(wèn)題:
● 在數(shù)據(jù)庫(kù)中定義一個(gè)用于統(tǒng)計(jì)網(wǎng)頁(yè)訪問(wèn)量的數(shù)據(jù)表count,字段為hitcount,hitcount默認(rèn)值為0,將統(tǒng)計(jì)數(shù)據(jù)寫入到數(shù)據(jù)表中。
● 在每次訪問(wèn)時(shí)我們讀取表中hitcount字段。
● 每次訪問(wèn)時(shí)讓hitcount自增1。
● 在頁(yè)面上顯示新的 hitcount 值作為頁(yè)面的訪問(wèn)量。
● 如果你需要統(tǒng)計(jì)每個(gè)頁(yè)面的訪問(wèn)量,你可以使用以上邏輯將代碼添加到所有頁(yè)面上。