ASP 全局.asa 文件
全局.asa 文件
全局.asa 文件是一个可选文件,它可以包含对对象的声明,变量和方法,这些对象,变量和方法可以被 ASP 应用程序中的每个页面访问。
所有有效的浏览器脚本(JavaScript,VBScript,JScript,PerlScript 等)都可以在 Global.asa 中使用。
全局.asa 文件只能包含以下内容
- 应用程序事件
- 会话事件
- <object> 声明
- 类型库声明
- #include 指令
注意: 全局.asa 文件必须存储在 ASP 应用程序的根目录中,每个应用程序只能有一个全局.asa 文件。
全局.asa 中的事件
在 Global.asa 中,您可以告诉应用程序和会话对象在应用程序/会话开始时以及在应用程序/会话结束时该做什么。 此代码放在事件处理程序中。 全局.asa 文件可以包含四种类型的事件
Application_OnStart - 当第一个用户调用 ASP 应用程序中的第一个页面时发生。 此事件发生在 Web 服务器重新启动后或 Global.asa 文件被编辑后。 “Session_OnStart”事件在此事件后立即发生。Session_OnStart - 此事件在每次新用户请求 ASP 应用程序中的第一个页面时发生。
Session_OnEnd - 此事件在每次用户结束会话时发生。 用户会话在用户在指定时间内未请求页面后结束(默认情况下为 20 分钟)。
Application_OnEnd - 此事件发生在最后一个用户结束会话后。 通常,此事件发生在 Web 服务器停止时。 此过程用于在应用程序停止后清理设置,例如删除记录或将信息写入文本文件。
全局.asa 文件可能看起来像这样
<script language="vbscript" runat="server">
sub Application_OnStart
'一些代码
end sub
sub Application_OnEnd
'一些代码
end sub
sub Session_OnStart
'一些代码
end sub
sub Session_OnEnd
'一些代码
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 | 设置对象的范围(会话或应用程序) |
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") %>
类型库声明
类型库是与 COM 对象相对应的 DLL 文件内容的容器。 通过在 Global.asa 文件中包含对类型库的调用,可以访问 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”的会话变量中,并且可以从应用程序中的任何 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 文件中包含函数。
在下面的例子中,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>
全局.asa 例子
在这个例子中,我们将创建一个 Global.asa 文件,它计算当前访问者的数量。
- Application_OnStart 在服务器启动时将 Application 变量“visitors”设置为 0
- Session_OnStart 子例程在每次新访客到达时将“visitors”变量加一
- Session_OnEnd 子程序每次触发时,都会将 "visitors" 的值减一。
全局.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>