明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

ASP計(jì)數(shù)器設(shè)計(jì)詳細(xì)說(shuō)明(轉(zhuǎn)載)

[摘要]Active Server Pager(動(dòng)態(tài)服務(wù)器主頁(yè),簡(jiǎn)稱ASP),通過(guò)讀寫(xiě)服務(wù)器的文件,結(jié)合script語(yǔ)言(VBscript或Jscript)和html碼可以方便地實(shí)現(xiàn)頁(yè)面計(jì)數(shù)器功能。現(xiàn)流行的ASP教材和網(wǎng)絡(luò)上的ASP教程都談到過(guò)ASP計(jì)數(shù)器的設(shè)計(jì)問(wèn)題,但是都過(guò)于簡(jiǎn)單,比如沒(méi)有提到怎樣實(shí)現(xiàn)計(jì)...

Active Server Pager(動(dòng)態(tài)服務(wù)器主頁(yè),簡(jiǎn)稱ASP),通過(guò)讀寫(xiě)服務(wù)器的文件,結(jié)合script語(yǔ)言(VBscript或Jscript)和html碼可以方便地實(shí)現(xiàn)頁(yè)面計(jì)數(shù)器功能。現(xiàn)流行的ASP教材和網(wǎng)絡(luò)上的ASP教程都談到過(guò)ASP計(jì)數(shù)器的設(shè)計(jì)問(wèn)題,但是都過(guò)于簡(jiǎn)單,比如沒(méi)有提到怎樣實(shí)現(xiàn)計(jì)數(shù)器腳本和主頁(yè)面的分離以及圖象計(jì)數(shù)器的實(shí)現(xiàn)等。下面就作者為單位制作NT web站點(diǎn)的經(jīng)驗(yàn),舉實(shí)例循序漸進(jìn)談?wù)勱P(guān)于ASP計(jì)數(shù)器的設(shè)計(jì),希望能給ASP的初學(xué)者和對(duì)ASP WEB編程有興趣的網(wǎng)友一些啟發(fā)。

(一)簡(jiǎn)單的計(jì)數(shù)器

ASP內(nèi)含五個(gè)內(nèi)置的"Active Server Components"(ActiveX服務(wù)器組件),即Database Access component(數(shù)據(jù)庫(kù)訪問(wèn)組件)、File Access component(文件訪問(wèn)組件)、Ad Rotator component(廣告輪播器組件)、Brower Capabilities component(瀏覽器信息組件)、Content Linking component(內(nèi)容鏈接組件)。我們下面要設(shè)計(jì)的計(jì)數(shù)器,就是通過(guò)其中的File Access component(文件訪問(wèn)組件)來(lái)讀寫(xiě)服務(wù)器文件來(lái)實(shí)現(xiàn)。算法思路是:在服務(wù)器端用一個(gè)文本(ASCII)文件存放計(jì)數(shù)數(shù)值,每當(dāng)頁(yè)面被訪問(wèn)時(shí)就從文件中讀出數(shù)值,顯示給用戶,并且使數(shù)值加1,把增加后的數(shù)值寫(xiě)回到文件。

寫(xiě)入數(shù)據(jù)到一個(gè)服務(wù)器計(jì)數(shù)文件的ASP語(yǔ)句和說(shuō)明如下:

CounFile=Server.MapPath("用來(lái)存放計(jì)數(shù)器值的文件名")
'Server服務(wù)器訪問(wèn)方法MapPath(path)是將存放計(jì)數(shù)器值的文件所在的路徑轉(zhuǎn)換成物理路徑
SET FileObject=Server.CreateObject("Scripting.FileSystemObject")
'使用方法CreateObject定義對(duì)象FileSystemObject
SET OutStream=Server.CreateTextFile(FileObject,True,False)
'使用對(duì)象FileSystemObject提供方法CreateTextFile產(chǎn)生文本文件,其中參數(shù)"True"表示覆蓋原來(lái)的文件,"False"表示文件為ASCII類(lèi)型
OutStream.WriteLine "要寫(xiě)入的數(shù)據(jù)"
'OutStream.WriteLine為往文件寫(xiě)入一行數(shù)據(jù)

從一個(gè)服務(wù)器文件讀取數(shù)據(jù)的ASP語(yǔ)法如下:

CounFile=Server.MapPath("用來(lái)存放計(jì)數(shù)器值的文件名")
SET FileObject=Server.CreateObject("Scripting.FileSystemObject")
SET InStream=Server.OpenTextFile(FileObject,1,false,false)
'使用對(duì)象FileSystemObject提供方法OpenTextFile產(chǎn)生文本文件,
'其中參數(shù)"True"表示覆蓋原來(lái)的文件,"False"表示文件為ASCII類(lèi)型
"要讀取的數(shù)據(jù)"=InStream.ReadLine
'其中InStream.ReadLine為從文件中讀取的一行數(shù)據(jù)

下面是一個(gè)用ASP實(shí)現(xiàn)頁(yè)面計(jì)數(shù)器功能的計(jì)數(shù)器例子(simplecounter.asp),我在代碼中詳細(xì)注釋了語(yǔ)句。你可以把以下代碼粘貼到你需要計(jì)數(shù)的頁(yè)面代碼中。當(dāng)然,你的服務(wù)器必須支持ASP,且你已經(jīng)在主頁(yè)所在的目錄下創(chuàng)建了一個(gè)內(nèi)容為0的文本文件simplecounter.txt。

簡(jiǎn)單的ASP計(jì)數(shù)器simplecounter.asp代碼及注釋:

<%
CountFile=Server.MapPath("simplecounter.txt")
'文件aspconter.txt是用來(lái)儲(chǔ)存數(shù)字的文本文件,初始內(nèi)容一般是0
Set FileObject=Server.CreateObject("Scripting.FileSystemObject")
Set Out=FileObject.OpenTextFile(CountFile,1,FALSE,FALSE)
counter=Out.ReadLine
'讀取計(jì)數(shù)器文件中的值
Out.Close
'關(guān)閉文件
SET FileObject=Server.CreateObject("Scripting.FileSystemObject")
Set Out=FileObject.CreateTextFile(CountFile,TRUE,FALSE)
Application.lock
'方法Application.lock禁止別的用戶更改計(jì)數(shù)器的值
counter= counter + 1
'計(jì)數(shù)器的值增加1
Out.WriteLine(counter)
'把新的計(jì)數(shù)器值寫(xiě)入文件
Application.unlock
'使用方法Application.unlock后,允許別的用戶更改計(jì)數(shù)器的值
Response.Write("您是第")
Response.Write("<font color=red>")
Response.Write(counter)
'把計(jì)數(shù)器的值傳送到瀏覽器,以紅(red)色顯示給用戶
Response.Write("</font>")
Response.Write("位訪問(wèn)者")
Out.Close
'關(guān)閉文件
%>

(二)與頁(yè)面分離的計(jì)數(shù)器

實(shí)際應(yīng)用中,主頁(yè)面與計(jì)數(shù)器程序是分離的,既只要在需要計(jì)數(shù)的頁(yè)面中加入一句引用代碼就可以實(shí)現(xiàn)頁(yè)面計(jì)數(shù)。我們?cè)诰W(wǎng)上經(jīng)常申請(qǐng)使用的免費(fèi)計(jì)數(shù)器就是這樣,不過(guò)它們一般是CGI做的。這里,我們只要稍微修改一下前面我們用ASP做的簡(jiǎn)單計(jì)數(shù)器,然后在頁(yè)面加入一句JavaScript語(yǔ)句引用它,就實(shí)現(xiàn)了與頁(yè)面分離的計(jì)數(shù)器功能。這樣,無(wú)論是作為主頁(yè)面的計(jì)數(shù)器還是為某個(gè)特定頁(yè)面的計(jì)數(shù),都很方便了。顯然,你需要簡(jiǎn)單更改一下存放計(jì)數(shù)器值的文件名和計(jì)數(shù)器asp源代碼文件名就可以實(shí)現(xiàn)多個(gè)計(jì)數(shù)器。

與頁(yè)面分離的計(jì)數(shù)器txtcounter.asp代碼:

<%
CountFile=Server.MapPath("txtcounter.txt")
Set FileObject=Server.CreateObject("Scripting.FileSystemObject")
Set Out=FileObject.OpenTextFile(CountFile,1,FALSE,FALSE)
counter=Out.ReadLine
Out.Close
SET FileObject=Server.CreateObject("Scripting.FileSystemObject")
Set Out=FileObject.CreateTextFile(CountFile,TRUE,FALSE)
Application.lock
counter= counter + 1
Out.WriteLine(counter)
Application.unlock
Response.Write"document.write("&counter&")"
'為了在頁(yè)面正確顯示計(jì)數(shù)器的值,調(diào)用VBScript函數(shù)Document.write
Out.Close
%>

在要計(jì)數(shù)的頁(yè)面加入如下的代碼:

<p>
您是第
<font color=red>
<script language="JavaScript" src="http://202.101.209.75/asptemp/counter/txtcounter.asp";>
//引用時(shí)注意ASP計(jì)數(shù)器所在的服務(wù)器及目錄路徑。
</script>
</font>
位來(lái)客
</p>


(三)與頁(yè)面分離的圖象計(jì)數(shù)器

人們的追求是永無(wú)止境的,也許你需要一個(gè)更有個(gè)性的圖形數(shù)字計(jì)數(shù)器,而不是簡(jiǎn)單的文本數(shù)字計(jì)數(shù)器。沒(méi)問(wèn)題,現(xiàn)在我們就來(lái)看看用ASP是怎樣來(lái)實(shí)現(xiàn)圖形計(jì)數(shù)器功能的。要實(shí)現(xiàn)圖形計(jì)數(shù)器,關(guān)鍵點(diǎn)在于如何實(shí)現(xiàn)把計(jì)數(shù)器文件中的數(shù)據(jù)值轉(zhuǎn)變?yōu)閷?duì)應(yīng)的圖象表示。因?yàn)槭M(jìn)制數(shù)有0,1,2,3,4,5,6,7,8,9共十個(gè)不同的數(shù)數(shù)字,我們需要有十個(gè)對(duì)應(yīng)的圖象,且圖象的文件名字要與顯示的數(shù)字對(duì)應(yīng)起來(lái),比如0對(duì)應(yīng)的數(shù)字圖象的文件名字就是0.gif,1對(duì)應(yīng)的就是1.gif,...(圖象自己可以用Photoshop等工具制作,或者從網(wǎng)絡(luò)上下載)。這里我們要用到VBScript函數(shù)Len(string varname)、Mid(string,start[,length])。由Len(counter)可得到計(jì)數(shù)器值的位數(shù),由Mid(counter,i,1)可以得到計(jì)數(shù)器值的第i位上的數(shù)字,我們可利用這個(gè)值來(lái)調(diào)用相應(yīng)的數(shù)字圖象。用For循環(huán)語(yǔ)句,我們不難得出計(jì)數(shù)器值各個(gè)位上的數(shù)字并轉(zhuǎn)化成對(duì)應(yīng)的數(shù)字圖象,這樣,我們就能實(shí)現(xiàn)文本數(shù)值到圖象數(shù)字的轉(zhuǎn)變。下面就是一個(gè)用ASP編寫(xiě)的圖象計(jì)數(shù)器實(shí)例,因?yàn)榇蟛糠执a前面都分析過(guò),所以代碼中只注釋了部分語(yǔ)句。

與頁(yè)面分離的圖象計(jì)數(shù)器imgcounter.asp代碼:

<% @language="VBScript"%>
<%
dim images(20)
'定義一數(shù)組,用來(lái)存放顯示每一位數(shù)字圖象的語(yǔ)句
CountFile=Server.MapPath("imgcounter.txt")
Set FileObject=Server.CreateObject("Scripting.FileSystemObject")
Set Out=FileObject.OpenTextFile(CountFile,1,FALSE,FALSE)
counter=Out.ReadLine
Out.Close
SET FileObject=Server.CreateObject("Scripting.FileSystemObject")
Set Out=FileObject.CreateTextFile(CountFile,TRUE,FALSE)
Application.lock
counter= counter + 1
Out.WriteLine(counter)
Application.unlock
countlen=len(counter)
'得到計(jì)數(shù)器值的位數(shù)
for i=1 to countlen
images(i)="<img src="&"http://202.101.209.75/asptemp/counter/images/";&"/" & mid(counter,i,1) & ".gif></img>"
'由循環(huán)語(yǔ)句得到各個(gè)位上數(shù)值對(duì)應(yīng)圖象的顯示代碼(html),并把它存在數(shù)組中
'具體使用時(shí)請(qǐng)注意圖象的實(shí)際服務(wù)器及目錄路徑
response.write"document.write('"&images(i)&"');"
'調(diào)用函數(shù)Document.write輸出顯示數(shù)字圖象的html代碼
next
Out.Close
%>



在要計(jì)數(shù)的頁(yè)面加入如下的代碼:

<p>
您是第
<script language="JavaScript" src="http://202.101.209.75/asptemp/counter/imgcounter.asp";>
//引用時(shí)注意ASP計(jì)數(shù)器所在的服務(wù)器及目錄路徑。
</script>
位來(lái)客
</p>

附注:以上asp計(jì)數(shù)器均在Windows NT Server 4.0(中文) / IIS3.0 下測(cè)試通過(guò)。以下任何一種環(huán)境都可執(zhí)行ASP:
一、Windows NT Server 4.0/IIS3.0以上
二、Windows NT WorkStation 4.0 / Microsoft Peer Web Service3.0以上
三、Windows 95/98 / Microsoft Personal Web Server 1.0a以上