ASP Global.asa
Global.asa 文件
Global.asa 檔案是一個可選的文件,它可包含被ASP 應用程式中每個頁面存取的物件、變數和方法的聲明。
所有合法的瀏覽器腳本(JavaScript、VBScript、JScript、PerlScript 等等)都能在 Global.asa 中使用。
Global.asa 檔案只能包含下列內容:
Application 事件
Session 事件
<object> 宣告
TypeLibrary 宣告
#include 指令
#註解:Global.asa 檔案必須存放在ASP 應用程式的根目錄中,而且每個應用程式只能有一個Global.asa 檔案。
Global.asa 中的事件
在Global.asa 中,您可以告訴application 和session 物件當application/session 開始時做什麼,當application/session 結束時做什麼。完成這項任務的程式碼被放置在事件句柄中。 Global.asa 檔案能包含四種類型的事件:
Application_OnStart - 此事件會在第一個使用者呼叫 ASP 應用程式的第一個頁面時發生。此事件會在 Web 伺服器重新啟動或 Global.asa 檔案被編輯之後發生。 "Session_OnStart" 事件會在此事件發生後立即發生。Session_OnStart - 此事件會在每當新使用者請求他(她)在 ASP 應用程式中的第一個頁面時發生。
Session_OnEnd - 此事件會在每當使用者結束 session 時發生。在規定的時間(預設的時間為 20 分鐘)內如果使用者沒有要求任何頁面,使用者 session 就會結束。
Application_OnEnd - 此事件會在最後一個使用者結束其 session 之後發生。典型的情況是,此事件會在 Web 伺服器停止時發生。這個子程式用於在應用程式停止後清除設置,例如刪除記錄或寫入資訊到文字檔案中。
一個Global.asa 檔案可能如下所示:
sub Application_OnStart
'some code
end sub
sub Application_OnEnd
'some code
end sub
sub Session_OnStart
'some code
end sub
sub Session_OnEnd
'some code
end sub
</script>
註解:由於我們無法在Global.asa 檔案中使用ASP 的腳本分隔符號(<% 和%>) 插入腳本,我們需要把子程式放置在HTML 的< script> 元素內部。
<object> 宣告
可透過使用 <object> 標籤在 Global.asa 檔案中建立帶有 session 或 application 作用域的物件。
註解:<object> 標籤應位於 <script> 標籤外部!
語法
....
</object>
#參數 | |
#scope#設定物件(Session 或Application)的作用域。 |
實例
第一個實例透過使用ProgID 參數建立了一個名為"MyAd" 的session 作用域物件:
</object>
第二個實例透過使用ClassID 參數建立了一個名為"MyConnection" 的application 作用域物件:
classid="Clsid:8AD3067A-B3FC-11CF-A560-00A0C9081C21">
##< /object>
在Global.asa 檔案中宣告的物件可被應用程式中的任何腳本使用:
# <object runat="server" scope="session" id="MyAd" progid="MSWC.AdRotator">
</object>
您可以從ASP 應用程式中的任意頁面引用"MyAd" 物件:
#某.ASP 文件:
<%=MyAd.GetAdvertisement("/banners/adrot.txt")%>
TypeLibrary 宣告
# TypeLibrary(類型庫)是一個容器,其中裝有對應於COM 物件的DLL 檔案。透過在 Global.asa 檔案中包含對 TypeLibrary 的調用,可以存取 COM 物件的常數,同時 ASP 程式碼也能更好地報告錯誤。如果您的 Web 應用程式依賴已在類型庫中聲明的資料類型的 COM 對象,您可以在 Global.asa 中對類型庫進行聲明。
語法
file="filename" uuid="id" version="number" lcid="localeid"
-->
參數 | #描述 |
---|---|
file | 規定指向型別庫的絕對路徑。 file 參數或 uuid 參數,兩者缺一不可。 |
uuid | 規定了類型庫的唯一的識別碼。 file 參數或 uuid 參數,兩者缺一不可。 |
version | 可選。用於選擇版本。如果沒有找到需要的版本,將使用最接近的版本。 |
lcid | 可選。用於類型庫的地區標識符。 |
錯誤值
伺服器會傳回以下的錯誤訊息之一:
#錯誤代碼 | 描述 |
---|---|
#ASP 0222 | 無效的型別庫規格 |
ASP 0223 | 沒有找到型別庫 |
註解:METADATA 標籤可出現在 Global.asa 檔案中的任何位置(在 <script> 標籤的內外皆可)。然而,我們還是推薦將 METADATA 標籤放置於 Global.asa 檔案的頂部。
限定
關於可以在Global.asa 檔案中引用的內容的限定:
您無法顯示Global.asa 檔案中的文字。此文件無法顯示資訊。
您只能在 Application_OnStart 和 Application_OnEnd 子程式中使用 Server 和 Application 物件。在 Session_OnEnd 子程式中,您可以使用 Server、Application 和 Session 物件。在 Session_OnStart 子程式中,您可以使用任何內建的物件。
如何使用子程式
Global.asa 常用於初始化變數。
下面的實例示範如何偵測訪客首次到達 Web 網站的確切時間。時間儲存在名為"started" 的Session 物件中,且"started" 變數的值可被應用程式中的任何ASP 頁面存取:
sub Session_OnStart
Session("started")=now()
end sub
</script>
#Global.asa 也可使用於控制頁面存取。
下面的實例示範如何把每個新的訪客重新導向到另一個頁面,在這個例子中會導向到一個名為"newpage.asp" 的頁面:
sub Session_OnStart
Response.Redirect("newpage.asp")
end sub
</script>
您可以在Global.asa 檔案中包含函數。
在下面的實例中,當 Web 伺服器啟動時,Application_OnStart 子程式也會啟動。然後,Application_OnStart 子程式會呼叫另一個名為 "getcustomers" 的子程式。 "getcustomers" 子程式會開啟一個資料庫,然後從 "customers" 表中取回一個記錄集。此記錄集會賦值給一個數組,在不查詢資料庫的情況下,任何ASP 頁面都能夠存取這個數組:
sub Application_OnStart
getcustomers
end sub
sub getcustomers
set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft. Jet.OLEDB.4.0"
conn.Open "c:/webdata/northwind.mdb"
set rs=conn.execute("select name from customers")
Application("customers")=rs .GetRows
rs.Close
conn.Close
end sub
#</script>
Global.asa 實例
在這個實例中,我們將建立一個計算目前訪客數的 Global.asa 檔案。
當伺服器啟動時,Application_OnStart 設定 Application 變數 "visitors" 的值為 0。
每當有新的訪客來訪時,Session_OnStart 子程式就會為變數 "visitors" 加 1。
每當 Session_OnEnd 子程式觸發時,子程式就會從變數 "visitors" 減 1。
Global.asa 檔案:
Sub Application_OnStart
Application("visitors")=0
End Sub
Sub Session_OnStart
Application.Lock
Application("visitors")=Application("visitors")+1
Application.UnLock
End Sub
Sub Session_OnEnd
Application.Lock
Application("visitors")=Application("visitors")-1
Application.UnLock
#End Sub
</script>
在ASP 檔案中,顯示目前訪客的數量:
<html>
<head>
</head>
<body>
<p>There are <%response.write (Application("visitors"))%> online now!</p>
</body>
</html>