版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
录
一、关于ASP
二、ASP的新功能
三、创建ASP页
四、使用脚本语言
五、使用变量和常量
六、使用集合
七、ASP内建对象
八、向浏览器发送内容
九、包含文件
十、访问数据库
H-一、调试ASP脚本
十二、维护ASP应用程序的安全
一、关于ASP
ActiveServerPages(ASP)是服务器端脚本编写环境,使用它
可以创建和运行动态、交互的Web服务器应用程序。使用ASP
可以组合HTML页、脚本命令和ActiveX组件以创建交互的Web
页和基于Web的功能强大的应用程序。ASP应用程序很容易开
发和修改。
HTML编写人员
如果您是位HTML编写人员,您将发现ASP脚本提供了创
建交互页的简便方法。如果您曾想从HTML表格中收集数据,
或用顾客的姓名个人化HTML文件,或根据浏览器的不同使用
不同的特性,您会发现ASP提供了一个出色的解决方案。以前,
要想从HTML表格中收集数据,就不得不学习一门编程语言来
创建一个CGI应用程序。现在,您只要将一些简单的指令嵌入
到您的HTML文件中,就可以从表格中收集数据并进行分析。
您再不必学习完整的编程语言或者单独编译程序来创建交互页。
随着不断掌握使用ASP和脚本语言的技巧,您可以创建更
复杂的脚本。对于ASP,您可以便捷地使用ActiveX组件来执行
复杂的任务,比如连接数据库以存储和检索信息。
对ASP脚本的逐步介绍,请参阅ASP教程。然后您可以再
回到这些主题中了解关于编写ASP脚本的详细信息。
有经验的脚本编写人员
如果您已经掌握一门脚本语言,如VBScript>JavaScript或
PERL,而且您已经了解使用ASP的方法。只要安装了符合
ActiveX脚本标准的相应脚本引擎,就可以在ASP页中使用任何
一种脚本语言。ASP带有MicrosoftVisualBasicScriptingEdition
(VBScript)和MicrosoftJScript的脚本引擎,这样您可以立即
开始编辑脚本。PERL、REXX和Python的ActiveX脚本引擎可
以从第三方开发人员处获得oWeb开发人员如果您已经掌握了一
门编程语言,如VisualBasic,您将发现ASP是快速创建Web应
用程序的一个非常灵活的方法。通过向HTML中添加脚本命令,
您能够创建应用程序的HTML接口。通过创建自己的ActiveX
组件,可以将应用程序中的商业逻辑封装到能够从脚本、其他组
件或从其他程序中调用的模块。
使用ASP进行计算的Web可转化为有形的利益,它使Web
供应商能够提供交互的商业应用而不仅仅是发布内容。例如,旅
行社能够比公布航空时刻表做得更多;用ASP脚本可以让客户
察看现有的航班、比较费用并预定座位。
包含在WindowsNTOptionpack中的MicrosoftTransaction
Server(MTS)可以降低在服务器上构造程序的复杂性和费用。
MTS可以解决开发那些保密性强的、可分级的以及可靠的Web
应用程序的复杂性问题。
ActiveServerPages模型
浏览器从Web服务器上请求.asp文件时,ASP脚本开始运
行。然后Web服务器调用ASP,ASP全面读取请求的文件,执
行所有脚本命令,并将Web页传送给浏览器。
由于脚本在服务器上而不是在客户端运行,传送到浏览器上
的Web页是在Web服务器上生成的。所以不必担心浏览器能否
处理脚本:Web服务器已经完成了所有脚本的处理,并将标准的
HTML传输到浏览器。由于只有脚本的结果返回到浏览器,所以
服务器端脚本不易复制。用户看不到创建他们正在浏览的页的脚
本命令。
二、ASP的新功能
ActiveServerPages在功能方面有所增强,更易于开发应
用程序。
Microsoft脚本调试程序。您可以使用脚本调试程序调
试.asp文件。请参阅调试ASP脚本。
事务性脚本。ASP页和页中使用的对象可以运行于事务
环境之下。在页上的全部工作只有两种结果:提交或终止。事务
可以保护应用程序免于因失败而导致数据丢失。请参阅创建事务
性脚本。
管理工具。许多应用程序设置可在Internet服务管理器
上进行,这是InternetInformationServer和PersonalWebServer
(在WindowsNTWorkstation上)的管理工具。请参阅配置ASP
应用程序。
隔离ASP应用程序。您可以隔离ASP应用程序以便它
们能在Web服务器上独立的内存空间内运行。万一某个应用程
序失败时,可以保护其他应用程序和Web服务器。它也使您可
以在不停止Web服务器的情况下,停止一个应用程序或从内存
中卸载其组件。请参阅隔离应用程序.
文件上载。浏览器可以通过PostingAcceptor应用程序
将文件上载到Web服务器。可以编写ASP脚本来发送带有从
PostingAcceptor传来的信息的email,如每一个上载文件的位置
和名称。请参阅PostingAccepter文档(在MicrosoftSiteServer
Express的目录表中)。
新的ASP组件。ASP提供了新的基础组件。有关概述
请参阅ActiveX组件。
应用程序根目录的改变oASP应用程序的根目录在您的
Web站点上可以是物理目录。以前,根目录必须映射为虚拟目录。
现在可以用Internet服务管理器指示ASP应用程序的根目录。请
参阅创建应用程序。必须将「asp文件置于应用程序树中,Web服
务器才能检测文件的改变并且自动重装它们。
支持InternetExplorer4.0通道和Web预测。当ASP要
发送包含通道定义命令的文件时,它会自动告诉Internet
Explorer4.0o使用ASP很容易就能生成通道定义(.cdf)文件。
支持HTTP1.1协议。InternetInformationServer和
PersonalWebServer支持HTTP1.1协议。在响应支持HTTP1.1
的浏览器(例如InternetExplorer4.0)时,这一支持可使ASP利
用新协议的高效率。例如,当向浏览器返回页的时候,ASP使用
大块转换编码以提高网络效率。
三、创建ASP页
ActiveServerPages(ASP)文件是以.asp为扩展名的文
本文件,这个文本文件可以包括下列部分的任意组合:
文本
HTML标记
ASP脚本命令
创建.asp文件非常容易。如果要在HTML文件中添加脚
本,只需将该文件的扩展名.htm或.html替换为.asp就可以了。
要使.asp文件可用于Web用户,请将这个新文件保存在Web站
点上的目录中(请确定启用了该目录的脚本和执行权限)。使用
浏览器查看该文件时,可以看到ASP处理并返回了HTML页。
现在可以在.asp文件中添加脚本命令了。
注意因为.asp文件需要额外的处理,请不要将所有的
HTML页都转换为ASP页。应该只将包含脚本命令的文件转换
为.asp文件。.asp和.htm文件可以放置在相同的目录中。
使用任何的文本编辑器都可以创建.asp文件。使用那些
带有ASP增强支持的编辑器将更能提高效率,如Microsoft
VisualInterDev。如果您从未使用过HTML,请考虑先使用
MicrosoftFrontPageoFrontPage创建文档和格式化文本就象
使用文字处理工具一样简单。接下来还可以使用InsertScript命
令在FrontPage创建的HTML页中加入简单的ASP命令。
加入Script命令
脚本是一系列的命令和指令。与HTML标签不同,script
命令指示Web服务器执行操作,而HTML标签只是简单地格式
化文本或读取图形、视频及音频文件。Script命令可以在变量中
存储用户名,在返回到浏览器的页中显示用户名或将用户名存储
在数据库中。
脚本命令通过定界符与文本区别开来。定界符是字符或
一串字符,它标志单元开始或结束。HTML使用定界符秦小于号
(<)和大于号(>)括入HTML标签。ASP使用定界符〈%
和%>括入脚本命令。您可以在定界符中括入任何命令,只要
这些命令对正在使用的脚本语言有效。下面的例子展示了包含脚
本命令的简单的HTML页:
<HTML>
<BODY>
Thispagewaslastrefreshedon<%=Now%>.
</BODY>
</HTML>
VBScript函数Now返回当前的日期和时间。Web服务
器处理该页时,会使用当前的日期和时间替换v%=Now%>并且
将该页返回到浏览器:
Thispagewaslastrefreshedon8/1/972:20:00PM.
定界符括入的命令被称为主脚本命令。这些命令被主脚
本语言处理。在脚本定界符中使用的任何命令都必须对主脚本语
言有效。默认情况下,主脚本语言是VBScript。要设置另一种语
言。请参阅使用脚本语言。
如果您已经熟悉了客户端脚本编写(编写在浏览器上运
行的脚本),请注意不要用HTMLvSCRIPT>元素括入表达式。在
编写服务器端脚本时,只用〈SCRIPT,元素在主脚本语言外的其
他语言中定义过程。关于详细信息,请参阅使用脚本语言。
合成HTML和脚本命令
在ASP定界符中可以包含任何在主脚本语言中合法的
语句、表达式、过程或操作符。在VBScript和其他脚本语言中,
语句是语法完整的单元,该单元表达某项活动、声明或定义。下
面的条件语句If...Then...Else是一条常见的
VBScript语句。
<%IfTime>=#12:00:00AM#AndTime<#12:00:00PM#
Then
Greeting="GoodMorning!"
Else
Greeting="Hello!"
EndIf
%>
<%=Greeting%>
这条语句将值"GoodMorning!"或值"Hello!"存储在变量
greeting中。<%=Greeting%>命令将当前的变量值发送到浏览器
中。
这样,在(Web服务器所在时区的)正午12点前浏览
该脚本的用户将看到:GoodMorning!
在正午12点或以后浏览此脚本的用户将看到:Hello!
在语句的不同部分之间可以加入HTML文本。例如,
下面的脚本在If…Then...Else语句中加入了HTML,产生了与上
面脚本同样的结果:
<%IfTime>=#12:00:00AM#AndTime<#12:00:00PM#
Then%>
GoodMorning!
<%Else%>
Hello!
<%EndIf%>
如果条件为真,也就是说,如果时间为午夜、午夜以后
或者中午以前,那么Web服务器将跟随条件("GoodMorning")
的HTML发送到浏览器;否则,将跟随Else的HTML("Hello")
发送到浏览器。这种混合HTML和脚本命令的方式可以方便地
将If...Then...Else语句变换为几行HTML文本。如果要在Web
页上显示多处问候,前一个例子更为有用。只需要设置一次
变量,就可以重复显示。
最好从脚本命令中将HTML文本返回到浏览器,而不
用脚本命令散布HTML文本。要将文本返回到浏览器,请使用
ASP的内建对象Response。下面的例子可以产生与前一个脚本同
样的结果:
<%
IfTime>=#12:00:00AM#AndTime<#12:00:00PM#Then
Response.Write"GoodMorning!"
Else
Response.Write"Hello!"
EndIf
%>
Response.Write将跟随的文本发送到浏览器。要动态构
造返回浏览器的文本,请在语句中使用Response.Writeo例如,
可能要构造包含一些变量值的字符串。
在使用组件和对象以及向浏览器传送内容中将了解到
更多有关Response对象和一般对象的信息。现在,先了解将脚
本命令插入到HTML页中的几种方法。
在ASP定界符中可以包含用默认主脚本语言编写的过
程。详细信息,请参阅使用脚本语言。
如果正在使用JScript命令,可以插入花括号指示语句
块直接进入ASP命令,而不用考虑它是否夹杂着HTML标签和
文本。例如:
<%if(screenresolution=="low"){%>
Thisisthetextversionofapage.
<%}else{%>
Thisisthemultimediaversionofapage.
<%}%>
使用ASP指令
ASP提供了您使用的脚本语言以外的指令。这是一些输
出指令和处理指令。
ASP的输出指令v%=expression%>显示表达式的值。
这个输出指令等同于使用Response.Write显示信息。例如,输出
表达式v%=sport%>将文字climbing(变量当前的值)传送到
浏览器。
ASP处理指令v%@keyword%>为ASP提供处理.asp
文件所需的信息。例如,下面的指令将VBScript设为该页的主
脚本语言:v%@LANGUAGE=VBScript%>
处理指令必须出现在.asp文件的第一行。不要将处理指
令放在包含#include语句的文件中。必须在at标记(@)和关键
字之间加入一个空格。处理指令有下列关键字:
LANGUAGE关键字设置页的脚本语言;请参阅使用脚本语
言。
CODEPAGE关键字设置页的代码页(字符编码);请参阅
使用国际站点。
LCID关键字设置页的现场标识符;请参阅使用国际站点。
TRANSACTION关键字指定将在事务处理环境下运行的
页;请参阅创建事务处理脚本。
ENABLESESSIONSTATE关键字指定ASP页是否使用会话
状态;请参阅管理会话。
可以在单个指令中包含多个关键字;关键字/值对之间
必须由空格分开。不要在等号(=)左右加入空格。下面的例子
中设置了脚本语言和代码页:
<%@LANGUAGE=JScriptCODEPAGE=932%>
在脚本中的空白字符
如果您的主脚本语言是VBScript或者JScript,ASP从
指令中删除空白字符。使用其他脚本语言时,ASP保留空白字符,
这样那些需要使用位置和缩进的语言,如Python就可以被正确
解释了。空白字符包括空格、制表符、回车和换行符。
使用VBScript和JScript时,在打开定界符之后和关闭
定界符之前使用空白字符更容易阅读命令。下面的命令都是合法
的:
<%Color="Green"%>
<%Color="Green"%>
<%
Color="Green"
%>
ASP将一个语句的关闭定界符与下一个语句的打开定
界符之间的空白字符删除。要保留两个语句间的空白字符,比如
在句子中显示变量值的时候,请使用HTML不间断空符
( )o例如:
<%'Definetwovariableswithstringvalues.
Hello="Hello"
World="World"
%>
<P>Myresponseistosay"<%=Hello%> <%=
World%>."</P>
四、使用脚本语言
脚本语言是介于HTML和Java、C++和VisualBasic之
类的编程语言之间的语言。HTML通常用于格式化文本和链接网
页。编程语言通常用于向计算机发送一系列复杂指令。脚本语言
也可用来向计算机发送指令,但它们的语法和规则没有可编译的
编程语言那样严格和复杂。脚本语言主要用于格式化文本和
使用以编程语言编写的已编译好的组件。
ActiveServerPages使Web开发商用多种脚本语言编写
完整的过程成为可能。事实上,在单个.asp文件内部就可以使用
多种脚本语言。另外,由于脚本是在服务器端读取和处理的,所
以请求.asp文件的客户端浏览器并不需要支持脚本。
您可以使用任意一种其相应的脚本引擎已安装在Web
服务器上的脚本语言。脚本引擎是处理用某种语言书写的命令的
程序。ActiveServerPages带有两个脚本引擎:MicrosoftVisual
BasicScriptingEdition(VBScript)和MicrosoftJScripto您也可以安
装和使用其他的脚本语言引擎,例如REXX和Perl。
如果您已经是VisualBasic程序员,就可以马上使用
VBScript,它是VisualBasic的子集。如果您是Java、C或C++
程序员,您会发现JScript语法对您来说是熟悉的,虽然JScript
与Java或C并没有联系。
如果您熟悉其他脚本语言,例如REXX或Perl,您可获
取和安装相应的脚本引擎,这样就可以使用您熟悉的脚本语言
了。ActiveServerPages是ActiveX脚本的宿主。要使用一种语
言,必须安装脚本引擎,该引擎必须遵循ActiveX脚本标准并作
为一个COM(组件对象模型)对象驻留在Web服务器上。
设置主脚本语言
ASP主脚本语言是用来处理在分界符<%和%>内
部的命令的语言。默认时,主脚本语言是VBScript。您可以将任
何一种具有脚本引擎的脚本语言作为主脚本语言。您可以逐页设
置主脚本语言,也可以在ASP应用程序中设置所有页的主脚本
;g五百口。
为某页设置语言
要设置单个页的主脚本语言,可将v%@
LANGUAGE%>指令添加到.asp文件的开头。该指令的语法是:
<%@LANGUAGE=ScriptingLanguage%>
其中ScriptingLanguage就是您所设置的页的主脚本语
言。如果对某页进行了设置,那么该页将忽略在应用程序中对所
有页的全局设置。
请遵循使用ASP指令的指导。详细信息,请参阅“创
建ASP贡o
注意要将不支持Object.Method语法的语言作为主脚本
语言使用,必须先创建LanguageEngines注册表键。详细信息,
请参阅注册表。
为应用程序设置语言
在应用程序中,如要为所有页设置主脚本语言,可在
Internet服务管理器的“App选项”选项卡上设置”默认的ASP语
言”属性。详细信息,请参阅配置ASP应用程序。
在服务器上使用VBScript和JScript
在服务端通过ASP使用VBScript时,两个VBScript特
征将失效。由于ActiveServerPages脚本是在服务器端执行的,
表示用户接口的元素的VBScript语句InputBox利MsgBox将不
被支持。另外,在服务器端的脚本中,请不要使用VBScript函
数CreateObject和GetObjecto而要使用Server.CreateObject,这
样ASP就可以跟踪对象实例了。用CreateObject或GetObject创
建的对象不能访问ASP内建对象,也不能参与事务处理。该规
则的一个例外是如果您使用的是Admin对象和Javamonikerso
详细信息,请参阅IISAdmin对象和创建Java类的实例。
关于所有VBScript和JScript的操作符、函数、语句、
对象、属性及方法的列表及详细说明,请参阅VBScript语言参
考和JScript语言参考。
包含注释
由于ASP脚本是在服务器端处理的,所以即使客户端
的浏览器不支持脚本语言,也不必通过包含进HTML注释标记
来隐藏脚本,但客户端的脚本则通常需要这样处理。在内容送到
浏览器之前,所有ASP命令都已被处理好了。您可用HTML注
释将注释加进HTML页。注释将返回给浏览器,若用户浏览
HTML源文件,就可以看见。
VBScript注释
VBScript支持撇号型注释。与HTML注释不同,当处
理脚本时,它们将被删除,而不是被送到浏览器。
<%
'Thislineandthefollowingtwoarecomments.
'ThePrintTablefunctionprintsall
'theelementsinanarray.
CallPrintTable(myarrayO)
%>
输出表达式不能包括注释。例如,下面的第一行将正常
运行,而第二行则不能,因为它是以<%=开头的。
<%i=i4-1'thisincrementsi.Thisscriptwillwork.%>
<%=name'thisprintsthevariablename.Thisscriptwill
fail.%>
JScript注释
JScript支持〃注释符。每一个注释行中都必须使用该注
释符。
<%CallPrintDate%>
<SCRIPTLANGUAGE=JScriptRUNAT=Server>
//ThisisadefinitionfortheprocedurePrintDate.
functionPrintDate()
(
varx
x=newDate()
//Thislinesendsthecurrentdatetothebrowser,
//translatedtoastring.
Response.Write(x.toStringO)
)
</SCRIPT>
大小写敏感性
VBScript不区分大小写。例如,您可以用Request或
request来引用ASPRequest对象。不区分大小写的后果是您不能
用大小写来区分变量名。
例如,您不能创建两个名为Color和color的单独变量。
JScript区分大小写。要在脚本中使用JScript关键字,就必
须按参考页中所示的大小写来书写。例如,用date来代替Date
将导致错误。在JScript中,对象名必须大写;方法名和属性名
可大写也可小写。本文所示的ASP内建对象的情况将在JScript
命令中正常工作。
五、使用变量和常量
变量是计算机内存中已命名的存储位置,其中包含了数
字或字符串等数据。变量包含的信息被称为变量的值。变量使用
用户便于理解脚本操作的名称为用户提供了一种存储、检索和操
作数据的途径。
声明和命名变量
命名和声明变量应遵循脚本语言的规则及指导。即使在
使用变量前不需要去声明变量,也应养成在编程时声明变量的良
好习惯,因为这样有助于防止错误发生。声明一个变量意味着告
诉脚本引擎,有一个特定名称的变量,这样就可以在脚本中引用
该变量。
VBScript
VBScript并不需要声明变量,但在使用所有变量前声明
它们是一种好的脚本书写习惯。要在VBScript中声明变量,请
用Dim>Public或Private语句。例如:
<%DimUserName%>
可以在需要显式声明变量的.asp文件中用VBScript
OptionExplicit语句。OptionExplicit必须在任何一个ASP指令
之后及任何一个HTML文本或脚本命令之前出现。该语句仅影
响用VBScript书写的ASP命令,而不会影响JScript命令。
关于这些命令的详细信息,请参阅VBScript语言参考。
JScript
MicrosoftJScript仅当变量为本地过程变量时才需声明,
但在使用所有变量前声明它们是一种好的脚本书写习惯。要声明
一个变量,请使用var语句。例如:
<%varUserName;%>
有关var语句的详细信息,请参阅JScript语言参考。
变量作用域
变量的作用域即生命期,决定哪些脚本命令可访问变
量。在过程内部声明的变量具有局部作用域。每执行一次过程,
变量就被创建然后消亡。而过程外部的任何命令都不能访问它。
在过程外部声明的变量具有全局作用域,其值能被ASP页上的
任何脚本命令访问和修改。
声明变量时,局部变量和全局变量可以有相同的名称。
而改变其中一个的值并不会改变另一个的值。如果没有声明变
量,则可能不小心会改变一个全局变量的值。例如,以下脚本命
令返回值1,虽然有两个名为Y变量:
<%
DimY
Y=1
CallSetLocalVariable
Response.WriteY
SubSetLocalVariable
DimY
Y=2
EndSub
%>
由于变量没有显式声明,以下的脚本命令将返回2。当
过程调用将Y设置为2时,脚本引擎认为该过程是要修改全局
变量:
<%
Y=1
CallSetLocalVariable
Response.WriteY
SubSetLocalVariable
Y=2
EndSub
%>
养成显式声明所有变量的编程习惯可以避免许多问题。
尤其在当您用include语句将文件包含进ASP主页时,就显得更
为重要。一个独立文件中被包含的脚本是被当作整个包含它的文
件的一部分来处理的。用不同的名称来命名主脚本和被包含脚本
中用到的变量,这容易被遗忘,除非声明变量。
为变量赋予会话或应用程序作用域
全局变量仅在单个ASP页中可用,要使它在单个ASP
页之外可用,就必须为变量赋予会话或应用程序作用域。会话作
用域变量对一个用户所请求的ASP应用程序中的所有页都是可
用的。应用程序作用域变量也如此。对单个用户来说,会话变量
是存储信息的最佳途径,例如,首选项、用户名或用户标识。对
于一个特殊应用程序的所有用户,应用程序作用域是存储信
息的最佳途径,例如,应用程序特定的问候语或应用程序所需的
初始值。
ASP提供两个内建对象来让您存储变量:Session对象
和Application对象。
您也可以创建具有会话或应用程序作用域的对象实例。
详细信息,请参阅设置对象作用域。
会话作用域
要为变量赋予会话作用域,将该变量存储到Session对
象中即可,方法是为该对象的已命名条目指派一个值。例如,以
下命令将两个新的变量存储到Session对象中。
<%
Session(\"FirstName\")=
Session(\"LastName\")=V'SmithV
%>
要Session对象中检索信息,可以用输出指令(<%=)或
Response.Write访问已命名的条目。以下示例用输出指令显
示
Session(\"FirstName\")的当前值:
Welcome<%=Session(\"FirstName\")%>
可在Session对象中存储用户首选项,然后就可以访问
这些首选项,从而决定将哪一页返回给用户。例如,您可以允许
用户在应用程序的第一页指定纯文本内容,然后将这一选择应用
到用户在该应用程序中访问的所有后续页。
<%IfSession(\"ScreenResolution\")=\"Low\"Then%>
Thisisthetextversionofthepage.
<%Else%>
Thisisthemultimediaversionofthepage.
<%EndIf%>
应用程序作用域
要为变量赋予应用程序作用域,将该变量存储到
Application对象中即可,方法是为该对象的已命名条目指派一个
值。例如,以下命令将一个应用程序特定的问候语存储到
Application对象中:
<%Application(\"Greeting\")=\"WelcometoExploration
Air\"%>
要从Application对象中检索信息,可以使用ASP输出
指令(v%=)或Response.Write从该应用程序的任意后续页中访问
已命名条目。以下示例用输出指令显示Application(\"Greeting\")
的值:
<%=Application(\"Greeting\")%>
使用常量
常量是用来代替一个数或字符串的名称。一些随ASP
提供的基本组件,例如ActiveXDataObjects(ADO),定义了您在
脚本中可以使用的常量。组件可在一个组件类型库中声明常量,
组件类型库是一个包含ActiveX组件所支持的对象和类型的信息
的文件。一旦在Global.asa文件中声明了一个类型库,您
就可以在该应用程序的任意页中使用已定义的常量。
可在Global.asa中用vMETADATA^^m为应用程序声
明类型库。例如,要声明ADO类型库,可用以下语句:
〈「METADATATYPE=\"typelib\"
FILE=\"c:\\programfilesWcommon
filesWsystemWadoWmsado15.dll\"
~>
这样,您就可以在与Global.asa文件相同的应用程序的
中使用ADO常量。在下面的示例中,adOpenKeyset和
adLockOptimistic是ADO常量:
VCreateandOpenRecordsetObject
SetRsCustomerList=
Server.CreateObject(\"ADODB.Recordset\")
RsCustomerList.ActiveConnection=OBJdbConnection
RsCustomerList.CursorType=adOpenKeyset
RsCustomerList.LockType=adLockOptimistic
有关〈METADATA〉标记的参考信息,请参阅
TypeLibrary声明。
在以前版本的ASP中,一些组件在文件中提供常量定
义,每个使用那些组件的ASP文件必须包含该文件。用用腕1血6
指令来包含常量定义的用法仍被支持,但使用类型库通常更方便
并且能使脚本更易于升级。在以后版本的ASP中,组件可能将
不再提供常量定义文件。
您可以定义自己的常量。在VBScript中,用Const语句,
在JScript中,用var语句。如果在多个ASP页中使用常量,可
在独立的文件中放置常量,然后将其包含进每一个使用该常量的
ASP文件中去。
六、使用集合
大多数ASP内建对象支持集合。集合是存储字符串、
数字、对象和其他值的地方。除了在存储或取出项目时集合会自
动扩展与搜索外,集合与数组非常相近。与数组不同的是,集合
被修改后,项目的位置将会移动。可以通过集合中项目的名称、
索引或者通过在集合的所有项目中遍历访问项目。
通过名称和索引访问项目
通过使用项目名称可以访问集合中的具体项目。例如,
Contents集合拥有在Session对象中保存的所有变量。同样也拥
有由Server.CreateObject创建的所有对象。假设在Session对象中
存储了下列用户信息:
<%
Session.Contents(\"FirstName\")=\"Sam\"
Session.Contents(\"LastName\")=\"Woo\"
Session.Contents(\"Age\")=29
%>
可以使用在集合中存储项目时关联的名称访问项目。例
如,下面的表达式返回字符串“Sam\":
<%=Session.Contents(\"FirstName\")%>
通过使用与项目关联的索引或号码也可以访问项目。例
如,下面的表达式检索存储在Session对象的第二个存储槽中的
信息并且返回\"Woo\":
<%=Session.Contents(2)%>
ASP集合从1开始编号。当在集合中增加或删除项目
时,与项目关联的索引将会改变。所以不能认为项目的索引始终
不变。正如将在下面的主题中说明的那样,利用索引的访问一般
用来遍历集合,或访问只读集合中的项目。
通过使用速记的名称可以访问项目。ASP以特定的顺序
搜索与对象关联的集合。如果在对象的集合中特定名称的项目只
出现一次的话,可以消除该集合的名称:
<%=Session(\"FirstName\")%>
访问存储在Application或Session对象中的项目时,消
除集合名称一般是安全的。但是,对于Request对象,最好指定
集合名称,因为该集合很可能包含重复的名称。
遍历集合
在集合的所有项目中遍历可以了解集合中存储的项目
或修改项目。遍历集合时,必须提供集合名称。例如,可以使用
VBScript中的For...Each语句访问存储在Session对象中的项目:
<%
VDeciareacountervariable.
DimItem
VForeachiteminthecollection,displayitsvalue.
ForEachIteminSession.Contents
Response.WriteSession.Contents(Item)&\"<BR>\"
Next
%>
可以使用VBScript中的For...Next语句遍历集合。例如,
要列出上例中存储在Session中的三个项目,可以使用下列语句。
<%
VDeclareacountervariable.
DimItem
VRepeattheloopuntilthevalueofcounterisequalto3.
ForItem=1to3
Response.WriteSession.Contents(Item)&\"<BR>\"
Next
%>
因为一般不知道存储在集合中的项目个数,ASP支持集
合的Count属性,这个属性返回集合中的项目数。可以使Count
属性指定计数器的终值。
<%
VDeclareacountervariable.
DimItem
VRepeatthisloopuntilthecounterequalsthenumberofitems
Vinthecollection.
ForItem=1toSession.Contents.Count
Response.WriteSession.Contents(ltem)&\"<BR>\"
Next
%>
可以在脚本中使用for语句在集合中循环。在JScript的
for语句中使用Count属性时,为了收到更大的效果,应该将Count
值分配给本地变量并使用该变量设置计数器终值。这样,脚本引
擎就不需要每次循环都查寻Count的值。下面的例子展示了这个
技巧:
<%
varitem,numitems;
numitems=Session.Contents.Count;
for(item=1;item<=numitems;item++){
Response.Write(Session.Contents(item)+\"<BR>\")
)
%>
MicrosoftJScript3.0引入了Enumerator对象。可以使用
该对象遍历ASP集合。atEnd方法指出了集合中是否还存在项目。
moveNext方法移动到集合中的下一个项目。
<%
//CreateanEnumeratorobject
varmycoll=newEnumerator(Session.Contents);
//Iteratethroughthecollectionanddisplayeachitem
while(!mycoll.atEnd()){
varx=mycoll.item();
Response.Write(Session.Contents(x)+\"<BR>\");
mycoll.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),就可以避免这种情况。下面的这个例子展示了这
个技巧。
<%
VDeciarecountervariables
DimCookie,Subkey
VDisplaytheentirecookiecollection.
ForEachCookieinRequest.Cookies
Response.WriteCookie&\"<BR>\"
IfRequest.Cookies(Cookie).HasKeysThen
VDisplaythesubkeys
ForEachSubkeyinRequest.Cookies(Cookie)
Response.WriteSubkey&\"=\"&
Request.Cookies(Cookie)(Subkey)&\"<BR>\"
Next
Else
Response.Write\"Nosubkeysinthiscookie<BR>\"
EndIf
Next
%>
遍历对象集合
Session和Application集合可以保存数量变量或者对象
实例。Contents集合拥有数量变量和通过调用Server.CreateObject
生成的对象实例。StaticObjects集合拥有在Global.asa文件中使
用HTML〈OBJECT〉元素仓U建的对象。
在遍历包含对象的集合口寸,可以访问对象的标识符或对
象的方法和属性。例如,假设应用程序使用一些对象创建用户帐
号,而且每个对象有初始化方法,可以遍历StaticObjects集合来
调用每个初始化方法:
<%
ForEachObjectinSession.StaticObjects
Session.StaticObjects(Object).InitializeUser
Next
%>
ASP集合有何不同之处?
尽管在本主题中讨论的ASP集合与VisualBasic的
Collection对象非常相似,但还是有些不同。ASP集合支持Count
属性和Item方法,但不支持Add和Remove方法。
设置对象作用域
对象的作用域决定哪些脚本可以使用该对象。默认情况
下,当您创建对象实例时,该对象具有页作用域。同一ASP页
中的任何脚本命令都能使用该页作用域的对象;当ASP页送回
客户端时,该对象即被释放。对大多数对象来说,推荐的作用域
是页作用域。您可以改变一个对象的作用域,使其可被其他页的
脚本使用。本主题将解释如何使用页作用域的对象以及如何改变
对象的作用域。
使用页作用域对象
在ASP页上用Server.CreateObject创建的对象在该页的
生存期内一直存在。该对象对该页的任何脚本命令都是可访问
的,当ASP处理完该页时,该对象即被释放。因此,对象具有
该页的作用域或生命周期。
在用VisualBasic或VBScript编程时,要注意在ASP
处理完该页之前不要释放对象。例如,以下语句经常用于通过将
对象变量赋以Nothing值来释放对象:
SetmyObj=Nothing
如果您在ASP页中包含了该语句,那么任何使用myObj
的企图都将会返回一个预期的错误代码。但在内部,即使在对象
释放以后,ASP仍保留对它的引用。当您在脚本中不能使用对象
时,对象的资源直到ASP处理完页之后才释放。同样,如果您
通过创建另一个对象实例并将其赋给已使用过的对象变量来释
放该对象时,ASP将保留对原对象实例的引用。对大多数
脚本来说,创建多个对象可能不会产生问题,但如果对象使用共
享资源,比如数据库连接,就有可能出现问题。
由于对象有页作用域,所以不要依靠手工释放的对象。
例如,以下的循环创建1001个Connection对象,它将能打开大
多数的连接甚至于一个大型的SQLserver:
<%
ForI=0to1000
SetConn=Server.CreateObject(\"ADODB.Connection\")
Conn.Open\"connectionstring\"
Next
%>
总的来说,应该尽量避免在一个循环内部创建对象。如
果无法避免,您应该手工释放被对象使用过的资源。如果
Connection对象仅被创建一次,且数据资源的物理连接在每个循
环中被打开然后关闭,那么上例将会正常运行:
<%
SetConn=Server.CreateObject(\"ADODB.Connection\")
ForI=0to1000
Conn.Open\"connectionstring\"
Conn.Close
Next
%>
为对象赋予会话作用域
在应用程序中,对于每个新会话,都会创建session-scope
对象,并且在会话结束后会将其释放。因此,每个活动的会话都
有一个对象。会话作用域用于从多个脚本中调用的对象,但只影
响一个用户会话。您可以只在需要时才为对象赋予会话作用域。
如果确实需要使用会话作用域,那么就必须了解提供对象的组件
的线程模型,因为它影响性能和对象的安全环境。详细信息,请
参阅本主题的“高级信息:性能问题”。
要为对象赋予会话作用域,请将对象存储在ASPSession
内建对象中,您既可以在Global.asa文件中使用〈OBJECT〉标记,
也可以在ASP页上使用Server.CreateObject方法创建具有会话作
用域的对象实例。
在Global.asa文件中,您可用扩展了RUNAT属性(必
须设置为Sever)和SCOPE属性(必须设置为Session)的
<OBJECT>标记。以下示例创建一个AdRotator对象的会话作
用域实例:
<OBJECTRUNAT=ServerSCOPE=SessionID=MyAd
PROGID=\"MSWC.Adrotator\">
</OBJECT>
一旦您在Session对象中存储了对象,您就可以从应用
程序的任何页中访问该对象。下面的语句使用上例中由
<OBJECT>标记创建的对象实例:
<%=MyAd.GetAdvertisement(\"addata.txt\")%>
在ASP页上,您也可以使用Server.CreateObject方法将
对象存储在Session内建对象中。以下示例在Session对象中存储
AdRotator对象的一■个实例。
<%SetSession(\"MyAd\")=
Server.CreateObject(\"MSWC.Adrotator\")%>
要显示广告,您首先应该获取存储在Session对象中的
AdRotator对象的实例,然后才能调用方法来显示对象:
<%SetMyAd=Session(\"MyAd\")%>
<%=MyAd.GetAdvertisement(\"addata.txt\")%>
在用〈OBJECT〉标记声明的对象被某个.asp文件中的脚
本命令引用之前,ASP并不创建其实例。Server.CreateObject方
法则立即创建该对象实例。
因此,对会话作用域对象来说,使用〈OBJECT〉标记要
比Server.CreateObject属性更好。
为对象赋予应用程序作用域
application-scope对象是在应用程序启动时就创建的对
象的单个实例。该对象由所有客户端请求共享。仅在极少数情况
下,您才需要为对象赋予应用程序作用域。一些实用程序对象,
例如计数器等,可能需要应用程序作用域。但一般来说,您可用
在下一节中建议的替代方案。另外,线程模型会影响性能和对象
安全环境(请参阅本主题的“高级信息:性能问题”)。
要为对象赋予应用程序作用域并将其存储在
ASPApplication内建对象中,既可以使用Global.asa文件中的
<OBJECT>^iB,也可以使用ASP页上的Server.CreateObject方
法创建应用程序作用域的对象实例。
在Global.asa文件中,您可用扩展了RUNAT属性(必
须设置为Sever)和SCOPE属性(必须设置为Session)的
<OBJECT>标记。在ASP页中,您可以使用Server.CreateObject
将对象实例存储在Application内建对象中。关于使用〈OBJECT〉
标记和Server.CreateObject的示例,请参阅上一节"为对象赋予会
话作用域”。
会话和应用程序作用域的替代方案
仅当需要时,才能为对象赋予会话或应用程序作用域。
因为在会话或应用程序结束运行之前,这些对象会一直保留。它
们会占用内存或数据库连接等资源,这些资源可能会在其他方面
更有用。另外,组件的线程模型会影响您从中所创建的对象的性
能,尤其是那些具有会话或应用程序作用域的对象。
在很多情况下,比创建应用程序或会话作用域对象更好
的方法就是利用会话或应用程序作用域变量,将信息传递给在网
页一级创建的对象。例如,不要为ADOConnection对象赋予会
话或应用程序作用域,因为它创建的连接会在相当长的一段时间
一直保持打开而此时脚本已不再使用ODBC连接共享。但您可
以将ODBC连接字符串存储在Session或Application内建对象
中,并在网页上从创建的Connection对象实例中获取该字符串。
通过这种方式,您可以存储在会话或应用程序名称空间中频繁使
用的信息,但只有在需要时才创建用该信息的对象。关于作用域
变量的详细信息,请参阅“使用变量和常量”。
用户自定义的JScript对象
您可以通过定义一个创建和初始化新对象的属性和方
法的构造函数来创建自己的JScript对象。当脚本用new操作符
来调用构造函数时,就会创建该对象的实例。ASP脚本支持用户
自定义的对象,当具有页作用域时,后者正常运行。但如果为用
户自定义的JScript对象赋予应用程序或会话作用域,将可
能影响该对象的功能。特别是,若一个对象具有会话或应用
程序作用域,则其他页的脚本可以获取该对象的属性,但是却不
能调用其方法。
高级信息、:性能问题
组件的线程模型可能会影响Web站点的性能,一般来
说,带有Both标记的对象是推荐在所有的ASP脚本中使用的对
象,尤其是在Session和Application对象中。不推荐使用单线程
对象,因为您可能不会始终控制所用对象的线程模型,所以,以
下的指导可帮助您获得最佳性能:
页作用域对象。带有Both或Apartment标记的对象将给予
您最佳的性能。
应用程序作用域对象。一般来说,应避免在Application对
象中放置对象。如果确需使用应用程序作用域对象,您会从结合
了FreeThreadedMarshaler的带有Both标记的对象中获得最佳性
能。您既可以用<08正仃>标记也可以用Server.CreateObject方
法在Application对象中存储带有Single、Free或Both标记的对
象。您必须用单元线程对象来使用〈OBJECT〉标记。
会话作用域对象。带有Both标记的对象将为您提供最佳性
能。用单线程或单元线程对象会导致Web服务器将会话锁定在
一个线程上。自由线程对象不会锁定会话,但运行速度不高。在
Session对象中,您可以用〈OBJECT〉标记或Server.CreateObject
方法存储对象。
如果您已安装了SDK文档,请参阅”创建ASP继二”,
您将会获得有关线程模型及其隐含的组件性能的详细信息。(在
Windows95及其后续版本中SDK文档不可用。)
七、ASP内建对象
ActiveServerPages提供内建对象,这些对象使用户更
容易收集通过浏览器请求发送的信息、响应浏览器以及存储用户
信息(如用户首选项)。本文简要说明每一个对象。有关每个对
象的详细信息,请参阅内建对象参考。
Application对象
可以使用Application对象使给定应用程序的所有用户共享
信息。
Request对象
可以使用Request对象访问任何用HTTP请求传递的信息,
包括从HTML表格用POST方法或GET方法传递的参数、cookie
和用户认证。Request对象使您能够访问发送给服务器的二进制
数据,如上载的文件。
Response对象
可以使用Response对象控制发送给用户的信息。包括直接
发送信息给浏览器、重定向浏览器到另一个URL或设置cookie
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年女骑手安全培训内容实战手册
- 2026年植物培养箱租赁合同协议
- 三门峡市卢氏县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 石家庄市晋州市2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 日喀则地区江孜县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 2026年避坑指南企业安全用电培训内容
- 洛阳市老城区2025-2026学年第二学期四年级语文第五单元测试卷(部编版含答案)
- 济宁市微山县2025-2026学年第二学期四年级语文期中考试卷(部编版含答案)
- 咸阳市泾阳县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 河源市和平县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 保障性住房政策课件
- 小区清洁保洁服务方案(3篇)
- 《守株待兔》公开课课件
- 公路工程高精度GNSS测量技术规范
- 灌溉排水工程专题练习库
- 统计知识党校培训课件
- 学前教育原理(第2版) 课件 第三章 学前教育中的基础关系
- CJ/T 402-2012城市供热管道用波纹管补偿器
- 电力变压器的综合分析与诊断
- 学校工程设计任务书
- 生物制品附录3培训
评论
0/150
提交评论