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 檔案可能如下所示:

<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>

註解:由於我們無法在Global.asa 檔案中使用ASP 的腳本分隔符號(<% 和%>) 插入腳本,我們需要把子程式放置在HTML 的< script> 元素內部。


<object> 宣告

可透過使用 <object> 標籤在 Global.asa 檔案中建立帶有 session 或 application 作用域的物件。

註解:<object> 標籤應位於 <script> 標籤外部!

語法

<object runat="server" scope="scope" id="id" {progid="progID"|classid="classID"}>
....
</object>

描述

#參數
#scope

#設定物件(Session 或Application)的作用域。
id######為物件指定一個唯一的 id。 ############ProgID######與 ClassID 關聯的 id。 ProgID 的格式是:[Vendor.]Component[.Version]。 ###ProgID 或 ClassID 必要被指定。 ###############ClassID######為 COM 類別物件指定一個唯一的 id。 ###ProgID 或 ClassID 必要被指定。 ################

實例

第一個實例透過使用ProgID 參數建立了一個名為"MyAd" 的session 作用域物件:

<object runat="server" scope ="session" id="MyAd" progid="MSWC.AdRotator">
</object>

第二個實例透過使用ClassID 參數建立了一個名為"MyConnection" 的application 作用域物件:

<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" 物件:

#某.ASP 文件:

<%=MyAd.GetAdvertisement("/banners/adrot.txt")%>


TypeLibrary 宣告

# TypeLibrary(類型庫)是一個容器,其中裝有對應於COM 物件的DLL 檔案。透過在 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 0224
#錯誤代碼描述
#ASP 0222無效的型別庫規格
ASP 0223沒有找到型別庫
###無法載入型別庫############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 常用於初始化變數。

下面的實例示範如何偵測訪客首次到達 Web 網站的確切時間。時間儲存在名為"started" 的Session 物件中,且"started" 變數的值可被應用程式中的任何ASP 頁面存取:

<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" 加 1。

  • 每當 Session_OnEnd 子程式觸發時,子程式就會從變數 "visitors" 減 1。

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>There are <%response.write (Application("visitors"))%> online now!</p>
</body>
</html>