【asp源码栏目提醒】:网学会员鉴于大家对asp源码十分关注,论文会员在此为大家搜集整理了“ASP教程技巧综合大全 - 网站开发与设计”一文,供大家参考学习
ASPASPASPASP教程技巧综合大全使用变量和常量“变量”是计算机内存中已命名的存储位置它包含数据如数值或文本字符串。
变量中包含的数据称为变量的“值”。
变量使用有助于理解脚本功能的名称来存储、检索和管理值。
声明和命名变量遵循脚本语言的下列规则和原则来命名和声明变量。
即使不要求在使用之前声明变量但先声明变量的良好开发习惯将有助于减少错误。
“声明”变量也就是告诉脚本引擎特定名称的变量已经存在可以在脚本中使用该变量的参照。
VBScriptVBScript不要求变量声明但在使用之前先声明所有变量是一种良好的脚本编程习惯。
要在VBScript中声明变量可以使用“Dim”、“Public”或“Private”语句。
例如ltDimUserNamegt可以在.
asp文件中使用VBScript“OptionExplicit”语句以便要求必须使用“Dim”、“Private”、“Public”和“ReDim”语句显式声明变量。
“OptionExplicit”语句必须位于任何
ASP命令之后、任何HTML文本或脚本命令之前。
此语句只影响使用VBScript编写的
ASP命令并不影响JScript命令。
ltOptionExplicitgtltHTMLgtltDimstrUserNamePubliclngAccountNumbergt有关这些命令的详细信息请参阅位于MicrosoftWindows脚本技术Web站点http://msdn.microsoft.com/scripting/上的“VBScript语言参考”。
JScript虽然JScript通常不要求变量声明但在使用之前先声明所有变量是一个良好的脚本编程习惯。
要声明变量可使用“var”语句。
例如ltvarUserNamegt通常只有在需要区分函数变量和函数外的“全局”变量时才有必要在JScript中声明变量。
在这种情况下如果不区分这两个变量JScript将认为您专门引用的是全局变量。
关于“var”语句的详细信息请参阅“JScript语言参考”。
从位于http://msdn.microsoft.com/scripting/的MicrosoftWindows脚本技术Web站点上可以找到这些参考。
变量范围变量“范围”或生存期确定哪些脚本命令可以访问变量。
在过程中声明的变量具有“局部范围”每次执行过程时创建和消除该变量。
无法从过程外部访问该变量。
在过程外部声明的变量具有“全局范围”
ASP页中的任何脚本命令都可以访问和修改该变量值。
注意将变量范围限制到过程中有利于提高性能。
如果声明变量则局部变量和全局变量可以同名。
修改其中一个变量的值不会影响另一个变量。
不过如果不声明变量则有可能在无意中修改全局变量的值。
例如在下例中虽然有两个变量Y但脚本命令返回值1ltOptionExplicitDimYY1SetLocalVariableResponse.WriteYSubSetLocalVariableDimYY2EndSubgt与此相反在下例中因为没有显式声明变量所以脚本命令返回值2。
当过程调用设置Y为2时脚本引擎认为过程要修改全局变量ltOptionExplicitDimY1SetLocalVariableResponse.WriteYSubSetLocalVariableY2EndSubgt要避免此问题有必要养成显式声明所有变量的习惯。
这一点当使用“include”语句在.
asp文件中包含其他文件时尤其重要。
被包含的脚本虽然在单独的文件中但却当作是包含文件的一部分。
除非声明变量否则很容易忘记必须在主脚本和被包含脚本中使用不同的变量名。
提供变量的Session或Application作用域全局变量只能在单个.
asp文件内访问。
要从单独页面外部访问变量需提供变量的Session或Application作用域。
Session作用域变量对单个用户请求的
ASP应用程序的所有页都可用。
Application作用域变量对任何用户请求的
ASP应用程序的所有页都可用。
Session变量适用于存储单个用户的信息如首选项、用户名或标识。
应用程序变量适用于存储特定应用程序所有用户的信息如应用程序需要的特定欢迎词或常规值。
ASP提供了两种内建的对象您可以在其中存储变量“Session”对象和“Application”对象。
也可以用Session或Application作用域来创建对象实例。
详细信息请参阅设置对象作用域。
Session作用域要给变量提供Session作用域可通过给对象中已命名条目赋值来将变量存储在Session对象中。
例如下面的命令将在“Session”对象中存储两个新变量ltSessionquotFirstNamequotquotJeffquotSessionquotLastNamequotquotSmithquotgt要从“Session”对象中检索信息可使用输出命令lt或Response.Write访问已命名的条目。
下面的示例使用输出命令显示SessionquotFirstNamequot的当前值欢迎ltSessionquotFirstNamequotgt可以在Session对象中存储用户首选项然后通过访问这些首选项来确定哪些页返回给用户。
例如可以允许用户在应用程序首页中指定只查看纯文本内容然后将此项选择应用于用户在该应用程序中访问的所有后续页。
ltstrScreenResolutionSessionquotScreenResolutionquotIfstrScreenResolutionquotLowquotThengt这是文字页面。
ltElsegt这是多媒体页面。
ltEndIfgt注意如果在脚本中要多次参考session作用域变量可以考虑如上例所示将该变量赋给一个局部变量以便提高性能。
Application作用域要提供变量Application作用域可通过给对象中已命名条目赋值来将变量存储在Application对象中。
例如下面的命令在“应用程序”对象中存储应用程序特定的欢迎词ltApplicationquotGreetingquotquot销售部欢迎您quotgt要从“Application”对象中检索信息可使用
ASP输出命令lt或Response.Write来从应用程序中的任何后续页访问已命名的条目。
下面的命令使用输出命令来显示ApplicationquotGreetingquot的值ltApplicationquotGreetingquotgt同样地如果脚本重复参考Application作用域变量应将该变量赋给局部变量以便提高性能。
使用常量“常量”是用来取代数值或字符串的名称。
随
ASP提供的部分基本组件如ActiveX数据对象ADO定义了可在脚本中使用的常量。
组件可以在“组件类型库”中声明常量组件类型库是一个包含COM组件支持的对象和类型的信息的文件。
一旦在.
asp文件中声明了类型库就可以在同一.
asp文件的所有脚本中使用已定义的常量。
类似地可以在Global.asa文件中声明类型库以便在应用程序的所有.
asp文件中使用已定义的常量。
要声明类型库可以在.
asp文件或Global.asa文件中使用ltMETADATAgt标签。
例如要声明ADO类型库可使用下面的语句lt--METADATANAMEquotMicrosoftActiveXDataObjects2.5LibraryquotTYPEquotTypeLibquotUUIDquot00000205-0000-0010-8000-00AA006D2EA4quot--gt或者如果不参考类型库的通用唯一标识符UUID也可通过文件路径参考类型库lt--METADATATYPEquottypelibquotFILEquotc:programfilescommonfilessystemadomsado15.dllquot--gt然后即可在.
asp文件中使用ADO常量该文件声明了类型库或者驻留在包含Global.asa文件声明了ADO类型库的应用程序中。
在下面的例子中adOpenKeyset和adLockOptimistic是ADO常量lt创建和打开Recordset对象。
SetrstCustomerListServer.CreateObjectquotADODB.RecordsetquotrstCustomerList.ActiveConnectioncnnPubsrstCustomerList.CursorTypeadOpenKeysetrstCustomerList.LockTypeadLockOptimisticgt下表列出了常用的类型库和UUID类型库UUIDMicrosoftActiveXDataObjects2.5Library00000205-0000-0010-8000-00AA006D2EA4MicrosoftCDO1.2LibraryforWindows2000Server0E064ADD-9D99-11D0-ABE5-00AA0064D470MSWCAdvertisementRotatorObjectLibrary090ACFA1-1580-11D1-8AC0-00C0F00910F9MSWCIISLogObjectLibraryB758F2F9-A3D6-11D1-8B9C-080009DCC2FA关于ltMETADATAgt标签的参考信息请参阅TypeLibrary声明。
在以前版本的
ASP中部分组件提供在文件中常量定义这些文件必须包含在使用这些常量的所有
ASP文件中。
虽然仍可以通过include命令包含常量定义但使用类型库更方便也更容易升级脚本。
在未来的
ASP版本中组件可能不提供常量定义文件。
注意使用ltMETADATAgt标签而不是“include”命令可以提高Web应用程序的性能。
可以定义自己的常量。
在VBScript中使用“Const”语句。
在JScript中可以使用“var”语句将常量值赋给变量。
如果要在多个.
asp文件中使用常量则需要将定义放在单独文件中并在所有使用该常量的.
asp文件中包含这些定义。
与客户端脚本交互操作使用
ASP生成或操作客户端脚本可以增强其有效性。
例如可以编写服务器端脚本根据服务器特有的变量、用户浏览器类型或HTTP请求参数对服务器端脚本加以组合。
如以下示例模板所示将服务器端脚本语句散布到客户端脚本由HTMLltSCRIPTgt标记括起可以在请求时动态初始化和更改客户端脚本。
ltSCRIPTLANGUAGEquotVBScriptquotgtlt--变量lt服务器定义值gt...客户端脚本lt用于生成客户端语句的服务器端脚本gt客户端脚本...--gtlt/SCRIPTgt结合这些功能可开发出某些即有用又有趣的应用。
例如下面是一个对客户端脚本使用JScript编写进行操作的服务器端脚本示例使用VBScript编写ltDimdtmTimestrServerNamestrServerSoftwareintGreetingdtmTimeTimestrServerNameRequest.ServerVariablesquotSERVER_NAMEquotstrServerSoftwareRequest.ServerVariablesquotSERVER_SOFTWAREquot生成随机数。
RandomizeintGreetingintrnd3gtltSCRIPTLANGUAGEquotJScriptquotgtlt--//CallfunctiontodisplaygreetingshowIntroMsgfunctionshowIntroMsgswitchltintGreetinggtcase0:msgquot这里ltstrServerNamegtWeb服务器正在运行ltstrServerSoftwaregt。
quotbreakcase1:msgquot欢迎进入ltstrServerNamegtWeb服务器。
现在时间是ltdtmTimegt.quotbreakcase2:msgquot此服务器正在运行ltstrServerSoftwaregt。
quotbreakdocument.writemsg--gtlt/SCRIPTgt例如可以扩充这种类型的脚本用来配置客户端数据库或DHTML个性化脚本。
创造性地运用这项技术还可以减少往返次数和服务器处理。
编写过程“过程”是一组脚本命令它可以执行特定任务并返回值。
可以定义自己的过程并在脚本中重复调用这些过程。
可以将过程定义放在调用该过程的同一.
asp文件中或者可以将常用的过程放在共享的.
asp文件中并使用include命令将该文件包含在调用该过程的其他.
asp文件中。
作为选择您还可以将功能性打包为COM组件。
定义过程过程定义可以出现在ltSCRIPTgt和lt/SCRIPTgt标签内并且必须符合已声明的脚本语言的规则。
对首要脚本语言之外其他语言的过程使用ltSCRIPTgt元素。
但是对首要脚本语言的过程使用脚本分隔符lt和gt。
当使用HTMLltSCRIPTgt标签时必须使用两个属性以便确保服务器端能够处理脚本。
使用ltSCRIPTgt标签的语法为ltSCRIPTLANGUAGEJScriptRUNATSERVERgt过程定义lt/SCRIPTgtRUNATSERVER属性通知Web服务器处理服务器上的脚本。
如果不设置此属性将由客户端浏览器处理脚本。
LANGUAGE属性确定此脚本块使用的脚本语言。
您可以给服务器指定任何语言但服务器上必须安装了该语言的脚本引擎。
要指定VBScript可使用值“VBScript”。
要指定JScript可使用值“JScript”。
如果没有设置LANGUAGE属性则使用基本脚本语言解释脚本块。
脚本块中的命令必须以所选脚本语言中形成一个或多个过程。
例如下列命令定义JScript过程“MyFunction”。
ltHTMLgtltSCRIPTLANGUAGEJScriptRUNATSERVERgtfunctionMyFunctionResponse.Writequot您调用了MyFunction。
quotlt/SCRIPTgt要点不要在服务器端ltSCRIPTgt标签内包含任何完整过程以外的脚本命令。
过程以外的命令没有固定的执行顺序因此可能导致无法预知的结果。
另外在过程中不能使用
ASP输出命令ltgt。
不过可以通过Response.Write将内容发送到浏览器。
调用过程要调用过程需在命令中包含过程名。
如果从VBScript中调用JScript过程则过程名后必须使用括号如果过程没有变量则使用空括号。
如果从JScript中调用VBScript或JScript过程则过程名后总是必须使用括号。
对于VBScript调用过程时也可以使用关键字Call。
不过如果调用的过程要求变量则变量列表必须包含在括号内。
如果省略关键字Call同时也必须省略包含变量列表的括号。
如果使用Call语句调用任何内置函数或用户定义函数将丢弃函数的返回值。
下例分别采用两种不同的脚本语言VBScript和JScript阐述如何创建和调用过程。
ltLANGUAGEVBScriptgtltHTMLgtltBODYgtltEchogtltBRgtltprintDategtlt/BODYgtlt/HTMLgtltSubEchoResponse.WritequotltTABLEgtquotamp_quotltTRgtltTHgtNamelt/THgtltTHgtValuelt/THgtlt/TRgtquotSetobjQueryStringRequest.QueryStringForEachstrSelectionInobjQueryStringResponse.WritequotltTRgtltTDgtquotamppampquotlt/TDgtltTDgtquotamp_FormValuesstrSelectionampquotlt/TDgtlt/TRgtquotNextResponse.Writequotlt/TABLEgtquotEndSubgtltSCRIPTLANGUAGEJScriptRUNATSERVERgtfunctionprintDatevarxxnewDateResponse.Writex.toStringlt/SCRIPTgt注意VBScript调用JScript函数时不区分大小写。
将数组传递给过程要将整个数组传递给过程在VBScript中数组名后应紧接一对空括号在JScript中则应使用空的方括号。
使用集合多数
ASP内建的对象提供集合。
“集合”是类似于数组的数据结构可存储字符串、数值、对象和其他值。
与数组不同的是集合可以根据所获得或存储的项目自动伸缩。
随着集合发生变化项目的位置也将变动。
要访问集合中的项目可以通过项目唯一的字符串关键字、项目在集合中的索引位置或迭代集合中的所有项目来实现。
根据名称或索引访问项目可以通过引用唯一字符串关键字或名称来访问集合中的指定项目。
例如Contents集合载有Session对象中存储的所有变量。
它还可以载有通过调用Server.CreateObject而将所有的对象实例化。
假设您在Session对象中储存了以下用户信息ltSession.ContentsquotFirstNamequotquotMengquotSession.ContentsquotLastNamequotquotPhuaquotSession.ContentsquotAgequot29gt可以使用存入集合时与项目予以关联的字符串关键字访问该项目。
例如以下表达式返回字符串“Meng”ltSession.ContentsquotFirstNamequotgt还可以使用与项目关联的索引或数字访问项目。
例如以下表达式获得存储在Session对象第二部分中的信息并返回“Phua”。
ltSession.Contents2gtASP集合的标号从1开始。
当在集合中添加或删除项目时与项目相关联的索引也将更改。
这时尚未更改的项目索引将无法使用。
索引访问通常用于迭代一个集合如以下主题中所说明或访问只读集合中的项目。
还可以使用速记符根据名称访问项目。
ASP可搜索与特定顺序的对象相关联的集合。
如果具有特定名称的项目仅在对象集合中出现一次则可以删除集合名称尽管这样做会影响性能ltSessionquotFirstNamequotgt当访问存储在Application或Session对象中的项目时删除集合名称一般来说是安全的。
但对于Request对象指定集合名称则更为安全。
因为集合将可以很容易包含具有重复名称的项目。
迭代集合可以迭代集合中的所有项目查看集合中存储的信息或更改项目。
进行集合迭代时必须提供集合名称。
例如可以使用VBScript中的“For...Each”语句访问存储在Session对象中的项目。
lt声明计数器变量。
DimstrItem显示集合中各项目的值。
ForEachstrItemInSession.ContentsResponse.WriteSession.ContentsstrItemampquotltBRgtquotNextgt还可以使用VBScript中的“For...Next”语句迭代集合。
例如要列出存储上个例子所存储的三个项目请使用以下语句lt声明计数器变量。
DimintItem重复循环直到计数器的值为3。
ForintItem1To3Response.WriteSession.ContentsintItemampquotltBRgtquotNextgt由于通常无法得知集合中所存储的项目数
ASP支持集合的Count属性该属性返回集合中的项目个数。
可以使用Count属性指定计数器的最大值。
lt声明计数器变量。
DimlngItemlngCountlngCountSession.Contents.Count重复该循环直到集合中的计数器等于项目个数。
ForlngItem1TolngCountResponse.WriteSession.ContentslngItemampquotltBRgtquotNextgt在JScript中使用“for”语句可迭代集合。
要使通过“JScript”的“for”语句使用Count属性变得更为高效应将Count值分配给本地变量并用该变量来设置计数器的最大值。
这样脚本引擎就不必每次循环都去查找Count值。
下面的示例说明了这一技巧ltvarintItemintNumItemsintNumItemsSession.Contents.CountforintItem1intItemltintNumItemsintItemResponse.WriteSession.ContentsintItemquotltBRgtquotgtMicrosoftJScript支持Enumerator对象也可使用它来迭代
ASP集合。
atEnd方法标明集合中是否还存在其他项目。
moveNext方法用于移动到下一个集合项目。
ltSession.ContentsquotNamequotquotSukiWhitequotSession.ContentsquotDepartmentquotquotHardwarequot...//创建Enumerator对象。
varmycollectionnewEnumeratorSession.Contents//迭代集合并显示各个项目。
whilemycollection.atEndvarxmyCollection.itemResponse.WriteSession.ContentsxquotltBRgtquotmyCollection.moveNextgt使用子关键字迭代整个集合脚本可在单个cookie中嵌入多个关联值以便减少在浏览器和Web服务器之间传递的cookie数目。
Request和Response对象的Cookies集合可在单个项目中载有多个值。
这些子项目或子关键字可单独使用。
只有Request.Cookies和Response.Cookies集合支持子关键字。
Request.Cookies仅支持读操作Response.Cookies仅支持写操作。
下面将创建一个普通cookie和一个带子关键字的cookielt将cookie发送到浏览器。
Response.CookiesquotFruitquotquotPineapplequot用子关键字将cookie发送到浏览器。
Response.CookiesquotMammalsquotquotElephantquotquotAfricanquotResponse.CookiesquotMammalsquotquotDolphinquotquotBottlenosedquotgt发送到浏览器的HTTP响应中的cookie文本显示如下HTTP_COOKIEMammalsELEPHANTAfricanampDOLPHINBottlenosedFruitPineapple可以列举出Request.Cookies集合中的所有cookies和cookies中的所有子关键字。
不过对不存在子关键字的cookie迭代子关键字将无法生成项目。
要避免出现这种情况请先检查cookie的子关键字是否是使用Cookies集合的HasKeys属性得到的。
这一技巧将在下面的示例中加以说明。
lt声明计数器变量。
DimCookieSubkey显示整个cookie集合。
ForEachCookieInRequest.CookiesResponse.WriteCookieIfRequest.CookiesCookie.HasKeysThenResponse.WritequotltBRgtquot显示子关键字。
ForEachSubkeyInRequest.CookiesCookieResponse.Writequot-gtquotampSubkeyampquotquotampRequest.CookiesCookieSubkeyampquotltBRgtquotNextElseResponse.WritequotquotampRequest.CookiesCookieampquotltBRgtquotEndIfNextgt该脚本将返回以下结果Mammals-gtELEPHANTAfrican-gtDOLPHINBottlenosedFruitPineapple关键字名称的大小写Cookies、Request、Response和ClientCertificate集合可引用相同的唯一字符串关键字名称。
例如下面的语句引用了同样的关键字名称User但对于每一个集合却返回了不同的值strUserIDRequest.CookiesquotUserquotstrUserNameRequest.QueryStringquotUserquot关键字名称的大小写由第一个集合设定以便将值赋给关键字。
请查看以下脚本lt用UserID关键字获取QueryString集合中的值。
strUserRequest.QueryStringquotUserIDquot将cookie发送到浏览器但引用关键字UserId该关键字使用了不同的拼写。
Response.CookiesquotUserIdquotquot1111-2222quotResponse.CookiesquotUserIdquot.ExpiresquotDecember312000quotgt尽管关键字名称“UserId”看来已赋给了cookie但实际上赋给cookie的是关键字名称“UserID”其大小写不同。
QueryString集合首先定义了该关键字的大小写。
由于对集合值的引用与关键字名称的大小写无关因此这一行为将不会改变脚本除非应用程序对关键字名称使用了区分大小写的处理。
迭代对象的集合Session和Application集合既可使用值变量也可使用对象实例。
Contents集合同时载有由调用Server.CreateObject而创建的值变量和对象实例。
StaticObjects集合装载由HTML的ltOBJECTgt标记创建的对象该标记在Session对象的作用域之内。
关于用此方法实例化对象的详细信息请参阅设置对象作用域。
迭代包含对象的集合时既可使用对象的Session或Application状态信息也可使用其方法或属性。
例如假设应用程序使用多个对象创建用户帐号每个对象都具有实例化方法。
可以迭代StaticObjects集合以获取对象属性ltSession.StaticObjects中的ForEach对象Response.WriteObjectampquot:quotampSession.StaticObjectsObjectNextgtASP集合有什么不同之处尽管本主题中说明的
ASP集合与VisualBasic中的Collection对象十分类似但它们仍有一些区别。
ASP集合支持Count属性以及Item、Remove和RemoveAll方法。
它们不支持Add方法。
处理用户输入使用
ASP的Request对象可以创建简单但功能强大的脚本用于收集并处理由HTML表单收集的数据。
在本主题中您不仅可以学习如何创建.
上一篇:
3.5技术简介
下一篇:
少女不宜过多摄入纤维素