仓酷云

标题: ASP网站制作之Scripting.Dictionary工具 [打印本页]

作者: 兰色精灵    时间: 2015-1-16 22:55
标题: ASP网站制作之Scripting.Dictionary工具
对于中小型web应用来说,php有很强的竞争力,linux+apache+mysql+php(lamp)的组合几乎可以胜任绝大多数网站的解决方案,对于大型应用来讲,对于系统架构要求更高,需要有成熟的框架支持,jsp的struts是个不错的框架,国内介绍它的资料也非常多,应用逐渐广泛起来。asp就不用说了,工具
很多Microsoft的编程言语,如VisualBasic、VBScript和Jscript,都供应汇合(collection)。能够把汇合设想为数组,可使用个中内建的函数完成存储和利用数据等基础义务。不必忧虑数据是在哪些行列,而是利用独一的键举行会见。
VBScript和Jscript都供应相似的工具,通称Scripting.Dictionary工具或Dictionary工具。它相似于二维数组,把键和相干条目标数据寄存在一同。但是真实的面向工具的办法,不该间接会见数据条目,必需利用Dictionary工具撑持的办法和属性来完成。
本章供应了一些示例页面,同意实验剧本运转期工具的办法和属性。这些实例鄙人载的文件的文件的Chaper05子目次里。

5.3.1创立和利用Dictionary工具
创立一个Dictionary工具的示比方下:
‘InVBScript:
DimobjMyData
SetobjMyData=Server.CreateObject(“Scripting.Dictionary”)

//InJscript:
varobjMyData=Server.CreateObject(‘Scripting.Dictionary’);

<!--Server-SidewithanOBJECTelement-->
<OBJECTRUNAT=”SERVER”SCOPE=”PAGE”ID=”objMyData”
PROGID=”Scripting.Dictionary”>
</OBJECT>
Dictionary工具还可用于客户真个IE中。
1.Dictionary工具的成员提要
表5-2和表5-3列出了Dictionary工具的属性和办法及响应的申明。
当增添一个键/条目对时,假如该键已存在;大概删除一个键/条目对时,该关头字/条目对不存在,或改动已包括数据的Dictionary工具的CompareMode,都将发生毛病。
表5-2Dictionary工具的属性和申明
属性说明
CompareMode(仅用于VBScript)设定或前往键的字符串对照形式
Count只读。前往Dictionary里的键/条目对的数目
Item(key)设定或前往指定的键的条目值
Key(key)设定键值
表5-3Dictionary工具的办法和申明
方法说明
Add(key,item)增添键/条目对到Dictionary
Exists(key)假如指定的键存在,前往True,不然前往False
Items()前往一个包括Dictionary工具中一切条目标数组
Keys()前往一个包括Dictionary工具中一切键的数组
Remove(key)删除一个指定的键/条目对
RemoveAll()删除全体键/条目对
2.对Dictionary中增添和删除条目
一旦失掉一个新的(空的)Dictionary,能够对其增加条目,从中猎取条目和删除条目:
‘InVBScript:
objMyData.Add“MyKey”,“MyItem”‘AddValueMyItemwithkeyMyKey
objMyData.Add“YourKey”,”YourItem”‘AddvalueYourItemwithkeyYourKey
blnIsThere=objMyData.Exists(“MyKey”)‘ReturnsTruebecausetheitemexists
strItem=objMyData.Item(“YourKey”)‘RetrievevalueofYourKey
strItem=objMyData.Remove(“MyKey”)‘RetrieveandremoveYourKey
objMyData.RemoveAll‘Removealltheitems
在JScript中,等价的代码为:
//InJScript;
objMyData.Add(‘MyKey’,‘MyItem’);//AddValueMyItemwithkeyMyKey
objMyData.Add(‘YourKey’,‘YourItem’);//AddvalueYourItemwithkeyYourKey
varblnIsThere=objMyData.Exists(‘MyKey’);//ReturnsTruebecausetheitemexists
varstrItem=objMyData.Item(‘YourKey’);//RetrievevalueofYourKey
varstrItem=objMyData.Remove(‘MyKey’);//RetrieveandremoveYourKey
objMyData.RemoveAll();//Removealltheitems
3.修正键或条目标值
能够经由过程修正键的值,或经由过程修正与特定的键联系关系的条目标数据,来改动存储在Dictionary内的数据。上面的代码改动键为MyKey的条目中的数据。
ObjMyData.Item(“MyKey”)=“NewValue”‘InVBScript
ObjMyData.Item(‘MyKey’)=‘NewValue’;//InJScript
假如指定的键在Dictionary未找到,将在Dictionary中创立一个以MyKey为键,以NewValue为其条目值的新的键/条目对。成心思的是,假如利用一个不存在的键来检索条目,不但失掉一个空的字符串(这是能够想到的),并且还在Dictionary里增加一个新的键/条目对,键便是指定的键,但条目标数据为空。
可使用Key属性仅改动键的值而不改动与之对应的条目标数据。将一个已存在的键MyKey改动为MyNewKey,能够用:
objMyData.Key(“MyKey”)=“MyNewValue”‘InVBScript
objMyData.Item(‘MyKey’)=‘MyNewValue’;//InJScript
假如指定的键未找到,则发生运转期毛病。
4.设置对照形式
Dictionary的CompareMode属性仅合用于VBScript,不克不及在JScript中利用。当对照字符串键时,同意指定对照的体例。两个同意的值为BinaryCompare(0)和TextCompare(1)。BinaryCompare(0)为二进制数对比(即辨别巨细写);TextCompare(1)为文本对比(即不辨别巨细写)。
5.遍历Dictionary
研讨Dictionary时,有两个办法和一个属性必要出格注重,它们同意我们遍历存储在Dictionary里的一切键/条目对。Items办法用一个一维数组的情势前往Dictionary里一切的条目数据,而keys办法用一个一维数组前往一切已存在的键值。可使用Count属性失掉键或条目标数目。
比方,可使用以下代码失掉称号为objMyData的Dictionary中一切的键和条目值。注重,固然Count属性保留了在Dictionary里的键/条目数目,但VBScript和JScript的数组老是从下标0入手下手的。因而,数组下标应从0到Count-1。
‘InVBScript:
arrKeys=objMyData.Keys‘Getallthekeysintoanarray
arrItems=objMyData.Items‘Getalltheitemsintoanarray

ForintLoop=0ToobjMyData.CountC1‘Iteratethroughthearray
StrThisKey=arrKeys(intLoop)‘Thisisthekeyvalue
StrThisItem=arrItems(intLoop)‘Thisistheitem(data)value
Next

//InJScript
//GetVB-stylearraysusingtheKeys()andItems()methods
vararrKeys=newVBArray(objMyData.Keys()).toArray();
vararrItems=newVBArray(objMyData.Items()).toArray();

for(intLoop=0;intLoop<objMyData.Count;intLoop++){
//Iteratethroughthearrays
strThisKey=arrKeys[intLoop];//Thisisthekeyvalue
strThisItem=arrItems[intLoop];//Thisistheitem(data)value
}
在VBScript里也能够利用ForEach…Next语句完成一样的功效:
‘IteratethedictionaryasacollectioninVBScript
ForEachobjIteminarrItems
Response.WriteobjItem&“=“&arrItems(objItem)&“<BR>”
Next
5.3.2Dictionary工具示例
本书供应了一系列示例文件可用来实验剧本运转工夫库的各类属性。
本章代码的缺省页面供应了一系列可以使用的VBScript示例链接。有些示例对JScript一样无效。这些示例寄存在Chapter05目次下响应的子目次里,显现的界面如-2所示:
ASP网站制作之Scripting.Dictionary工具
登录/注册后可看大图

要检察Dictionary工具的运转,在菜单页面点击第一个链接,翻开名叫show_dictionary.asp的页面。这个页面显现了我们供应的Dictionary工具的内容,同意实验其属性和办法。屏幕如-3所示:
ASP网站制作之Scripting.Dictionary工具
登录/注册后可看大图

1.Dictionary的global.asa文件
随Dictionary工具示例页面供应的文件之一是global.asa。它创立并事后添补了一个会话层感化域的Dictionary工具,因而其内容在页面哀求之间不会丧失。一样平常说来(思索到可扩大性),这不是一个幻想的做法。在这个例子里,能够看到Dictionary的属性和办法的效果。
假如在本人的服务器高低载并安装示例,必需创立一个基于此global.asa文件的假造使用程序。大概将其内容增加到缺省站点的根文件夹中的global.asa文件里。在第3章报告了怎样用导游创立假造使用程序。但是关于本示例,创立一个假造使用程序最复杂的办法是在Chapter05示例文件夹内右击dictionary子文件夹,在Properties对话框的HomeDirectory选项卡里,点击Create按钮,如-4所示:
ASP网站制作之Scripting.Dictionary工具
登录/注册后可看大图

在这个global.asa文件里,代码利用<OBJECT>元素创立一个会话层感化域的Scripting.Dictionary工具实例。然后在Session_onStart事务处置程序里将一系列值用Add办法放进Dictionary中,并将对Dictionary工具的援用指定给ASP会话变量MyDictionary:
<OBJECTID="objBookList"RUNAT="SERVER"SCOPE="SESSION"
PROGID="Scripting.Dictionary">
</OBJECT>

<SCRIPTLANGUAGE="VBScript"RUNAT="SERVER">

SubSession_onStart()
objBookList.Add"2610","ProfessionalActiveServerPages3.0"
objBookList.Add"1274","InstantJavaScript"
objBookList.Add"2882","BeginningASPComponents"
objBookList.Add"1797","ProfessionalASPTechniques"
objBookList.Add"1835","AD02.0ProgrammersReference"
SetSession("MyDictionary")=objBookList
EndSub

</SCRIPT>
2.Dictionary示例页面
在“Scripting.DictionaryObject”主页面里,主要的义务是失掉一个会话层感化域的Dictionary工具实例的援用。注重,这个援用是一个工具变量,因而必需在VBScript里利用Set关头字。
然后,反省一下是不是失掉了一个工具(这是个好习气),假如没有准确地创建包括global.asa文件的假造使用程序,反省一下成绩出在那里。你将看到我们本人的动静取代了ASP的毛病动静(可是注重,关于这一操纵必需封闭缺省的毛病处置)。
<%

onerrorresumenextturnofferrorhandlingtotestifobjectexists

retrieveDictionaryobjectfromuserssession
SetobjMyData=Session("MyDictionary")

IfIsObject(objMyData)ThenfoundDictionaryobjectinSession

%>

<P><DIVCLASS="subhead">IteratingtheDictionarywithArrays</DIV>
<%
arrKeysArray=objMyData.Keysgetallthekeysintoanarray
arrItemsArray=objMyData.Itemsgetalltheitemsintoanarray
ForintLoop=0ToobjMyData.Count-1iteratethroughthearray
Response.Write"Key:<B>"&arrKeysArray(intLoop)&"</B>Value:<B>"_
&arrItemsArray(intLoop)&"</B><BR>"
Next
%>

…Othercodeandcontrolsgohere…

<%
Else

couldnotfindDictionaryobjectinthesession
Response.Write"Dictionaryobjectnotavailableinglobal.asaforsession"

EndIf
%>
显现在页面上的Dictionary内容列表是利用Dictionary工具的Key和Items办法创立的两个数组,可以使用后面的代码遍历它们。
3.Dictionary页面控件
在Dictionary的内容列表下是一系列的HTML控件,可用于设定Dictionary工具的某些属性和实行各类办法。这些控件全体在一个<FORM>内,其ACTION属性值是本页面,以是窗体的内容提交回本页面。在后面的章节的示例里利用了一样的手艺。
在<FORM>段中,改动属性或实行一个办法是经由过程一个按钮(没有题目)完成的。用于属性和办法的值放进按钮旁的文本框或列表框中。
该页的第一个按钮用于设定Dictionary里的条目标Key属性。这里利用了一个下拉列表,能够选择一个已存在的Key值。上面的代码创立了页面内该部分的控件。为了添补列表,利用了别的一个遍历Dictionary工具的手艺,即ForEach…Next语句。代码以下:

<FORMACTION="<%=Request.ServerVariables("SCRIPT_NAME")%>"METHOD="POST">

<P><DIVCLASS="subhead">TheDictionaryProperties</DIV>
<INPUTTYPE="SUBMIT"NAME="cmdChangeKey"VALUE="">
Dictionary.Key("
<SELECTNAME="lstChangeKey"SIZE="1">
<%
ForEachobjIteminobjMyData
Response.Write"<OPTION>"&objItem
Next
%>
</SELECT>")="
<INPUTTYPE="TEXT"NAME="txtChangeKey"SIZE="15"VALUE="NewKeyName">"
<BR>

…Othercontrolsgohere…

</FORM>

4.利用Dictionary的属性和办法
在“Scription.DictionaryObject”页面,点击用来反省并改动条目标Key属性的按钮,如-5所示:
ASP网站制作之Scripting.Dictionary工具
登录/注册后可看大图

把窗体再次提交给页面。该页面包括一个剧本段,反省被点击的按钮的值。它经由过程在Resquest.Form汇合里查找按钮的名字来判定单击的是哪一个按钮。假如发明一个对应于cmdChangKey的值,则从列表中或文本框中失掉响应的值并用来改动Key属性:

lookforacommandsentfromtheFORMsectionbuttons
IfLen(Request.Form("cmdChangeKey"))Then
strKeyName=Request.Form("lstChangeKey")Existingkeyfromlistbox
strNewKey=Request.Form("txtChangeKey")Newkeyvaluefromtextbox
objMyData.Key(strKeyName)=strNewKeySetkeypropertyofthisitem
EndIf

页面从头载进后,在Dictionary的内容列内外能看到响应的了局,如-6所示:
ASP网站制作之Scripting.Dictionary工具
登录/注册后可看大图

页面的其他代码用来设定一个条目标Item属性,大概实行Dictionary工具的办法。上面是这些操纵的代码,每段代码与演示Key属性的代码十分相似。每次都将了局显现在Dictionary的内容列表中:

IfLen(Request.Form("cmdChangeItem"))Then
strKeyName=Request.Form("lstChangeItem")Existingkeyfromlistbox
strNewValue=Request.Form("txtChangeItem")Newitemvaluefromtextbox
objMyData.Item(strKeyName)=strNewValueSettheItemproperty
EndIf

IfLen(Request.Form("cmdAdd"))Then
strKeyName=Request.Form("txtAddKey")Newkeyvaluefromtextbox
strItemValue=Request.Form("txtAddItem")Newitemvaluefromtextbox
objMyData.AddstrKeyName,strItemValueExecutetheAddmethod
EndIf

IfLen(Request.Form("cmdRemove"))Then
strKeyName=Request.Form("lstRemove")Existionkeyfromlistbox
objMyData.RemovestrKeyNameExecutetheRemovemethod
EndIf

IfLen(Request.Form("cmdRemoveAll"))Then
objMyData.RemoveAllExecutetheRemoveAllmethod
EndIf

比方,假如如今点击Add办法的按钮,在Dictionary的内容列内外将增添一个新的条目,如-7所示:
ASP网站制作之Scripting.Dictionary工具
登录/注册后可看大图

了局如-8所示:
ASP网站制作之Scripting.Dictionary工具
登录/注册后可看大图

能够在这个页面中实验Dictionary工具的属性和办法,你将会发明甚么要素及在甚么情况下能引发Dictionary工具毛病。比方,实验用与已存在的一个条目不异的键值增添一个条目,看看会呈现甚么了局。


问题是他们究竟是喜欢他们是使用软件时,速度快还是速度慢好.(当然在3秒以内).无论是他们输入资料时,查找资料时,分析资料时.
作者: 精灵巫婆    时间: 2015-1-18 12:47
另外因为asp需要使用组件,所以了解一点组件的知识(ADODB也是组件)
作者: 乐观    时间: 2015-1-21 23:43
他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。
作者: 分手快乐    时间: 2015-1-30 22:50
作为IE上广为流传的动态网页开发技术,ASP以它简单易学博得了广大WEB程序爱好这的青睐,而且它对运行环境和开发品台的不挑剔,以及有大量有效的参考手册,极大的推广了它的发展。
作者: 兰色精灵    时间: 2015-2-17 07:08
如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:
作者: 谁可相欹    时间: 2015-3-5 16:54
我想问如何掌握学习节奏(先学什么再学什么)最好详细点?
作者: 若相依    时间: 2015-3-12 10:33
没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。
作者: 飘灵儿    时间: 2015-3-19 20:32
掌握asp的特性而且一定要知道为什么。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2