当前位置: 首页 > 图文教程 > 网络编程 > ASP > ASP中遍历和操作Application对象的集合

ASP
asp分页(自己整理的2个分页程序)
ASP常用的系统配置函数
雨哲防采集策略之列表篇
雨哲浅谈关于防采集而不影响收录内容篇
asp数据库连接函数
ajax XMLHTTP Post Form时的表单乱码综合解决
ASP注入详细命令40条
用ASP实现MSSQL用户密码破解
ASP创建对象的两种方法比较
ASP字符串转换为整形、双精度型、布尔
ASP计算str2在str1中出现的次数
asp采集抓取网上房产信息的代码
ASP注册登陆实例代码
ASP中使用FileSystemObject时提高性能的方法
分享一个好东东,动态Include文件 (Dynamic File Includes)
解决 JScript 中使用日期类型数据时出现类型错误的问题
在ASP里面创建GUID
在JScript中使用缓存技术的实际代码
ASP javascript Application对象的Contents和StaticObjects做Cache的一些经验
海阳2006+功能中的潜水王

ASP中遍历和操作Application对象的集合


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-22   浏览: 95 ::
收藏到网摘: n/a

为了能够正常使用,必须把它们放到服务器上的一个虚拟应用程序内,并且把所提供的global.asa文件放到该应用程序的根目录中。最简单的办法是把global.asa文件放到缺省Web网站的根目录(缺省情况下是C:/InetPub/WWWRoot)中。

对任何已有的global.asa文件重命名是一个好办法,可以在以后对该文件进行恢复。

1. 显示Application集合的内容

ASPCounter对象是StaticObjects集合的一个成员(通过<OBJECT>元素进行定义),但是其余部份(由Server.CreateObject实例化)是Contents集合的成员。

可以看到使用global.asa例子网页放到这些集合中的值,这在前面已经看到:

以下为引用的内容:

<!-- Declare instance of the ASPCounter component with

application-level scope //-->

<OBJECT ID=”ASPCounter” RUNAT=”Server” SCOPE=”Applicatoin”

PROGID=”MSWC.Counters”>

</OBJECT>

...

...

<SCRIPT LANGUAGE=”VBScript” RUNAT=”Server”>

Sub Application_onStart()

‘Create an instance of an ADO Connection with application-level scope

Set Application(“ADOConnection”) = Server.CreateObject(“ADODB.Connection”)

Dim varArray(3) ‘Create a Variant array and fill it

varArray(0) = “This is a”

varArray(1) = “Variant array”

varArray(2) = “stored in the”

varArray(3) = “Application object”

Application(“Variant_Array”) = varArray ‘Store it in thd Application

Application(“Start_Time”) = CStr(Now) ‘Store the date/time as a string

Application(“Visit_Count”) = 0 ‘Set counter variable to zero

End Sub

...

...

</SCRIPT>

(1) 遍历Contents集合的代码

为了遍历Contents集合,可使用一个For Each ... Next结构。集合中的每一项可以是一个简单的Variant类型变量、一个Variant数组或者一个对象的引用。因为需要对每种类型的值进行不同的处理,所以就不得不对每一个进行检查来判别其类型。

在VBScript中可使用VarType函数完成这个工作。这里使用IsObject和IsArray函数代替:

以下为引用的内容:

For Each objItem in Application.Contents

If IsObject(Application.Contents(objItem)) Then

Response.Write “Object reference: ‘” & objItem & “’

ElseIf IsArray(Application.Contents(objItem)) Then

Response.Write “Array: ‘” & objItem & “’ contents are:

VarArray = Application.Contents(objItem)

‘Note: the following only works with a one-dimensional array

For intLoop = 0 To UBound(varArray)

Response.Write “ Index(“ & intLoop & “) = “ & _

VarArray(intLoop) & “


Next

Else

Response.Write “Variable: ‘” & objItem & “’ = “ _

& Application.Contents(objItem) & “


End If

Next

注意程序如何从Application对象检索该数组。将其分配给一个局部(Variant)变量,使用下面的语句:

varArray = Application.Contents(objItem)

使用UBound函数可以查找出数组的大小(元素的数量),这个值可以作为遍历的终止条件:

For intLoop = 0 UBound(varArray)

这个例子是一维数组,并将只显示这样的一个数组的内容。可根据需要编辑代码以处理多维数组,例如:

以下为引用的内容:

For intLoop = 0 To UBound(varArray)

IntNumberOfDimensions = UBound(varArray, 1)

For intDimension = 0 To intNumberOfDimensions

Response.Write “ Index(“ & intLoop & “) = “ _

& varArray(intLoop, intDimension)

Next

Response.Write “”

Next

(2) 遍历StaticObjects集合的代码

StaticObjects集合包含了所有在global.asa中使用<OBJECT>元素声明的对象引用。因为每个条目都是一个对象变量,可用简单些的代码对这个数组进行遍历。我们将输出对象的名字(在ID属性中原有的定义):

以下为引用的内容:

For Each objItem in Application.StaticObjects

If IsObject(Application.StaticObjects(objItem)) Then

Response.Write “<OBJECT> element: ID=’” & objItem & “’

End If

Next

2、对集合的操作

1) 增加值到Contents集合

增加值到Contents集合的方法,与在global.asa网页的脚本代码中使用过的方法相同。允许把一个新的Variant值增加到Application对象中,并已有建议的名字和值(可根据需要进行编辑),单击按钮,重新载入这个网页,把值增加到Application.Contents集合中,并且在列表中显示。

增加新的Contents条目的代码

所有的按钮和其他HTML控件放置在示例网页中的一个窗体上。ACTION设置了当前网页的路径,提交该窗体时,重新装入。METHOD属性为“POST”,所以控件中的值出现在Request.Form集合中。在以前的章节中采用过这两种技术:

<FORM ACTION=”<% = Request.ServerVariables(“SCRIPT_NAME”) %>” METHOD=”POST”>

该窗体上的按钮都是普通的HTML INPUT控件,具有相同的标题(三个空格)但名字不同。例如,创建第一个按钮(把值增加到Application对象中)的代码是:

<INPUT TYPE=”SUBMIT” NAME=”cmdAdd” VALUE=” ”>

重新载入该网页时,检查Request.Form集合,判定单击的是哪个SUBMIT按钮,并进行相应的处理。如果是增加一个值到Application对象的按钮(该按钮在HTML的<INPUT>元素中被命名为cmdAdd),使用下面的程序段:

以下为引用的内容:

If Len(Request.Form("cmdAdd")) Then

strVarName = Request.Form("txtVarName")

strVarValue = Request.Form("txtVarValue")

Application.Lock

Application("strVarName") = strVarValue

Application.Unlock

End If

注意程序如何使用Application.Lock和Application.Unlock方法,确保这些值不会因两个用户并发地访问而产生混乱。如果只是对一个特定的值进行设置,一般不可能发生这种情况。但一直使用Lock和Unlock方法是明智的。

2) Contents集合中删除值

通过遍历Contents集合(如前面我们所做的)执行ASP网页时,创建该列表。但是,我们仅收集每项的名字并把它们放到<SELECT>列表元素内的<OPTION>元素中:

以下为引用的内容:

<SELECT NAME=”lstRemove” SIZE=”1”>

<%

For Each objItem in Application.Contents

Response.Write “<OPTION>” & objItem & “</OPTION>”

Next

&>

</SELECT>

该ASP代码执行以后,在浏览器中看到的结果是:

以下为引用的内容:

<SELECT NAME=”lstRemove” SIZE=”1”>

<OPTION>ADOConnection</OPTION>

<OPTION>Variant_Array</OPTION>

<OPTION>Start_Time</OPTION>

<OPTION>Visit_Count</OPTION>

<OPTION>My_New_Value</OPTION>

</SELECT>

(1) 删除单个值

当单击按钮删除单个值时,该窗体再次提交给相同的网页,但是这一次将设立一个为cmdRemoveThis的SUBMIT按钮,然后调用Application.Contents集合的Remove方法:

以下为引用的内容:

If Len(Request.Form("cmdRemoveThis")) Then

strToRemove = Request.Form("lstRemove")

Response.Write "strToRemove = " & strToRemove

Application.Lock

Application.Contents.Remove(strToRemove)

Application.Unlock

End If

注意这是Contents集合的一个方法,而不是Application对象的。语法是Application.Contents.Remove,而不是Application.Remove。
从Contents集合中删除Start_Time值的结果。

(2) 删除所有的值

如果单击三个SUBMIT类型按钮中的最后一个,该网页中的代码将检测到单击的按钮为cmdRemoveAll,将执行 Application.Contents集合的RemoveAll方法:

以下为引用的内容:

If Len(Request.Form("cmdRemoveAll")) Then

Application.Lock

Application.Contents.RemoveAll

Application.Unlock

End If

再次提醒,这是Contents集合的一个方法,而不是Application。语法是Application.Contents.RemoveAll,而不是Application.RemoveAll。