ASP Global.asa 檔案
Global.asa 檔案
Global.asa 檔案是一個可選檔案,其中可以包含 ASP 應用程式中所有頁面都可以訪問的物件、變數和方法的宣告。
可以在 Global.asa 中使用所有有效的瀏覽器指令碼(JavaScript、VBScript、JScript、PerlScript 等)。
Global.asa 檔案只能包含以下內容:
- Application 事件
- Session 事件
- <object> 宣告
- TypeLibrary 宣告
- #include 指令
注意: Global.asa 檔案必須儲存在 ASP 應用程式的根目錄中,並且每個應用程式只能有一個 Global.asa 檔案。
Global.asa 中的事件
在 Global.asa 中,您可以告知應用程式和會話物件在應用程式/會話開始時做什麼,以及在應用程式/會話結束時做什麼。程式碼放置在事件處理程式中。Global.asa 檔案可以包含四種類型的事件:
Application_OnStart - 當第一個使用者訪問 ASP 應用程式的第一個頁面時發生。在 Web 伺服器重啟後或 Global.asa 檔案編輯後發生此事件。“Session_OnStart”事件緊隨此事件之後發生。Session_OnStart - 每次新使用者請求 ASP 應用程式中的第一個頁面時都會發生此事件。
Session_OnEnd - 每次使用者結束會話時都會發生此事件。在使用者未在指定時間(預設為 20 分鐘)內請求頁面後,使用者會話即結束。
Application_OnEnd - 在最後一個使用者結束會話後發生此事件。通常,在 Web 伺服器停止時會發生此事件。此過程用於在應用程式停止後清理設定,例如刪除記錄或將資訊寫入文字檔案。
Global.asa 檔案可能看起來像這樣:
<script language="vbscript" runat="server">
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>
注意: 由於我們無法使用 ASP 指令碼分隔符(<% 和 %>)在 Global.asa 檔案中插入指令碼,因此我們將子例程放在 HTML <script> 元素內。
<object> 宣告
可以透過使用 <object> 標籤在 Global.asa 中建立具有會話或應用程式範圍的物件。
注意: <object> 標籤應放在 <script> 標籤之外!
語法
<object runat="server" scope="scope" id="id" {progid="progID"|classid="classID"}>
....
</object>
引數 | 描述 |
---|---|
scope | 設定物件的範圍(Session 或 Application) |
id | 為物件指定一個唯一的 ID |
ProgID | 與類 ID 關聯的 ID。ProgID 的格式為 [Vendor.]Component[.Version] 必須指定 ProgID 或 ClassID 中的一個。 |
ClassID | 為 COM 類物件指定一個唯一的 ID。 必須指定 ProgID 或 ClassID 中的一個。 |
示例
第一個示例使用 ProgID 引數建立了一個會話範圍的物件“MyAd”。
<object runat="server" scope="session" id="MyAd" progid="MSWC.AdRotator">
</object>
第二個示例使用 ClassID 引數建立了一個應用程式範圍的物件“MyConnection”。
<object runat="server" scope="application" id="MyConnection"
classid="Clsid:8AD3067A-B3FC-11CF-A560-00A0C9081C21">
</object>
在 Global.asa 檔案中宣告的物件可被應用程式中的任何指令碼使用。
GLOBAL.ASA
<object runat="server" scope="session" id="MyAd" progid="MSWC.AdRotator">
</object>
您可以從 ASP 應用程式中的任何頁面引用物件“MyAd”。
SOME .ASP FILE
<%=MyAd.GetAdvertisement("/banners/adrot.txt")%>
TypeLibrary 宣告
TypeLibrary 是一個 DLL 檔案內容的容器,該檔案對應一個 COM 物件。透過在 Global.asa 檔案中包含對 TypeLibrary 的呼叫,可以訪問 COM 物件中的常量,並且 ASP 程式碼可以更好地報告錯誤。如果您的 Web 應用程式依賴於已在型別庫中聲明瞭資料型別的 COM 物件,則可以在 Global.asa 中宣告型別庫。
語法
<!--METADATA TYPE="TypeLib"
file="filename" uuid="id" version="number" lcid="localeid"
-->
引數 | 描述 |
---|---|
file | 指定型別庫的絕對路徑。 file 引數或 uuid 引數是必需的。 |
uuid | 指定型別庫的唯一識別符號。 file 引數或 uuid 引數是必需的。 |
version | 可選。用於選擇版本。如果找不到請求的版本,則使用最新版本。 |
lcid | 可選。要用於型別庫的區域設定識別符號。 |
錯誤值
伺服器可以返回以下錯誤訊息之一:
錯誤程式碼 | 描述 |
---|---|
ASP 0222 | 無效的型別庫規範 |
ASP 0223 | 找不到型別庫 |
ASP 0224 | 無法載入型別庫 |
ASP 0225 | 無法包裝型別庫 |
注意: 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 通常用於初始化變數。
下面的示例顯示瞭如何檢測訪問者首次訪問網站的確切時間。時間儲存在名為“started”的 Session 變數中,並且可以在應用程式中的任何 ASP 頁面訪問“started”變數的值。
<script language="vbscript" runat="server">
sub Session_OnStart
Session("started")=now()
end sub
</script>
Global.asa 還可用於控制頁面訪問。
下面的示例顯示瞭如何將每個新訪問者重定向到另一個頁面,在本例中重定向到名為“newpage.asp”的頁面。
<script language="vbscript" runat="server">
sub Session_OnStart
Response.Redirect("newpage.asp")
end sub
</script>
您還可以在 Global.asa 檔案中包含函式。
在下面的示例中,當 Web 伺服器啟動時,Application_OnStart 子例程會發生。然後 Application_OnStart 子例程呼叫另一個名為“getcustomers”的子例程。“getcustomers”子例程開啟資料庫並從“customers”表中檢索記錄集。記錄集被分配給一個數組,該陣列可以在任何 ASP 頁面中訪問,而無需查詢資料庫。
<script language="vbscript" runat="server">
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”變數加一。
- 每次觸發 Session_OnEnd 子例程時,它會從“visitors”中減一。
Global.asa 檔案
<script language="vbscript" runat="server">
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 檔案中顯示當前訪問者的數量:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>現在有 <%response.write(Application("visitors"))%> 位線上!</p>
</body>
</html>