Global.asa 文件是一个可选文件,它可以包含可由 ASP 应用程序中的每个页面访问的对象、变量和方法的声明。
所有有效的浏览器脚本(JavaScript、VBScript、JScript、PerlScript 等)都可以在 Global.asa 中使用。
Global.asa 文件只能包含以下内容:
笔记:Global.asa 文件必须存放在ASP 应用程序的根目录下,每个应用程序只能有一个Global.asa 文件。
在 Global.asa 中,您可以告诉应用程序和会话对象在应用程序/会话启动时做什么以及在应用程序/会话结束时做什么。其代码放置在事件处理程序中。 Global.asa 文件可以包含四种类型的事件:
应用程序_OnStart会话_OnStart- 每当新用户在 ASP 应用程序中请求他或她的首页时,都会发生此事件。
会话结束时- 每次用户结束会话时都会发生此事件。用户在指定时间内(默认为 20 分钟)未请求页面后,用户会话结束。
应用程序_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> 标签在 Global.asa 中创建具有会话或应用程序范围的对象。
笔记:<object> 标签应该位于 <script> 标签之外!
<object runat="server" scope="
scope" id="
id" {progid="
progID"|classid="
classID"}>
....
</object>
Parameter | Description |
---|---|
scope | Sets the scope of the object (either Session or Application) |
id | Specifies a unique id for the object |
ProgID | An id associated with a class id. The format for ProgID is [Vendor.]Component[.Version] Either ProgID or ClassID must be specified. |
ClassID | Specifies a unique id for a COM class object. Either ProgID or ClassID must be specified. |
第一个示例使用 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>
You could reference the object "MyAd" from any page in the ASP application:
SOME .ASP FILE:
<%=MyAd.GetAdvertisement("/banners/adrot.txt")%>
TypeLibrary 是与 COM 对象对应的 DLL 文件内容的容器。通过在 Global.asa 文件中包含对 TypeLibrary 的调用,可以访问 COM 对象的常量,并且 ASP 代码可以更好地报告错误。如果您的 Web 应用程序依赖于在类型库中声明了数据类型的 COM 对象,则可以在 Global.asa 中声明类型库。
<!--METADATA TYPE="TypeLib"
file="
filename" uuid="
id" version="
number" lcid="
localeid"
-->
Parameter | Description |
---|---|
file | Specifies an absolute path to a type library. Either the file parameter or the uuid parameter is required |
uuid | Specifies a unique identifier for the type library. Either the file parameter or the uuid parameter is required |
version | Optional. Used for selecting version. If the requested version is not found, then the most recent version is used |
lcid | Optional. The locale identifier to be used for the type library |
服务器可能返回以下错误消息之一:
Error Code | Description |
---|---|
ASP 0222 | Invalid type library specification |
ASP 0223 | Type library not found |
ASP 0224 | Type library cannot be loaded |
ASP 0225 | Type library cannot be wrapped |
笔记:METADATA 标记可以出现在 Global.asa 文件中的任何位置(<script> 标记内部和外部)。但是,建议 METADATA 标记出现在 Global.asa 文件顶部附近。
Global.asa 文件中可以包含的内容的限制:
Global.asa 通常用于初始化变量。
下面的示例显示如何检测访问者首次到达网站的确切时间。时间存储在名为 "started" 的会话变量中,并且可以从应用程序中的任何 ASP 页访问 "started" 变量的值:
<script language="vbscript" runat="server">
sub Session_OnStart
Session("started")=now()
end sub
</script>
Global.asa 还可以用于控制页面访问。
下面的示例展示了如何将每个新访问者重定向到另一个页面,在本例中重定向到名为 "newpage.html" 的页面:
<script language="vbscript" runat="server">
sub Session_OnStart
Response.Redirect("newpage.html")
end sub
</script>
您可以在 Global.asa 文件中包含函数。
在下面的示例中,Application_OnStart 子例程在 Web 服务器启动时发生。然后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 文件:
<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>