Latest web development tutorials

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 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 常用於初始化變量。

下面的實例演示瞭如何檢測訪客首次到達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>