Application對(duì)象用于在整個(gè)應(yīng)用程序期間保存信息。
Application對(duì)象與Session對(duì)象十分相似,甚至他們所具有的方法和集合都是基本相同的,但是Application對(duì)象沒有屬性。Application對(duì)象的原理是這樣的,在每次應(yīng)用程序啟動(dòng)(即IIS的啟動(dòng))時(shí),會(huì)在內(nèi)存中請(qǐng)求一部分空間來保存數(shù)據(jù),這個(gè)數(shù)據(jù)對(duì)于訪問站點(diǎn)的所有用戶來說是共享的,當(dāng)在IIS中停止站點(diǎn)或者服務(wù)器重啟時(shí),Application對(duì)象所存儲(chǔ)的信息將丟失,要特別注意這一點(diǎn)。Application對(duì)象一般用來存儲(chǔ)一些不經(jīng)常變動(dòng),或者少量的經(jīng)常變動(dòng)并且沒有必要存儲(chǔ)在數(shù)據(jù)庫(kù)中的內(nèi)容。
與Session類似的,Application對(duì)象也有Contents集合,我們可以使用如下的代碼來設(shè)定集合變量的值:
Application.Contents("WebSite") = "http://ww.hanguofeng.com"
這段代碼在名為WebSite的Application變量中保存了字符串http://ww.hanguofeng.com。
同樣,Application對(duì)象也可以使用簡(jiǎn)寫,如上述代碼可以寫為
Application("WebSite") = "http://ww.hanguofeng.com"
在設(shè)定了這個(gè)變量的值后,當(dāng)前站點(diǎn)的任何用戶均可以通過代碼
Response.Write(Application("WebSite"))
來輸出我們保存在名為WebSite的Application集合變量值,即,輸出http://www.hanguofeng.com字樣。
Application對(duì)象也有Remove和RemoveAll兩個(gè)方法,其使用方法與Session對(duì)象的相應(yīng)方法類似,這里不再詳述了,下面我們來看Application對(duì)象的另外一對(duì)方法,即Lock方法和UnLock方法。
我們已經(jīng)多次提到過了,Application對(duì)象對(duì)于當(dāng)前訪問站點(diǎn)的所有用戶都是共享的,那么則可能出現(xiàn)兩個(gè)用戶同時(shí)修改Application的集合中某個(gè)元素的值,此時(shí)可能會(huì)引起未期料的后果。打比方來說,在某個(gè)頁(yè)面有如下代碼:
<%
Application("count") = Application("count") + 1
%>
這段代碼的目的是在每次訪問這個(gè)頁(yè)面時(shí)都將Application集合中名為count變量的值加一,那么假設(shè),在某一時(shí)刻,這個(gè)變量的值為5,就在同一時(shí)刻,兩個(gè)用戶同時(shí)進(jìn)入了此頁(yè)面,第一個(gè)用戶取出Application的值,而后加一,再保存回Application集合中,第二個(gè)用戶也進(jìn)行了此操作,那么最終名為count的Application變量的值為6,但是按照我們程序本來的目的,這個(gè)變量的值應(yīng)當(dāng)為7,這就是出現(xiàn)了未期料的后果。
Lock方法用于對(duì)Application的值進(jìn)行鎖定,當(dāng)調(diào)用了此方法時(shí),其他用戶就不能夠?qū)pplication集合進(jìn)行修改,直到調(diào)用了Unlock方法后,其他用戶才能夠進(jìn)行修改,因此我們可以對(duì)上面的代碼進(jìn)行修改,如下:
<%
Application.Lock() '鎖定
Application("count") = Application("count") + 1 '修改
Application.UnLock() '解鎖
%>
在ASP剛剛問世的時(shí)候,有很多使用ASP制作的聊天室,他的原理就是利用Application集合是訪問站點(diǎn)所有用戶共享的特點(diǎn),將所有用戶所發(fā)表的聊天語(yǔ)句都存儲(chǔ)在Application中而制作的,當(dāng)然,現(xiàn)在由于這種方法需要占用比較大的服務(wù)器內(nèi)存資源,因此已經(jīng)很少使用了,我們不妨以這個(gè)例子來體會(huì)Application對(duì)象的特點(diǎn)。
程序的主要核心就是將Application中的內(nèi)容取出顯示,另外,在訪問者“說話”時(shí),將其所發(fā)送的內(nèi)容存入Application中即可,本案例代碼如下:
<%
If UCase(Trim(Request.ServerVariables("REQUEST_METHOD"))) = "POST" Then
Dim sCurrectWord
sCurrectWord = Trim(Request.Form("word"))
Application.Lock
Application("chatroom") = Application("chatroom") & "<br>" & Session.SessionID & "->" & sCurrectWord
Application.UnLock
End If
Response.Write("以下是聊天室的內(nèi)容:")
Response.Write(Application("chatroom"))
Response.Write("<hr>")
Response.Write("<form method=""post"" action="""">")
Response.Write("請(qǐng)輸入要說的話:<input name=""word"" type=""text"" />")
Response.Write("<input type=""submit"" value=""提交"" />")
Response.Write("</form>")
%>
依照我的變成習(xí)慣,首先我對(duì)用戶的發(fā)表進(jìn)行了處理,如果當(dāng)前提交了表單,那么首先獲取用戶所說的話,而后先調(diào)用Application.Lock方法鎖定Application,而后將用戶說的話附加在Application后并更新,而后調(diào)用UnLock方法解鎖。
下面進(jìn)入顯示的部分,即調(diào)用Response.Write()方法來輸出Application("chatroom")的值。
這個(gè)頁(yè)面的顯示效果如圖8.7所示。
圖8.7
如對(duì)本文有疑問,請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答??! 點(diǎn)擊進(jìn)入論壇