📄 0007.htm
字号:
<p ALIGN="JUSTIFY" class="font3">Dim Cookie, Subkey</p>
<p ALIGN="JUSTIFY" class="font3">'Display the entire cookie collection.</p>
<p ALIGN="JUSTIFY" class="font3">For Each Cookie in Request.Cookies</p>
<p ALIGN="JUSTIFY" class="font3">Response.Write Cookie & "<BR>"</p>
<p ALIGN="JUSTIFY" class="font3">If Request.Cookies(Cookie).HasKeys Then</p>
<p ALIGN="JUSTIFY" class="font3">'Display the subkeys</p>
<p ALIGN="JUSTIFY" class="font3">For Each Subkey in Request.Cookies(Cookie)</p>
<p ALIGN="JUSTIFY" class="font3">Response.Write Subkey & "=" &
Request.Cookies(Cookie)(Subkey) & "<BR>"</p>
<p ALIGN="JUSTIFY" class="font3">Next</p>
<p ALIGN="JUSTIFY" class="font3">Else</p>
<p ALIGN="JUSTIFY" class="font3">Response.Write "No subkeys in this cookie
<BR>"</p>
<p ALIGN="JUSTIFY" class="font3">End If</p>
<p ALIGN="JUSTIFY" class="font3">Next </p>
<p ALIGN="JUSTIFY" class="font3">%></p>
<p ALIGN="JUSTIFY" class="font3">遍历对象集合</p>
<p ALIGN="JUSTIFY" class="font3">Session 和 Application
集合可以保存数量变量或者对象实例。Contents
集合拥有数量变量和通过调用 Server.CreateObject 生成的对象实例。StaticObjects
集合拥有在 Global.asa 文件中使用 HTML <OBJECT> 元素创建的对象。</p>
<p ALIGN="JUSTIFY" class="font3">在遍历包含对象的集合时,可以访问对象的标识符或对象的方法和属性。例如,假设应用程序使用一些对象创建用户帐号,而且每个对象有初始化方法,可以遍历
StaticObjects 集合来调用每个初始化方法:</p>
<p ALIGN="JUSTIFY" class="font3"><%</p>
<p ALIGN="JUSTIFY" class="font3">For Each Object in Session.StaticObjects</p>
<p ALIGN="JUSTIFY" class="font3">Session.StaticObjects(Object).InitializeUser</p>
<p ALIGN="JUSTIFY" class="font3">Next</p>
<p ALIGN="JUSTIFY" class="font3">%></p>
<p ALIGN="JUSTIFY" class="font3">ASP 集合有何不同之处?</p>
<p ALIGN="JUSTIFY" class="font3">尽管在本主题中讨论的 ASP 集合与 Visual Basic
的 Collection 对象非常相似,但还是有些不同。ASP 集合支持 Count
属性和 Item 方法,但不支持 Add 和 Remove 方法。</p>
<p ALIGN="JUSTIFY" class="font3">设置对象作用域</p>
<p ALIGN="JUSTIFY" class="font3">对象的作用域决定哪些脚本可以使用该对象。默认情况下,当您创建对象实例时,该对象具有页作用域。同一
ASP 页中的任何脚本命令都能使用该页作用域的对象;当 ASP
页送回客户端时,该对象即被释放。对大多数对象来说,推荐的作用域是页作用域。您可以改变一个对象的作用域,使其可被其他页的脚本使用。本主题将解释如何使用页作用域的对象以及如何改变对象的作用域。</p>
<p ALIGN="JUSTIFY" class="font3">使用页作用域对象</p>
<p ALIGN="JUSTIFY" class="font3">在 ASP 页上用 Server.CreateObject
创建的对象在该页的生存期内一直存在。该对象对该页的任何脚本命令都是可访问的,当
ASP
处理完该页时,该对象即被释放。因此,对象具有该页的作用域或生命周期。
</p>
<p ALIGN="JUSTIFY" class="font3">在用 Visual Basic 或 VBScript 编程时,要注意在
ASP
处理完该页之前不要释放对象。例如,以下语句经常用于通过将对象变量赋以
Nothing 值来释放对象:</p>
<p ALIGN="JUSTIFY" class="font3">Set myObj = Nothing</p>
<p ALIGN="JUSTIFY" class="font3">如果您在 ASP
页中包含了该语句,那么任何使用 myObj
的企图都将会返回一个预期的错误代码。但在内部,即使在对象释放以后,ASP
仍保留对它的引用。当您在脚本中不能使用对象时,对象的资源直到
ASP
处理完页之后才释放。同样,如果您通过创建另一个对象实例并将其赋给已使用过的对象变量来释放该对象时,ASP
将保留对原对象实例的引用。对大多数脚本来说,创建多个对象可能不会产生问题,但如果对象使用共享资源,比如数据库连接,就有可能出现问题。</p>
<p ALIGN="JUSTIFY" class="font3">由于对象有页作用域,所以不要依靠手工释放的对象。例如,以下的循环创建
1001 个 Connection 对象,它将能打开大多数的连接甚至于一个大型的 SQL
server:</p>
<p ALIGN="JUSTIFY" class="font3"><% </p>
<p ALIGN="JUSTIFY" class="font3">For I = 0 to 1000</p>
<p ALIGN="JUSTIFY" class="font3">Set Conn =
Server.CreateObject("ADODB.Connection")</p>
<p ALIGN="JUSTIFY" class="font3">Conn.Open "connection string"</p>
<p ALIGN="JUSTIFY" class="font3">Next </p>
<p ALIGN="JUSTIFY" class="font3">%></p>
<p ALIGN="JUSTIFY" class="font3">总的来说,应该尽量避免在一个循环内部创建对象。如果无法避免,您应该手工释放被对象使用过的资源。如果
Connection
对象仅被创建一次,且数据资源的物理连接在每个循环中被打开然后关闭,那么上例将会正常运行:</p>
<p ALIGN="JUSTIFY" class="font3"><%</p>
<p ALIGN="JUSTIFY" class="font3">Set Conn =
Server.CreateObject("ADODB.Connection")</p>
<p ALIGN="JUSTIFY" class="font3">For I = 0 to 1000</p>
<p ALIGN="JUSTIFY" class="font3">Conn.Open "connection string"</p>
<p ALIGN="JUSTIFY" class="font3">Conn.Close </p>
<p ALIGN="JUSTIFY" class="font3">Next</p>
<p ALIGN="JUSTIFY" class="font3">%></p>
<p ALIGN="JUSTIFY" class="font3">为对象赋予会话作用域</p>
<p ALIGN="JUSTIFY" class="font3">在应用程序中,对于每个新会话,都会创建
session-scope
对象,并且在会话结束后会将其释放。因此,每个活动的会话都有一个对象。会话作用域用于从多个脚本中调用的对象,但只影响一个用户会话。您可以只在需要时才为对象赋予会话作用域。如果确实需要使用会话作用域,那么就必须了解提供对象的组件的线程模型,因为它影响性能和对象的安全环境。详细信息,请参阅本主题的摳呒缎畔ⅲ盒阅芪侍鈹
。</p>
<p ALIGN="JUSTIFY" class="font3">要为对象赋予会话作用域,请将对象存储在
ASP Session 内建对象中,您既可以在 Global.asa 文件中使用 <OBJECT>
标记,也可以在 ASP 页上使用 Server.CreateObject
方法创建具有会话作用域的对象实例。 </p>
<p ALIGN="JUSTIFY" class="font3">在 Global.asa 文件中,您可用扩展了 RUNAT
属性(必须设置为 Sever)和 SCOPE 属性(必须设置为 Session)的
;OBJECT> 标记。以下示例创建一个 Ad Rotator 对象的会话作用域实例:</p>
<p ALIGN="JUSTIFY" class="font3"><OBJECT RUNAT=Server SCOPE=Session ID=MyAd
PROGID="MSWC.Adrotator"></p>
<p ALIGN="JUSTIFY" class="font3"></OBJECT></p>
<p ALIGN="JUSTIFY" class="font3">一旦您在 Session
对象中存储了对象,您就可以从应用程序的任何页中访问该对象。下面的语句使用上例中由
<OBJECT> 标记创建的对象实例:</p>
<p ALIGN="JUSTIFY" class="font3"><%= MyAd.GetAdvertisement("addata.txt")
%> </p>
<p ALIGN="JUSTIFY" class="font3">在 ASP 页上,您也可以使用 Server.CreateObject
方法将对象存储在 Session 内建对象中。以下示例在 Session 对象中存储
Ad Rotator 对象的一个实例。</p>
<p ALIGN="JUSTIFY" class="font3"><% Set Session("MyAd") =
Server.CreateObject("MSWC.Adrotator") %> </p>
<p ALIGN="JUSTIFY" class="font3">要显示广告,您首先应该获取存储在 Session
对象中的 Ad Rotator 对象的实例,然后才能调用方法来显示对象:</p>
<p ALIGN="JUSTIFY" class="font3"><% Set MyAd = Session("MyAd") %> </p>
<p ALIGN="JUSTIFY" class="font3"><%= MyAd.GetAdvertisement("addata.txt")
%> </p>
<p ALIGN="JUSTIFY" class="font3">在用 <OBJECT> 标记声明的对象被某个 .asp
文件中的脚本命令引用之前,ASP 并不创建其实例。Server.CreateObject
方法则立即创建该对象实例。因此,对会话作用域对象来说,使用
<OBJECT> 标记要比 Server.CreateObject 属性更好。</p>
<p ALIGN="JUSTIFY" class="font3">为对象赋予应用程序作用域</p>
<p ALIGN="JUSTIFY" class="font3">application-scope
对象是在应用程序启动时就创建的对象的单个实例。该对象由所有客户端请求共享。仅在极少数情况下,您才需要为对象赋予应用程序作用域。一些实用程序对象,例如计数器等,可能需要应用程序作用域。但一般来说,您可用在下一节中建议的替代方案。另外,线程模型会影响性能和对象安全环境(请参阅本主题的摳呒缎畔ⅲ盒阅芪侍鈹)。</p>
<p ALIGN="JUSTIFY" class="font3">要为对象赋予应用程序作用域并将其存储在
ASP Application 内建对象中,既可以使用 Global.asa 文件中的 <OBJECT>
标记,也可以使用 ASP 页上的 Server.CreateObject
方法创建应用程序作用域的对象实例。</p>
<p ALIGN="JUSTIFY" class="font3">在 Global.asa 文件中,您可用扩展了 RUNAT
属性(必须设置为 Sever)和 SCOPE 属性(必须设置为 Session)的
;OBJECT> 标记。在 ASP 页中,您可以使用 Server.CreateObject
将对象实例存储在 Application 内建对象中。关于使用 <OBJECT>
标记和 Server.CreateObject
的示例,请参阅上一节撐
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -