ASP內建對象Application的應用

來源:互聯網
上載者:User

在Web應用程式中,當一個使用者訪問該應用時,Session類型的變數可以供這個使用者在該Web應用的所有頁面中共用資料;如果另一個使用者也同時訪問該 Web應用,他也擁有自己的Session變數,但兩個使用者之間無法通過Session變數共用資訊,而Application類型的變數則可以實現網站多個使用者之間在所有頁面中共用資訊。可以理解Session是局部變數,而Application則為全域變數。

在同一虛擬目錄及其子目錄下的所有 .asp 檔案構成了 ASP 應用程式。我們非但可以使用 Application 對象,在給定的應用程式的所有使用者之間共用資訊,並在伺服器運行期間持久的儲存資料。而且,Application 對象還有控制訪問應用程式層資料的方法和可用於在應用程式啟動和停止時觸發過程的事件。

一、Application("name")=Value
正如Session("name")=value一樣,Application對象也沒有內建的屬性。當然使用者可以自訂屬性,該屬性也可稱為集合。

一旦分配了Application對象的屬性,它就會持久地存在,直到關閉WEB伺服器服務使得 Application 停止。由於儲存在 Application 對象中的數值可以被應用程式的所有使用者讀取,所以 Application 對象的屬性特別適合在應用程式的使用者之間傳遞資訊。

<%
Application("MyName") = "webjx"
%>

二、Application.Lock
Lock 方法是禁止其他使用者修改Application對象的屬性,以確保在同一時刻僅有一個客戶可修改和存取 Application 變數。如果使用者沒有明確調用 Unlock 方法,則伺服器將會在 .asp 檔案結束或逾時後即解除對 Application 對象的鎖定。最簡單的就是進行頁面記數的例子了。

1,num.asp

<%
Application.Lock
Application("NumVisits") = Application("NumVisits") + 1
Application.Unlock
%>
你是本頁的第<%=Application("NumVisits")%>位訪問者

當然,若如果你需要記數的初始值那就該寫個判斷了。

<%
if Application("NumVisits")<9999 then
Application("NumVisits")=10000
end if
Application.Lock
Application("NumVisits") = Application("NumVisits") + 1
Application.Unlock
%>
你是本頁的第<%=Application("NumVisits")%>位訪問者

上面的程式,你會發現每重新整理一次,都會記數累加,如按IP值訪問來記數的話,則建立一個Session

2,vnum.asp

<%
if session("visitnum")="" then
Application.Lock
Application("NumVisits") = Application("NumVisits") + 1
Application.Unlock
session("visitnum")="visited"
end if
%>
你是本頁的第<%=Application("NumVisits")%>位訪問者

三、Application.Unlock
與Lock方法相反,Unlock方法是允許其他使用者修改 Application 對象的屬性。可以看出在上面的例子中,Unlock方法解除對象的鎖定,使得下一個用戶端能夠增加 NumVisits 的值。

當然需要注意的是:記數要確保伺服器不被重啟,因為所以的訪問是數值是建立在頁面之上的,並未進行儲存成檔案或儲存到資料庫這樣的處理。
一般當伺服器重新啟動就會觸發Application的事件了。

四、Application_OnEnd
Application_OnEnd 事件在應用程式退出時於 Session_OnEnd 事件之後發生,當然Application_OnEnd 事件的處理過程也必須寫在 Global.asa 檔案之中。
比如上面的程式中,若伺服器關機必然會觸發Application_OnEnd事件,那麼該事件就可以進行資料儲存的工作,已使得下次資料的續沿。
當然Application_OnEnd 事件在應用程式退出時於Session_OnEnd 事件之後發生


<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
.............
Sub Application_OnEnd
.............
End Sub
.............
</SCRIPT>

五、Application_OnStart
Application_OnStart 事件在首次建立新的會話( 即 Session_OnStart 事件 )之前發生。當WEB伺服器啟動並允許對應用程式所包含的檔案進行請求時就觸發Application_OnStart事件。


<SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server>
.............
Sub Application_OnStart
.............
End Sub
.............
</SCRIPT>


所以現在可以將Global.asa內部的代碼可以想象


<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Sub Application_OnStart
.....................
End Sub

Sub Session_OnStart
.....................
End Sub

Sub Session_OnEnd
.....................
End Sub

Sub Application_OnEnd
.....................
End Sub
</SCRIPT>


具體Global.asa是怎麼一回事?且聽下回分解啊:)

5大對象基本掌握了,來個例題練習下

<%@ LANGUAGE = VBScript %>
<% Option Explicit %>
<Html>
<title>站長資訊</title>
<body>
<%
'設定頁面不使用緩衝
Response.Expires = 0
%>
<%
dim GuessNum
on error resume next
GuessNum=Request("Number")
if GuessNum="" then GuessNum="0" End if
GuessNum=Clng(GuessNum)

Session("Count")=Session("Count") + 1
if Session("Count") < 10 and GuessNum <> session("Number") then

%>

<form action="guessNumber.asp">
<input type="text" name="Number">
    <input type="submit" value="提交">
</form>
<hr>
<%
end if
if GuessNum<0 or guessNum>100 then
Response.write "請輸入1~100之間的整數"
elseif GuessNum=0 then
    session("Count") = 0
Randomize
    session("Number") = Int(rnd * 100 + 1)
Response.write "請輸入1~100之間的整數"
elseif GuessNum > session("Number") then
    response.write "你猜的太大了"
elseif GuessNum < session("Number") then
    response.write "中國站長"
elseif GuessNum = session("Number") then
    response.write "祝賀你,猜對了"
end if

Response.write "<br>共猜了" & Session("Count") & "次"
if Session("Count")=10 then
Response.write "答案是" & Session("Number")
end if
%>
<a href="guessnumber.asp?Number=0">中國站長</a>
</body>
</html>

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。