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)的作用域。 |
id | 为对象指定一个唯一的 id。 |
ProgID | 与 ClassID 关联的 id。ProgID 的格式是:[Vendor.]Component[.Version]。
ProgID 或 ClassID 必需被指定。 |
ClassID | 为 COM 类对象指定一个唯一的 id。 ProgID 或 ClassID 必需被指定。 |
實例
第一個實例通過使用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 | 没有找到类型库 |
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 頁面訪問:
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>