編程|進階 6.2.4 Counters組件
Counters組件能用於建立、儲存、遞增和檢索每個計數器的值。不要把它和本章後面將要介紹的Page Counter組件混淆,Counters組件能用於支援任何種類資料的統計。
一個計數器含有一個整數值,能通過Counters組件的方法進行運算。使用Set方法設定計數器的指定值,用Get方法檢索計數器中的值,使用Increment方法使計數器的值加1,使用Remove方法刪除一個計數器。所有的計數器的值儲存在一個名為Counters.txt的文字檔中,可在Counters.dll組件所在的目錄中找到該檔案。
1. Counters組件的成員
Counters組件提供了用於維護每個計數器組件中數值的四個方法,如表6-4所示:
表6-4 Counters組件方法及說明
方 法
說 明
Get(counter_name)
返回指定計數器的當前值,如果此計數器先前沒有建立,道德建立並設定成0,其傳回值為0
Increment(counter_name)
增加指定計數器的當前值,如果此計數器先前沒有建立,首先建立並設定為1
Remove(counter_name)
刪除指定的計數器
Ser(counter_name,value)
把指定計數器的值設定成參數value提供的整數值,如果此計數器先前沒有建立,先建立並設定為指定值
2. 使用Counters組件
由於Counters.txt檔案僅有一個所有組件執行個體都能訪問的拷貝。因此,應該只建立單個的Counters組件執行個體,並且使之對Web網站的所有頁面都是可用的,實現這一點的常用方法是在預設Web網站根目錄下的global.asa檔案中建立一個應用程式範圍的執行個體。
採用下面程式:
<!-- declare instance of the ASP Counters component with application-level scope
-->
<OBJECT ID="objCounters" RUNAT="Server" SCOPE="Application"
PROGID="MSWC.Counters">
</OBJECT>
可以使用Counters組件對需要完成的任務建立一個新的計數器。在下面的程式中,給出了有三項選擇的調查問題,並對每一種選擇的回答次數進行了統計,當使用者提交包含三項選擇的表單後,將調入這個頁面。假設選項通過點擊SUBMIT按鈕的cmdYes、cmdNo和cmdMaybe來選擇,其對應值分別是“是”、“否”和“可能”。
<% 'in VBScript”
If Request.Form("cmdYes") = "Yes" Then objCounter.Increment("Response_Yes")
If Request.Form("cmdNo") = "No" Then objCounter.Increment("Response_No")
If Request.Form("cmdMaybe") = "Maybe" Then
objCounter.Increment("Response_Maybe")
%>
如果這是第一次收到一個指定的響應,程式將建立一個新的計數器並自動初始化為1。
計數器在使用範圍上沒有限制,因為Counters對象建立在檔案global.asa中,這意味著在虛擬應用程式或Web網站中建立的任何一個頁面中都是可用的,所以這個“調查計數器”可用在應用程式的任何頁面上,記住單個的Counters對象能提供所需的許多獨立計數器,不需要建立很多Counters對象執行個體。
在前面的Ad Rotator組件頁面樣本中,研究了如何使用Counters組件儲存每個廣告主的點擊次數,也可以在頁面中使用Counters組件的Get方法顯示當前值。
Wrox Press: <B><% = objCounters.Get("wrox") %></B><BR>
Stonebroom: <B><% = objCounters.Get("stonebroom") %></B><BR>
Xtras: <B><% = objCounters.Get("xtras") %></B><BR>
ComponentSource: <B><% = objCounters.Get("compsrc") %></B><BR>
Four CDs: <B><% = objCounters.Get("fourcds") %></B><BR>
Lunar: <B><% = objCounters.Get("lunar") %></B><BR>
每次載入頁面時,都自動更新計數器的當前值。然而頁面也包含有一些控制項能調用Counters組件的其他兩個方法,即刪除一個計數器(相當於將其設定為0)和將計數器設定成一個指定數值,如圖6-6所示:
圖6-6 Counters組件的使用示範
這些控制項在一個<FORM>上,點擊任何一個小的空白按鈕時,此表單便提交給同一個頁面,方法與本章中的所有頁面所用的幾乎一樣。下面的程式是為Remove方法建立控制項的HTML代碼。
<FORM ACTION="<% = Request.ServerVariables("SCRIPT_NAME") %>" METHOD="POST">
<INPUT TYPE="SUBMIT" NAME="cmdRemove" VALUE=" ">
Counter.Remove ("
<SELECT NAME="lstRemove" SIZE="1">
<OPTION VALUE="wrox">Wrox Press</OPTION>
<OPTION VALUE="stonebroom">Stonebroom</OPTION>
<OPTION VALUE="xtras">Xtras</OPTION>
<OPTION VALUE="compsrc">ComponentSource</OPTION>
<OPTION VALUE="fourcds">Four CDs</OPTION>
<OPTION VALUE="lunar">Lunar</OPTION>
</SELECT> ")<P>
…
</FORM>
當載入頁面時,通過檢查Request.Form集合查看點擊的按鈕,如果找到了某個按鈕,將運行代碼的相應部分。在點擊Remove按鈕的情況下,相應的代碼是:
If Len(Request.Form("cmdRemove")) Then
strCounterName = Request.Form("lstRemove") 'get the counter name
objCounters.Remove strCounterName
Response.Write &