1、本章导读本章导读:Server对象是与服务器关系最为密切的一个对象,它提供了七种方法和一个属性,并通过这些方法和属性来获取服务器的特性和功能。ObjectContext对象是一个以组件为主的事务处理系统,专门用于支持开发基于MTS(Microsoft Transaction Server)的事务型Web应用软件。知识要点:Server对象 HTMLEncodeCreateObject方法ObjectContext对象Transfer 计数器组件Execute方法页面计数器组件MapPath方法导航链接组件URLEncode方法n6.1.1 Server对象语法简介对象语法简介 n6.1.2 S
2、erver对象属性对象属性 n6.1.3 Server对象方法对象方法 6.1 Server对象概述对象概述 Server对象通过属性和方法来访问对象通过属性和方法来访问Web服务器,从而实现对数据库、服务器,从而实现对数据库、网页、对象和组件的管理。其语法格式如下:网页、对象和组件的管理。其语法格式如下:Server.method|property说明:说明:method:表示方法,:表示方法,Server对象提供了对象提供了7种方法,如表种方法,如表6-1所示。所示。property:表示属性,:表示属性,Server对象属性如表对象属性如表6-2所示。所示。n6.1.1 Server对象
3、语法简介对象语法简介 属 性功 能ScriptTimeout设定脚本执行的时间,默认为90秒6.1.2 Server对象属性对象属性 S e r v e r 对 象 属 性 只 有 一 种,即ScriptTimeout,该属性用于取得或设定脚本最大延时时限,也就是说,如果脚本超过设定时限,还没有执行完毕,将被终止执行,并显示超时错误。ScriptTimeout属性的时间单位为秒,默认值90S。语法格式如下:ScriptTimeout的延时时间设定还有另外一种设置方法:即在IIS组件中设置“ASP脚本超时”。有关操作请参照1.2.2节的环境配置步骤,打开【主目录】标签后单击【配置】【选项】,弹出
4、如图6-1所示的【应用程序配置】对话框。用户可以自行修改【ASP脚本超时(M)】的值。Server对象提供了7种方法控制Web服务器的应用。1Server.CreateObject方法CreateObject是ASP中最为实用的方法。它用于创建已经注册到服务器上的ActiveX组件的对象实例,也正是因为这些组件才使得ASP具有了强大的生命力。其语法格式如下:说明:objname是指定义的对象实例名,不能与ASP内置组件名和内置对象名同名,否则会导致程序运行错误;创建组件对象实例时,关键字set不能省略,否则也会导致程序运行错误;6.1.3 Server对象方法对象方法 6.1.3 Server
5、对象方法对象方法ASP组件是指内置组件名称,有关内置组件的详细信息请参阅第十章内置组件;与ASP内置对象一样,内置组件也是具有集合、属性和方法的对象。所不同的是,内置组件须通过其对象实例才能访问其集合、属性和方法;创建内置组件的对象实例只能在当前ASP页内有效;必要时,也可以通过nothing来消除实例对象,如:【例6-01.asp】:利用内置组件PageCounter(页面计数器组件)统计当前页面被访问的次数。分析:PageCounter(页面计数器)组件用于统计当前网页被访问的次数,并把统计结果存入服务器自动建立的文件,用户无需关心该文件。PageCounter组件提供了3种方法,Page
6、Counter方法如表6-3所示。表6-3 PageCounter组件方法 Hits(url):返回指定网页的被访问次数,缺省url时为当前页Pagehits():对当前网页的访问次数加1Reset(url):重置指定网页访问次数为0,缺省url时为当前页【例6-02.asp】:利用内置组件counters(计数器组件)统计投票结果。分析:Counters(计数器)组件可产生许多独立的计数器,用于同一文件中不同对象访问次数的计数,也可用于广告点击次数或其他需要计数的场合。Counters(计数器)组件提供了4种方法,如表6-4所示。方 法 名说 明Get(计数器名)获取指定计数器的计数值,若不
7、存在,则创建它,并赋值为0Increment(计数器名)将指定计数器的计数值加1并返回,若不存在,则创建它,并赋值为1Remove(计数器名)将指定计数器从计数器组件对象实例中删除Set(计数器名,初始值)设置指定计数器的初始值并返回新值【例6-03.asp】:利用内置组件NextLink(导航超链接组件)建立在线教育、新闻组等网页导航链接。分析:利用NextLink(导航超链接组件)提供的方法和网页网址信息列表文件可以自动生成和更新网页文件导航目录,并象书一样将各页顺序连接,从而实现管理网页网址间的超文本链接。NextLink组件常用方法如表6-5所示。GetListCount(URLlis
8、tfile)获取指定文件中包含的链接网页地址列表条目总数GetListIndex(URLlistflie)获取当前页在指定文件中列表条目序号GetNextURL(URLlistflie)从指定文件中获取下一个超链接网页地址GetPreviousURL(URLlistflie)从指定文件中获取上一个超链接网页地址GetNthURL(URLlistflie,N)从指定文件中获取第N个超链接网页地址GetNextDescription(URLlistflie)从指定文件中获取下一个超链接网页文件描述信息GetPreviousDescription(URLlistflie)从指定文件中获取上一个超链接
9、网页文件描述信息GetNthDescription(URLlistflie,N)从指定文件中获取第N个超链接网页文件的描述信息2.输入框函数inputbox输入框函数(inputbox)显示一个能接受用户输入的对话框,并返回用户在对话框中输入的信息。其语法格式如下:inputbox(,xpos,ypos,helpfile,context)说明:inputbox函数同msgbox函数一样,只能用于客户端脚本代码,其中:信息内容:是显示在对话框中的字符串表达式,其最大长度大约是1024个字符;对话框标题:是显示在对话框标题栏中的字符串表达式;默认内容:是显示在对话框文本输入框中的默认文本;xpos
10、:指定对话框与屏幕左边缘的水平距离(单位为缇),省略时水平居中;2.输入框函数inputboxypos:指定对话框与屏幕上边缘的垂直距离(单位为缇),省略时距屏幕上边缘1/3处;helpfile:字符串表达式,标识为对话框提供帮助文件,须和context联合使用;context:数值表达式,标识帮助主题的上下文索引编号,须和helpfile联合使用。注意:如果省略了前面某些可选项,必须加入相应的逗号分隔符。3.1.5 服务器端脚本脚本语言在服务器端执行时,需要IIS支持,网页扩展名为.asp。语法格式如下:格式一:格式二:VBScript代码说明:使用格式一时,如果主脚本默认值不是VBScri
11、pt,则需要指令将本页的脚本语言设置为VBScript;格式二主要用于global.asa文件;和language之间需要有一个空格,且指令应放在网页的首行。3.2 VBScript3.2 VBScript的数据类型的数据类型 nVBScript语言只有一种数据类型,即变体类型Variant。Variant是一种特殊的数据类型,根据使用的场景,它可以担当不同类别的信息,如字符串、整数、日期等,这些用以区别数据信息的不同类别称为子类型。因为variant是VBScript唯一的数据类型,因此它也是VBScript中所有函数的返回值的的数据类型。表3-6列出了Variant包括的子类型:3.3 V
12、BScript常量常量 n常量是指在程序执行期间其值从不发生变化的量。在VBScript中,常量分为普通常量和符号常量。普通常量是指一个具体的数据,如“VBScript”表示一字符串,123.456e12和869d-8分别表示一单精度浮点数和一双精度浮点数,#1970-6-18#表示一日期;符号常量是指代表某一确切数据项的符号名称,符号常量又分为预定义符号常量和自定义符号常量。预定义符号常量由VBScript内在提供,如vbcrlf表示回车符和换行符的组合,vbgreen表示绿色的数值。n3.3.1 常量声明常量声明n3.3.2 常量命名规则常量命名规则 n3.3.3 常量引用常量引用n3.3
13、.4 特殊常量特殊常量 3.3.1 常量声明常量声明n普通常量和预定义符号常量,无需声明即可直接使用;用户自定义符号常量需要使用const语句声明,并给它们赋原义值。3.3.2 常量命名规则常量命名规则 n常量命名必须遵循这样的规则:n名字必须以字母开头,建议以const作为常量的前缀;n名字中不能含有句点;n名字不能超过255个字符;n名字不能和关键字同名,所谓关键字,就是dim,sub,end有特殊含义的字符串名称;n名字在被声明的作用域内必须唯一;n注意:VBScript不区分大小写。3.3.3 常量引用常量引用 n常量的引用非常简单,一旦声明,就可直接引用,比如:n3.3.4 特殊常量
14、特殊常量 下面介绍几个特殊的常量empty常量empty常量表示一个未初始化的变量。如果定义了一个变量,没有对它赋值,那么这个变量值就是empty。null常量null常量表示一个变量包含无效的数值,注意empty和null是不一样的。当在一个表达式中使用值为empty的变量时,如果它被用作数字,则它等于0;如果它被用作字符串,那么它就等于0长度字符串。null则不同,它表示变量中没有包含有效数据。3.3.4 特殊常量特殊常量nothing常量nothing用于断开对象变量和任何实际对象之间的链接,使用set语句可将一个对象变量设置为nothing,如:set 对象变量名=nothing通过把
15、一个对象变量赋值为nothing,表明已经使用完了变量所链接的对象,可以释放该对象所占用的内存以及分配给该对象的其它系统资源。如果有多个变量同时链接到一个对象,VBScript直到指向该对象的所有变量都设置为nothing时,才会释放该对象资源。true和false常量true的值为-1;false的值为0。3.4 VBScript3.4 VBScript变量变量 变量是用于标识计算机内存地址的名称,该地址可以存储脚本运行时能更改的数据信息。使用变量并不需要了解变量在计算机内存中的确切地址,只要通过变量名引用就可以查看或更改变量的值。3.4.1 变量声明变量声明3.4.2 变量赋值和引用变量赋
16、值和引用 3.4.3 标量变量和数组变量标量变量和数组变量 3.4.4 固定数组和动态数组固定数组和动态数组 3.4.5 变量作用域与存活期 3.4.1 变量声明变量声明声明变量有两种方式,即隐式声明和显式声明。nl 隐式声明脚本中首次使用时赋值即声明,无须dim语句,例如:当前日期和时间是:nl 显式声明赋值前先用dim语句声明,例如:3.4.1 变量声明变量声明nl l 强制声明变量为了避免隐式声明时,写错变量名引起的问题,最好使用语句强制要求显式声明所有变量,并将其写在所有asp语句之前,例如:运行时,将明确告诉没有声明变量cc。3.4.2 变量赋值和引用变量赋值和引用用dim 语句显示
17、声明变量时,不能直接赋值,变量赋值要用到赋值语句,变量的赋值语法格式如下:=变量的引用和常量相似,可以直接将变量赋值给另一个变量,也可以将变量引用到表达式中。3.4.2 变量赋值和引用变量赋值和引用intb then 比较inta和intb的大小intc=inta-intb 引用变量表达式inta-intbelseintc=intb 引用变量intaend if%3.4.3 标量变量和数组变量标量变量和数组变量大多数情况下,只需为声明的变量赋一个值。只包含一个值的变量被称为标量变量,简称变量。有时候,将多个相关值赋给一个变量更为方便,包含一系列值的变量,称为数组变量,简称数组。数组变量的命名、
18、声明、赋值,引用和标量变量基本相同,唯一的区别是操作数组变量时变量名后面带有括号()。n下例是一个简单的例子:n3.4.3 标量变量和数组变量标量变量和数组变量说明:在VBScript中不能定义数组的下界,括号中的数字指出数组的上界;数组元素的索引序号是从0开始计数的;在数组中使用索引为数组的每个元素赋值,如a(0)=256是将数据256赋给数组的第一个元素a(0);使用索引可以检索,引用数组元素的数据,例如:somevariable=a(8);区分是数组还是数组元素,关键看是不是赋值语句。数组并不仅限于一维,数组的维数最大可以为 60。声明多维数组时用逗号分隔括号中每个表示数组维度大小的数字
19、在下例中,mytable 变量是一个有6行和11列的二维数组:在二维数组中,括号中第一个数字表示行的数目,第二个数字表示列的数目。3.4.4 固定数组和动态数组固定数组和动态数组在基于0的数组中,数组元素的数目总是括号中显示的数字加 1,这种固定大小的数组被称为固定数组。如上例:dim a(10)和dim mytable(5,10)。也可以声明动态数组,即数组元素的数目多少可发生变化的数组。对动态数组的声明也是使用dim 语句或redim 语句。但是声明动态数组时,括号中不包含任何数字。例如:要使用动态数组,必须随后使用 redim 确定维数和每一维的大小。在下例中,redim 将动态数组的初
20、始大小设置为 3,而后面的 redim 语句将数组的大小重新调整为二维数组,同时使用 preserve 关键字在重新调整大小时保留数组原来的内容。3.4.4 固定数组和动态数组固定数组和动态数组重新调整动态数组大小的次数是没有任何限制的,将数组的大小调小时,将会丢失被删除元素的数据。3.4.5 变量作用域与存活期变量的作用域是指变量的作用范围,变量的作用域由声明它的位置决定。过程内部声明的变量称为过程级变量或局部变量,这样的变量只能在声明它们的过程中才能使用,即无法在过程外部访问;过程外部声明的变量称为脚本级变量或全级变量,同一个.asp文件中的任何脚本命令均可以访问和修改该变量的值。过程级变
21、量和脚本级变量可以同名,两者同名时,改变其中一个变量的值不会影响另一个变量的值。变量存在的时间称为存活期。脚本级变量的存活期从被声明的一刻起,直到脚本运行结束。对于过程级变量,其存活期仅是该过程运行的时间,该过程结束后,变量随之消失。在执行过程时,局部变量是理想的临时存储空间。可以在不同过程中使用同名的局部变量,这是因为每个局部变量只被声明它的过程识别。3.5 VBScript3.5 VBScript运算符运算符 nVBScript的运算法则同其它编程语言一样,首先计算算术运算符,然后计算比较运算符,最后计算逻辑运算符。如果运算符的优先级相同,哪么按照从左到右的顺序计算各运算符,运算符及优先级
22、顺序如表3-7所示。3.6 VBScript3.6 VBScript函数函数 nVBScript提供了大量的内部函数,可以在脚本代码中直接调用这些函数。恰当地使用已有的函数,可以节省大量的编写代码时间,下面依次介绍常用的函数。n3.6.1 数学函数数学函数 n3.6.2 字符串函数字符串函数 n3.6.3 日期和时间函数日期和时间函数 n3.6.4 转换函数转换函数 n3.6.5 检验函数检验函数 3.6.1 数学函数数学函数3.6.2 字符串函数字符串函数3.6.3 日期和时间函数日期和时间函数3.6.4 转换函数转换函数3.6.5 检验函数检验函数 3.7 3.7 程序结构程序结构 nVB
23、Script同其它编程语言一样也提供了三种基本程序结构:顺序结构、分支结构和循环结构。任何算法的实现都可以通过这三种结构完成设计。顺序结构是最基本的结构,下面讨论分支结构和循环结构。n3.7.1 分支结构分支结构 n3.7.2 循环结构循环结构 3.7.1 分支结构分支结构ifthenelse语句和select case语句是VBScript提供的两种分支结构。使用分支结构可以编写进行判断和选择操作的VBScript代码。1.ifthenelse语句ifthenelse语句用于判断条件是true或false,并且根据判断结果指定要执行的语句。通常,条件是使用比较运算符对值或变量进行比较的表达式
24、。有关比较运算符的详细信息,请参阅3.5节。分支结构通常有以下几种形式:3.7.1 分支结构分支结构n单分支结构n这是一种简单分支结构,省略了else子句,条件为true 时执行语句,语法结构如下:nif thenn语句序列nend ifn说明:条件表达式为true时运行ifend if之间的语句序列,否则不运行。3.7.1 分支结构分支结构二分支结构if.then.else 语句定义了两个可执行语句块,条件表达式为true 或false 时分别执行其中一支语句块。语法结构如下:if then语句序列1else语句序列2end if说明:条件表达式为 true 时运行thenelse之间语句块
25、,条件表达式为 false 时运行elseend if之间语句块。3.7.1 分支结构分支结构多分支结构ifthenelse 语句还可以根据需要进行嵌套,语法结构如下。if then if then if then end if end ifend if当嵌套层次很多的时候,难免让人眼花缭乱。这时可通过添 加 e l s e i f 子 句 的 办 法 去 掉 嵌 套 层 次,扩 充if.then.else 语句的功能,使之变成多分支结构,从而实现对多个条件依次进行判断选择。多分支结构如下:if then语句序列1elseif then语句序列2elseif then语句序列3else语句序列
26、nend ifn说明:n如果条件表达式1成立,那么就执行语句序列1;n如果条件表达式1不成立,那么就判断条件表达式2 是否成立,如果条件表达式2成立,那么就执行语句序列2;n如果条件表达式2不成立,那么就判断条件表达式3 是否成立,如果条件表达式3成立,那么就执行语句序列3;n依此类推,如果ifelse中的判断条件表达式都不成立,那么就执行语句序列n。3.7.1 分支结构分支结构n2.select case 语句n使用多个elseif 子句往往会使程序变得难以理解,在多个条件中进行选择的更好方法是使用 select case 语句。nselect case 结构是if.then.elseif
27、结构的一种变通形式,可以从多个语句块中选择执行其中的一个语句块。select case 语句提供的功能与if.then.elseif 语句类似,但是可以使代码更加简练易读。其语法结构如下:3.7.1 分支结构分支结构select case变量或表达式case 值1语句序列1case值2语句序列2case值n语句序列ncase else语句序列n+1end select3.7.1 分支结构分支结构n说明:nselect case 结构在其开始处使用一个只计算一次的简单测试表达式;n表达式的结果将依次与分支结构中case值比较,一旦匹配,就执行该case 关联的语句块,然后执行end select
28、后面的语句;n若所有的case值都不满足表达式的结果,如果有case else的语句,则执行case else关联的语句。3.7.2 循环结构循环结构循环结构用于重复执行一组语句(称为循环体)的结构,VBScript提供了七种循环结构。简要介绍如下:语法结构一:do while语句序列loop说明:先判断条件,当条件为 true 时才会执行循环体语句 3.7.2 循环结构循环结构循环结构用于重复执行一组语句(称为循环体)的结构,VBScript提供了七种循环结构。简要介绍如下:语法结构二:do语句序列loop while说明:先无条件执行循环体一次,然后再判断条件,当条件为true时才会继续执
29、行循环体。3.7.2 循环结构循环结构循环结构用于重复执行一组语句(称为循环体)的结构,VBScript提供了七种循环结构。简要介绍如下:语法结构三:do until语句序列loop说明:先判断条件,当条件为 false 时才会执行循环体。3.7.2 循环结构循环结构循环结构用于重复执行一组语句(称为循环体)的结构,VBScript提供了七种循环结构。简要介绍如下:语法结构四:do语句序列loop until说明:先无条件执行循环体一次,然后再判断条件,当条件为false时才会继续执行循环体。3.7.2 循环结构循环结构循环结构用于重复执行一组语句(称为循环体)的结构,VBScript提供了七
30、种循环结构。简要介绍如下:n语法结构五:nwhilen语句序列nwendn说明:当条件为 true 时循环。3.7.2 循环结构循环结构循环结构用于重复执行一组语句(称为循环体)的结构,VBScript提供了七种循环结构。简要介绍如下:n语法结构六:nfor=to step n语句序列nnextn说明:指定循环次数,使用计数器重复运行语句。3.7.2 循环结构循环结构循环结构用于重复执行一组语句(称为循环体)的结构,VBScript提供了七种循环结构。简要介绍如下:n语法结构七:nfor each in n语句序列nnextn说明:遍历循环,遍历集合中或数组中的每个元素,并重复执行循环体语句。
31、3.7.2 循环结构循环结构循环结构用于重复执行一组语句(称为循环体)的结构,VBScript提供了七种循环结构。简要介绍如下:n语法结构七:nfor each in n语句序列nnextn说明:遍历循环,遍历集合中或数组中的每个元素,并重复执行循环体语句。3.8 VBScript过程和函数n在VBScript中,可被调用的程序段分为两种:一种是sub 过程,另一种是function函数。sub 过程只执行程序而没有返回值,而function函数有返回值。3.8.1 Sub过程过程 VBScript的sub过程分为事件过程和通用过程两种。客户端脚本主要使用事件过程,即当某个事件发生时,对该事件
32、做出响应的程序段,而通用过程是独立于事件的程序段,可以被其它过程调用。sub过程是指包含在sub 和end sub 语句之间的一组VBScript 语句,执行操作但不返回值。语法结构如下:sub 过程名(形参1,形参2)局部变量定义语句序列1exit sub语句序列2end sub 说明:定义形参时不能赋值,如果sub过程无任何参数,则sub过程名后仍然包含空括号();可以使用exit sub语句从sub过程中退出;过程的调用有两种形式:nl 使用call语句语法格式:ncall 过程名(实参1,实参2,)nl 不使用call语句语法格式:n过程名 实参1,实参2,n形参和实参可以同名。3.8
33、.2 Function 函数function函数,是包含在 function 和 end function 语句之间的一组 VBScript 语句。function函数与sub 过程类似,但是 function函数可以有返回值。语法结构如下:function 函数名(形参1,形参2)局部变量定义语句序列1函数名=返回值exit function语句序列2函数名=返回值end function 3.8.2 Function 函数n说明:n定义形参时不能赋值,如果function 函数无任何参数,则 function 函数名后仍然包含空括号()。nfunction函数通过函数名返回一个值,这个值是
34、在function函数体内(预定义时)通过赋值语句赋给函数名的。function 返回值的数据类型总是variant。n可以使用exit function语句从function 函数中退出。nfunction函数的调用只有一种形式,即赋值调用,语法格式如下:n=函数名(实参1,实参2)。n形参和实参可以同名。3.9 3.9 本章小结本章小结 nVBScript是ASP编程默认的脚本语言,是微软专门为浏览器IE(Internet Explorer)开发的编程语言。使用VBScript的目的是控制页面内容,增强网页的动态交互性。本章重点介绍了VBScript的语法规则,VBScript的数据类型、常量以及变量,VBScript的过程与函数以及程序结构。