?? global_asa文件的使用及chat程序.htm
字號:
<TD vAlign=top align=middle width=592 bgColor=#ffffff>
<TABLE cellSpacing=0 cellPadding=6 width="98%" border=0>
<TBODY>
<TR>
<TD class=xx vAlign=bottom height=30>■ 基礎(chǔ)教程 >
Global.asa文件的使用及Chat程序</TD></TR></TBODY></TABLE>
<TABLE height=119 cellSpacing=6 cellPadding=3 width="99%" border=0>
<TBODY>
<TR>
<TD class=xk vAlign=top align=left width="50%">
在上一篇中作者給大家詳細(xì)介紹了兩個(gè)非常實(shí)用的 ASP 內(nèi)建對象 Application 和 Session 的使用方法。由于這兩者的
OnStart、OnEnd 事件的腳本都必須在 Global.asa 文件中聲明 , 因此,本篇將給大家詳細(xì)介紹 Global.asa
文件的使用方法。為使大家熟練掌握至今所學(xué)過的知識,本篇還將舉出一個(gè) ASP 的 Chat 程序,供各位參考。<BR><BR>
最近很多朋友來信問我,為什么前兩期的范例程序運(yùn)行時(shí)有這樣那樣的錯(cuò)。首先,我要向大家聲明,這些程序都是我自己寫的,在出“廠”前都經(jīng)過合格檢驗(yàn),絕無“假冒偽劣產(chǎn)品”。:)
由于程序中使用了 cookie 記錄客戶信息,所以如果你在瀏覽器中沒有設(shè)置接受 cookie
則程序?qū)⒉荒苷_\(yùn)行。另外,程序?qū)⒖蛻粜畔⒂涗浽诳蛻舳说?cookie 所使用的方法是 Response.Cookie,此語句必須寫在
ASP 文件中的第一個(gè) < HTML> 標(biāo)記前,這是因?yàn)?Cookie 是作為 HTTP
傳輸?shù)念^信息的一部分發(fā)送給客戶的,如果當(dāng) HTTP 報(bào)頭信息已經(jīng)傳輸給客戶后再使用 Response.Cookie,將出現(xiàn)以下錯(cuò)誤
:“HTTP 標(biāo)題已經(jīng)寫入到客戶瀏覽器。任何 HTTP
標(biāo)題的修改必須在寫入頁內(nèi)容之前。”,可能一些朋友在剪貼程序的時(shí)候沒有注意,打亂了程序的前后次序 , 或者是錯(cuò)誤的將 HTML 代碼添加在
ASP
范例程序之前,因而導(dǎo)致程序運(yùn)行出錯(cuò)。因此,我建議大家一方面在首次運(yùn)行例程的時(shí)候不要對程序進(jìn)行任何改動(dòng),盡量在看懂程序的基礎(chǔ)上逐步改進(jìn),另一方面在運(yùn)行
ASP 程序時(shí)至少要在瀏覽器中選擇可接受 Cookie,否則一旦 ASP 程序中使用了 Cookie 或
Session,它們都將無法正常運(yùn)行。 <BR> 下面我來向大家介紹 Global.asa 文件的使用方法。 <BR><BR>
什么是 Global.asa
文件?它其實(shí)是一個(gè)可選文件,程序編寫者可以在該文件中指定事件腳本,并聲明具有會(huì)話和應(yīng)用程序作用域的對象。該文件的內(nèi)容不是用來給用戶顯示的,而是用來存儲(chǔ)事件信息和由應(yīng)用程序全局使用的對象。該文件的名稱必須是
Global.asa 且必須存放在應(yīng)用程序的根目錄中。每個(gè)應(yīng)用程序只能有一個(gè) Global.asa 文件。<BR><BR> 在
Global.asa 文件中,如果包含的腳本沒有用 < SCRIPT>
標(biāo)記封裝,或定義的對象沒有會(huì)話或應(yīng)用程序作用域,則服務(wù)器將返回錯(cuò)誤。我們可以用任何支持腳本的語言編寫 Global.asa
文件中包含的腳本。如果多個(gè)事件使用同一種腳本語言,就可以將它們組織在一組 < SCRIPT> 標(biāo)記中。<BR><BR>
在 Global.asa 文件中聲明的過程只能從一個(gè)或多個(gè)與
Application_OnStart、Application_OnEnd、Session_OnStart 和
Session_OnEnd 事件相關(guān)的腳本中調(diào)用。在基于 ASP 的應(yīng)用程序的 ASP
頁中,它們是不可用的。如果要在應(yīng)用程序之間共享過程,可在單獨(dú)的文件中聲明這些過程,然后使用服務(wù)器端包容 (SSI)
語句將該文件包含在調(diào)用該過程的 ASP 程序中。通常,包含文件的擴(kuò)展名應(yīng)為 .inc。<BR><BR> 下面是一個(gè)很標(biāo)準(zhǔn)的
Global.asa 文件 : <BR>< SCRIPT LANGUAGE="VBScript"
RUNAT="Server"><BR>'Session_OnStart 當(dāng)客戶首次運(yùn)行 ASP
應(yīng)用程序中的任何一個(gè)頁面時(shí)運(yùn)行<BR>'Session_OnEnd
當(dāng)一個(gè)客戶的會(huì)話超時(shí)或退出應(yīng)用程序時(shí)運(yùn)行<BR>'Application_OnStart
當(dāng)任何客戶首次訪問該應(yīng)用程序的首頁時(shí)運(yùn)行<BR>'Application_OnEnd 當(dāng)該站點(diǎn)的 WEB
服務(wù)器關(guān)閉時(shí)運(yùn)行<BR>< /SCRIPT><BR><BR>< SCRIPT LANGUAGE="VBScript"
RUNAT="Server"><BR>Sub
Application_OnStart<BR>VisitorCountFilename = Server.MapPath
("/ex2") + "\VisitCount.txt"<BR>Set FileObject =
Server.CreateObject("Scripting.FileSystemObject")<BR>Set Out=
FileObject.OpenTextFile (VisitorCountFilename, 1, FALSE,
FALSE)<BR>Application("visitors") =
Out.ReadLine<BR>Application("VisitorCountFilename") =
VisitorCountFilename<BR>End
Sub<BR>'=========================================================<BR>SUB
Application_OnEnd<BR>Set FileOutObject =
Server.CreateObject("Scripting.FileSystemObject")<BR>Set Out=
FileOutObject.CreateTextFile (Application("VisitorCountFilename"),
TRUE,FALSE)<BR>Out.WriteLine(application("visitors"))<BR>End
Sub<BR>'=========================================================Sub
Session_OnStart<BR>Session.Timeout = 5<BR>Application("visitors") =
Application("visitors") +
1<BR>Session("ID")=Session.SessionID<BR>End Sub<BR><
/SCRIPT><BR><BR> 在這個(gè) Global.asa 程序中,涉及到了 ASP 的 File Access
組件,它可以提供用于訪問文件系統(tǒng)的方法、屬性和集合。這將在以后 ASP
的組件中進(jìn)行展開討論。在這里,它起到了在服務(wù)器上創(chuàng)建新文件并對文件進(jìn)行寫操作的作用。這其實(shí)是一個(gè) ASP 頁面訪問記數(shù)器應(yīng)用程序的
Global 文件,首先當(dāng)客戶首次訪問該應(yīng)用程序的首頁時(shí) , 過程 Application_OnStart
定義了在服務(wù)器上指定的虛擬目錄下新建一個(gè) VisitCount.txt
的文本文件,并將文件的路徑和內(nèi)容保存在應(yīng)用程序級的變量中。而當(dāng)任何一個(gè)客戶訪問 ASP 應(yīng)用程序中的任何一個(gè)頁面時(shí),過程
Session_OnStart 定義將應(yīng)用程序級的變量 visitors 的值自動(dòng)加一。這樣,每當(dāng)有客戶訪問頁面時(shí),變量
visitors 都將自動(dòng)加一,以起到統(tǒng)計(jì)點(diǎn)擊率的作用。由于變量 visitors
的值是存儲(chǔ)在系統(tǒng)內(nèi)存之中,所以如果服務(wù)器關(guān)閉或重新啟動(dòng),存儲(chǔ)在變量中的數(shù)據(jù)將自動(dòng)丟失,所以通過定義過程
Application_OnEnd,在服務(wù)器關(guān)閉或重啟之前將數(shù)據(jù)寫入事先建立的文本文件之中,這樣就能確保當(dāng)服務(wù)器再次啟動(dòng)時(shí),Application_OnStart
過程可以從 VisitCount.txt 文件中讀取以前的統(tǒng)計(jì)數(shù)。<BR><BR>
經(jīng)過這段時(shí)間的學(xué)習(xí),相信大家已經(jīng)能夠比較熟練的運(yùn)用我們所學(xué)過的這些 ASP 內(nèi)建對象來編寫一些較簡單的 ASP
應(yīng)用程序,可別小看你現(xiàn)在所掌握的這些 ASP 基本知識哦 ! 其實(shí)你已經(jīng)能夠開發(fā)一些簡單但實(shí)用的 ASP
應(yīng)用程序了。下面我就舉一個(gè)非常簡單的 ASP WEB
聊天室程序,你會(huì)發(fā)覺寫聊天室原來是一件這么容易、輕松的事。可能朋友們已經(jīng)在一些雜志上看到過 ASP
聊天程序的編寫方法,但作者在這里自己寫了一個(gè)更簡單的程序,僅僅使用了一個(gè) .asp 文件。請將以下代碼剪貼到記事簿并保存為
chat.asp。 <BR>< %@ Language=VBScript %><BR><
%<BR>Response.Buffer=true ' 設(shè)置輸出緩存,用于顯示不同頁面。<BR>On error resume next
' 忽略程序出錯(cuò)部分<BR>If Request.ServerVariables("Request_Method")="GET"
then<BR>' 判斷客戶是以什么方式請求 WEB 頁面<BR>'------------------------<BR>'
客戶登陸界面 <BR>'------------------------<BR>%><BR><BR>< form
method="POST" action="chat.asp">< p><BR>< input
type="text" name="nick" size="20" value="nick"
style="background-color: rgb(192,192,192)">< br><BR> <
input type="submit" value=" 進(jìn)入聊天室 " name="B1" style="color:
rgb(255,255,0); font-size: 9pt; background-color:
rgb(0,128,128)"><BR>< p>< input type="hidden" name="log"
size="20" value="1">< br>< /p><BR><
/form><BR><BR>< %<BR>Response.End '
結(jié)束程序的處理<BR>Else<BR>Response.clear ' 清空緩存中的內(nèi)容<BR>dim talk<BR>If
Request.Form("nick")<>"" then<BR>' 判斷客戶是是否在聊天界面中
<BR>Session("nick")=Request.Form("nick")<BR>End
If<BR>'------------------------'<BR>客戶聊天界面
<BR>'------------------------<BR>%><BR><BR>< form
method="POST" action="chat.asp" name=form1> < p><
%=Session("nick")%> 說話:< input type="text" name="talk"
size="50">< br><BR>< input type="submit" value=" 提交 "
name="B1"><BR>< input type="reset" value=" 取消 "
name="B2">< /p><BR>< /form><BR>< A
HREF="/asptest/shusheng/chat.asp"> 離開 < /a>< br><
br><BR><BR>< %<BR>If Request.Form("log")<>1 then<BR>If
trim(Request.Form("talk"))="" then<BR>' 判斷用戶是否沒有輸入任何內(nèi)容
<BR>talk=Session("nick")&"
沉默是金。"<BR>Else<BR>talk=trim(Request.Form("talk"))<BR>' 去掉字符后的空格
<BR>End If<BR><BR>Application.lock<BR>Application("show")="<
table border='0' cellpadding='0' cellspacing='0' width='85%'
>< tr>< td width='100%' bgcolor='#C0C0C0'><
/td>< /tr>< tr>< td width='100%'>< font
color='#0000FF'> 來自
"&Request.ServerVariables("remote_addr")&" 的
"&Session("nick")&time&" 說:<
/font>"&talk&"< /td>< /tr>< tr>< td
width='100%' bgcolor='#C0C0C0'>< /td>< /tr><
/table><
br>"&Application("show")<BR>Application.UnLock<BR><BR>Response.Write
Application("show")<BR>End If<BR>End If<BR>%><BR><BR><BR> 第一次運(yùn)行
chat.asp 程序,你首先將看到如下頁面 : <BR><BR><BR> <BR><BR> 選擇你的 nick
進(jìn)入聊天室后,將看到如下頁面 : <BR><BR><BR> <BR><BR> 輸入你想要說的話,對話將出現(xiàn)在輸入框的下方,如下圖 :
<BR><BR><BR> 下面我們來對這個(gè)聊天室程序進(jìn)行逐步的分析。 <BR><BR>
首先,由于聊天室的所有客戶都要能夠共享信息,所以不可避免的要用到具有應(yīng)用程序級變量的對象 Application,這是建立 Chat
程序的關(guān)鍵所在,所有的談話數(shù)據(jù)都存放在一個(gè)應(yīng)用程序級變量中,以便讓所有的客戶讀取。我們可以用所學(xué)過的 request
對象獲取客戶所輸入的談話,并保存在變量 talk 中 , 然后將 talk 的值存入應(yīng)用程序級變量 show 中,如下 :
<BR> < % Application("show")=talk&Application("show")
%><BR><BR> 接下來要考慮的是當(dāng)不同的客戶同時(shí)向 Chat
應(yīng)用程序進(jìn)行操作的時(shí)候如何處理。這個(gè)問題其實(shí)與在數(shù)據(jù)庫中的兩個(gè)用戶同時(shí)寫入同一個(gè)記錄一樣,如果兩個(gè)用戶同時(shí)對同一個(gè)應(yīng)用程序級變量進(jìn)行寫操作,則一個(gè)用戶所作的修改會(huì)被另一個(gè)用戶的操作所覆蓋,所以,如果對
Application 對象數(shù)據(jù)的并發(fā)訪問不采取一定措施,則會(huì)導(dǎo)致當(dāng)兩個(gè)用戶試圖同時(shí)對 Asp
聊天室應(yīng)用程序提交時(shí),一個(gè)用戶的提交內(nèi)容會(huì)被另一個(gè)用戶的提交內(nèi)容所覆蓋,在被參加到會(huì)話中的任何人看到之前就消失了。為了避免這類問題的出現(xiàn),我們需要使用
Application 對象的 Lock 屬性來約束只允許當(dāng)前的用戶編輯或增加 Application
對象的屬性,這樣當(dāng)用戶開始修改應(yīng)用程序級變量開始,到 Application 對象被顯式地 Unlocked
為止,Application 對象的屬性只能被該用戶編輯,如果此時(shí)有其他用戶請求編輯 Application
對象,則這些用戶要排隊(duì)等待,知道應(yīng)用程序被 Unlock 為止。如下所示 :
<BR>Application.lock<BR>Application("show")=talk&Application("show")<BR>Application.UnLock<BR><BR>
現(xiàn)在整個(gè)程序的核心部分你已經(jīng)了解了,下面考慮如何保存客戶信息,這里我們要用到一個(gè)會(huì)話級變量,即將客戶的 nick 保存在 Session
中。如: <BR>Session("nick")=Request.Form("nick")<BR><BR>
最后,我們要考慮的是如何僅在一個(gè) .asp 文件中處理各種事件 , 如 : 客戶登陸界面、客戶聊天界面。由于客戶第一次請求 .asp
文件時(shí),采用的是簡單的 HTTP GET 方式,但是當(dāng)客戶向頁面上的表單字段中增加的數(shù)據(jù)并向自身提交表單后,.asp
文件會(huì)再次被請求,不過這次數(shù)據(jù)是經(jīng)過 HTTP POST 方式進(jìn)行傳遞的。文件被請求的方式可以用兩種方法來確定。一是測試
Request.Form 集合是否包含成員,若沒有,則表明沒有發(fā)送給表單處理的數(shù)據(jù)。二是使用
Request.ServerVariables("Request_Method") 變量。如果表單是通過 HTTP GET
方式被請求的,則這個(gè)變量會(huì)返回“GET”,如果表單被提交處理則返回“POST”。由于后一種方法對于確定文件的請求方式更直接,所以我們使用如下代碼進(jìn)行判斷
: <BR> if Request.ServerVariables("Request_Method")="GET"
then<BR><BR> 由于我們設(shè)置了 ASP 緩存,所以當(dāng)程序判斷頁面請求方式為 GET 時(shí),程序運(yùn)行
Response.End,來結(jié)束后面的所有操作,否則則運(yùn)行 Response.clear,
清空緩存中已有的內(nèi)容,并繼續(xù)程序的運(yùn)行。這樣我們就得以用同一個(gè) .asp 文件根據(jù)不同情況給客戶顯示不同的界面。<BR><BR>
好了,我已經(jīng)將這個(gè) ASP Chat
程序的核心部分告訴大家了,剩下的一些細(xì)節(jié)性問題請各位自己讀程序吧,其實(shí)這個(gè)程序還存在很多不足之處,最大的毛病是我沒有寫自動(dòng)刷新的功能,因此如果你在
Chat 中不說話,那也就看不到其他客戶所說的話了。Chat 在 Internet 中的魅力大家是知道的,其實(shí) , 用 ASP
也完全能做到同 irc 類似的強(qiáng)大功能,當(dāng)然這就需要寫更多的代碼,如果大家有興趣請寫信給我,我將在今后的文章中逐步提升這個(gè) chat
程序的等級,讓大家也過過“Oper”的隱。注:有了這個(gè) chat 程序,你就可以用來在自己的 PWS 上建一個(gè) chat
應(yīng)用程序,只要將你的 IP 地址告訴朋友,如
http://202.96.210.33/asp/chat.asp,你們就可以通過你的電腦在網(wǎng)上聊天了,很爽的,不信你試試 !
<BR><BR>作者:書生 </TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="98%" border=0>
<TBODY>
<TR>
<TD>■今日推薦:<A
href="http://lzjx.com/w/main.asp?id=388&sx=jc">ASP內(nèi)建對象Serv</A>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=800 bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD background=Global_asa文件的使用及Chat程序.files/qw39.gif></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=1 cellPadding=5 width=800 bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD class=N noWrap align=middle>
<TABLE cellSpacing=0 cellPadding=0 width="100%" bgColor=#ffffff
border=0><TBODY>
<TR>
<TD
background=Global_asa文件的使用及Chat程序.files/qw39.gif></TD></TR></TBODY></TABLE><BR>本網(wǎng)站是學(xué)習(xí)網(wǎng)站,內(nèi)容整理大多來自互聯(lián)網(wǎng),盡量標(biāo)明了出處,如果侵犯了您的權(quán)力請通知我,立即糾正<BR>歡迎提出寶貴建議,提供相關(guān)資料,以便相互學(xué)習(xí),共同提高!<BR>
<OBJECT
codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0
height=18 width=103 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000><PARAM NAME="BGCOLOR" VALUE=""><PARAM NAME="movie" VALUE="../images/21sg.swf"><PARAM NAME="quality" VALUE="high">
<embed src="../images/21sg.swf"
quality="high"
pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"
type="application/x-shockwave-flash" width="103" height="18" ></embed>
</OBJECT></TD></TR>
<TR>
<TD height=79> </TD></TR>
<TR>
<TD align=middle>友情鏈接:<A href="http://www.wanlubao.com/"
target=_blank>無水洗車</A> </TD></TR></TBODY></TABLE></CENTER></BODY></HTML>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -