欢迎光临
我们一直在努力

ASP集合使用

建站超值云服务器,限时71元/月

大多数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 文档不可用)

来自:http://program.szata.com/

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » ASP集合使用
分享到: 更多 (0)

相关推荐

  • 暂无文章