您的位置:首页精文荟萃软件资讯 → ASP集合使用

ASP集合使用

时间:2004/10/7 19:07:00来源:本站整理作者:蓝点我要评论(0)


            
             
              
             
            

               
               

            



            大多数ASP 内建对象支持集合。集合是存储字符串、数字、对象和其他值的地方。除了
在存储或取出项目时集合会自动扩展与搜索外,集合与数组非常相近。与数组不同的是,
集合被修改后,项目的位置将会移动。可以通过集合中项目的名称、索引或者通过在集
合的所有项目中遍历访问项目。
通过名称和索引访问项目
通过使用项目名称可以访问集合中的具体项目。例如,Contents 集合拥有在 Session
对象中保存的所有变量。同样也拥有由 Server.CreateObject 创建的所有对象。假设
在Session 对象中存储了下列用户信息:
可以使用在集合中存储项目时关联的名称访问项目。例如,下面的表达式返回字符串
“Sam”:
通过使用与项目关联的索引或号码也可以访问项目。例如,下面的表达式检索存储在
Session 对象的第二个存储槽中的信息并且返回“Woo”:
ASP 集合从 1开始编号。当在集合中增加或删除项目时,与项目关联的索引将会改变。
所以不能认为项目的索引始终不变。正如将在下面的主题中说明的那样,利用索引的
访问一般用来遍历集合,或访问只读集合中的项目。
通过使用速记的名称可以访问项目。ASP 以特定的顺序搜索与对象关联的集合。如果
在对象的集合中特定名称的项目只出现一次的话,可以消除该集合的名称:
访问存储在 Application 或 Session 对象中的项目时,消除集合名称一般是安全的。
但是,对于 Request 对象,最好指定集合名称,因为该集合很可能包含重复的名称。
遍历集合
在集合的所有项目中遍历可以了解集合中存储的项目或修改项目。遍历集合时,必须
提供集合名称。例如,可以使用 VBScript 中的 For...Each 语句访问存储在Session
对象中的项目:
可以使用 VBScript 中的 For...Next 语句遍历集合。例如,要列出上例中存储在
Session 中的三个项目,可以使用下列语句。
因为一般不知道存储在集合中的项目个数,ASP 支持集合的 Count 属性,这个属性返
回集合中的项目数。可以使用 Count 属性指定计数器的终值。
可以在脚本中使用 for 语句在集合中循环。在 JScript 的 for 语句中使用Count 属
性时,为了收到更大的效果,应该将 Count 值分配给本地变量并使用该变量设置计数
器终值。这样,脚本引擎就不需要每次循环都查寻 Count 的值。下面的例子展示了这
个技巧:
Microsoft JScript 3.0 引入了 Enumerator 对象。可以使用该对象遍历 ASP 集合。
atEnd 方法指出了集合中是否还存在项目。moveNext 方法移动到集合中的下一个项目。
遍历带子关键字 (Subkeys) 的集合
脚本在单一 cookie 中嵌入相关值以减少在浏览器和 Web 服务器之间传送的 cookie
数目。因此 Request 和 Response 对象的 Cookies 集合能够在单一项目中拥有多个值。
这些子项目或子关键字可以被单个访问。只有 Request.Cookies 和 Response.Cookies
集合支持子关键字 (Subkeys)。Request.Cookies 只支持读操作;Response.Cookies只
支持写操作。
可以列举 Request.Cookie 集合中所有的 cookie 以及 Cookie 中所有的子关键字
(Subkeys)。但是,如果在没有子关键字 (Subkeys) 的 Cookie 上遍历子关键字,将不
会产生任何结果。通过使用 .HasKeys 语法首先检查cookie是否含有子关键字(Subkeys),
就可以避免这种情况。下面的这个例子展示了这个技巧。
遍历对象集合
Session 和 Application 集合可以保存数量变量或者对象实例。Contents 集合拥有数
量变量和通过调用 Server.CreateObject 生成的对象实例。StaticObjects集合拥有在
Global.asa 文件中使用 HTML 元素创建的对象。 在遍历包含对象的集合时,可以访问
对象的标识符或对象的方法和属性。例如,假设应用程序使用一些对象创建用户帐号,
而且每个对象有初始化方法,可以遍历 StaticObjects 集合来调用每个初始化方法:
ASP 集合有何不同之处? 尽管在本主题中讨论的 ASP 集合与 Visual Basic的
Collection 对象非常相似,但还是有些不同。ASP 集合支持 Count 属性和 Item 方法,
但不支持 Add 和 Remove 方法。 设置对象作用域 对象的作用域决定哪些脚本可以使
用该对象。默认情况下,当您创建对象实例时,该对象具有页作用域。同一 ASP 页中
的任何脚本命令都能使用该页作用域的对象;当 ASP 页送回客户端时,该对象即被释
放。对大多数对象来说,推荐的作用域是页作用域。您可以改变一个对象的作用域,使
其可被其他页的脚本使用。本主题将解释如何使用页作用域的对象以及如何改变对象的
作用域。
使用页作用域对象 在 ASP 页上用 Server.CreateObject 创建的对象在该页的生存期内
一直存在。该对象对该页的任何脚本命令都是可访问的,当 ASP 处理完该页时,该对象
即被释放。因此,对象具有该页的作用域或生命周期。 在用Visual Basic 或 VBScript
编程时,要注意在 ASP 处理完该页之前不要释放对象。例如,以下语句经常用于通过将
对象变量赋以 Nothing 值来释放对象: Set myObj = Nothing 如果您在 ASP 页中包含
了该语句,那么任何使用 myObj 的企图都将会返回一个预期的错误代码。但在内部,即
使在对象释放以后,ASP仍保留对它的引用。当您在脚本中不能使用对象时,对象的资源
直到ASP处理完页之后才释放。同样,如果您通过创建另一个对象实例并将其赋给已使用
过的对象变量来释放该对象时,ASP 将保留对原对象实例的引用。对大多数脚本来说,
创建多个对象可能不会产生问题,但如果对象使用共享资源,比如数据库连接,就有可
能出现问题。由于对象有页作用域,所以不要依靠手工释放的对象。例如,以下的循环
创建 1001 个 Connection 对象,它将能打开大多数的连接甚至于一个大型的 SQL
server: 总的来说,应该尽量避免在一个循环内部创建对象。如果无法避免,您应该手
工释放被对象使用过的资源。如果 Connection 对象仅被创建一次,且数据资源的物理
连接在每个循环中被打开然后关闭,那么上例将会正常运行: 为对象赋予会话作用域
在应用程序中,对于每个新会话,都会创建session-scope 对象,并且在会话结束后会
将其释放。因此,每个活动的会话都有一个对象。会话作用域用于从多个脚本中调用的
对象,但只影响一个用户会话。您可以只在需要时才为对象赋予会话作用域。如果确实
需要使用会话作用域,那么就必须了解提供对象的组件的线程模型,因为它影响性能和
对象的安全环境。详细信息,请参阅本主题的“高级信息:性能问题” 。 要为对象赋
予会话作用域,请将对象存储在 ASP Session 内建对象中,您既可以在 Global.asa
文件中使用 标记,也可以在 ASP 页上使用 Server.CreateObject 方法创建具有会话
作用域的对象实例。 在 Global.asa 文件中,您可用扩展了 RUNAT 属性(必须设置为
Sever)和 SCOPE 属性(必须设置为 Session)的 ;OBJECT> 标记。以下示例创建一个
Ad Rotator 对象的会话作用域实例:
一旦您在 Session 对象中存储了对象,您就可以从应用程序的任何页中访问该对象。
下面的语句使用上例中由 标记创建的对象实例: 在 ASP 页上,您也可以使用
Server.CreateObject 方法将对象存储在 Session 内建对象中。以下示例在 Session
对象中存储 Ad Rotator 对象的一个实例。 要显示广告,您首先应该获取存储在
Session 对象中的 Ad Rotator 对象的实例,然后才能调用方法来显示对象: 在用标
记声明的对象被某个 .asp 文件中的脚本命令引用之前,ASP 并不创建其实例。
Server.CreateObject 方法则立即创建该对象实例。因此,对会话作用域对象来说,使
用 标记要比 Server.CreateObject 属性更好。 为对象赋予应用程序作用域
application-scope 对象是在应用程序启动时就创建的对象的单个实例。该对象由所有
客户端请求共享。仅在极少数情况下,您才需要为对象赋予应用程序作用域。一些实用
程序对象,例如计数器等,可能需要应用程序作用域。但一般来说,您可用在下一节中
建议的替代方案。另外,线程模型会影响性能和对象安全环境(请参阅本主题的“高级
信息:性能问题”)。 要为对象赋予应用程序作用域并将其存储在ASP Application内
建对象中,既可以使用 Global.asa 文件中的 标记,也可以使用 ASP 页上的
Server.CreateObject 方法创建应用程序作用域的对象实例。 在 Global.asa 文件中,
您可用扩展了 RUNAT 属性(必须设置为 Sever)和 SCOPE 属性(必须设置为 Session)
的 ;OBJECT> 标记。在 ASP 页中,您可以使用 Server.CreateObject 将对象实例存储
在 Application 内建对象中。关于使用 标记和 Server.CreateObject的示例,请参阅
上一节“为对象赋予会话作用域”。 会话和应用程序作用域的替代方案 仅当需要时,
才能为对象赋予会话或应用程序作用域。因为在会话或应用程序结束运行之前,这些对
象会一直保留。它们会占用内存或数据库连接等资源,这些资源可能会在其他方面更有
用。另外,组件的线程模型会影响您从中所创建的对象的性能,尤其是那些具有会话或
应用程序作用域的对象。在很多情况下,比创建应用程序或会话作用域对象更好的方法
就是利用会话或应用程序作用域变量,将信息传递给在网页一级创建的对象。例如,不
要为 ADO Connection 对象赋予会话或应用程序作用域,因为它创建的连接会在相当长
的一段时间一直保持打开而此时脚本已不再使用 ODBC 连接共享。但您可以将 ODBC 连
接字符串存储在 Session 或 Application 内建对象中,并在网页上从创建的Connection
对象实例中获取该字符串。通过这种方式,您可以存储在会话或应用程序名称空间中频
繁使用的信息,但只有在需要时才创建用该信息的对象。关于作用域变量的详细信息,
请参阅“使用变量和常量”。 用户自定义的 JScript 对象您可以通过定义一个创建和
初始化新对象的属性和方法的构造函数来创建自己的JScript对象。当脚本用 new 操作
符来调用构造函数时,就会创建该对象的实例。ASP 脚本支持用户自定义的对象,当具
有页作用域时,后者正常运行。但如果为用户自定义的JScript 对象赋予应用程序或会
话作用域,将可能影响该对象的功能。特别是,若一个对象具有会话或应用程序作用域,
则其他页的脚本可以获取该对象的属性,但是却不能调用其方法。高级信息:性能问题
组件的线程模型可能会影响 Web 站点的性能,一般来说,带有Both 标记的对象是推荐
在所有的 ASP 脚本中使用的对象,尤其是在 Session 和 Application对象中。不推荐
使用单线程对象。因为您可能不会始终控制所用对象的线程模型,所以,以下的指导可
帮助您获得最佳性能: 页作用域对象。带有 Both 或 Apartment 标记的对象将给予您
最佳的性能。 应用程序作用域对象。一般来说,应避免在 Application 对象中放置对
象。如果确需使用应用程序作用域对象,您会从结合了 FreeThreadedMarshaler的带有
Both标记的对象中获得最佳性能。您既可以用 标记也可以用 Server.CreateObject 方
法在 Application对象中存储带有 Single、Free 或 Both 标记的对象。您必须用单元
线程对象来使用 标记。 会话作用域对象。带有Both 标记的对象将为您提供最佳性能。
用单线程或单元线程对象会导致 Web服务器将会话锁定在一个线程上。自由线程对象不
会锁定会话,但运行速度不高。在 Session 对象中,您可以用 标记或
Server.CreateObject方法存储对象 。 如果您已安装了 SDK 文档,请参阅“创建 ASP
组件”,您将会获得有关线程模型及其隐含的组件性能的详细信息。(在 Windows 95
及其后续版本中 SDK 文档不可用)

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 360快剪辑怎么使用 36金山词霸如何屏幕取词百度收购PPS已敲定!3

最新文章 微信3.6.0测试版更新了微信支付漏洞会造成哪 360快剪辑怎么使用 360快剪辑软件使用方法介酷骑单车是什么 酷骑单车有什么用Apple pay与支付宝有什么区别 Apple pay与贝贝特卖是正品吗 贝贝特卖网可靠吗

人气排行 xp系统停止服务怎么办?xp系统升级win7系统方电脑闹钟怎么设置 win7电脑闹钟怎么设置office2013安装教程图解:手把手教你安装与qq影音闪退怎么办 QQ影音闪退解决方法VeryCD镜像网站逐个数,电驴资料库全集同步推是什么?同步推使用方法介绍QQ2012什么时候出 最新版下载EDiary——一款好用的电子日记本