2023年11月28日发(作者:)

1 ASP程序设计概述

习题1

1. 选择题(可多选)

1)静态网页的扩展名一般是:

B .php

答案:A

2ASP文件的扩展名是:

B. txt C. doc D. asp

答案:D

3)当前的Web程序开发中通常采用什么模式?

A. C/S B. B/S C. B/B D. C/C

答案:B

解释:C/S是客户机(client)/服务器(serverB/S是浏览器(browser)/服务器。

C/S一般要求用户有特定的客户端。比如QQ就是C/S模式,你的桌面上的QQ就是

腾讯公司的特定的客户端,而服务器就是腾讯的服务器。而B/S模式则不需要特定

的客户端,只要有普通浏览器,就可以访问到服务器了,Web页就是B/S 模式。

4)小王正在家里通过拨号上网访问搜狐主页,此时,他自己的计算机是:

A. 客户端 B. 既是服务器端又是客户端

C. 服务器端 D. 既不是服务器端也不是客户端

答案:A

5)小王正在访问自己计算机上的网页,此时,他自己的计算机是:

A. 客户端 B. 既是服务器端又是客户端

C. 服务器端 D. 既不是服务器端也不是客户端

答案:B

6ASP脚本代码是在哪里执行的?

A. 客户端 B. 第一次在客户端,以后在服务器端

C. 服务器端 D. 第一次在服务器端,以后在客户端

答案:C

解释:ASP脚本代码是在服务器端运行的,服务器将其解释执行为标准的HTML

代码,然后发送到客户端。

7)在以下URL中,从形式上看正确的是:

A. /history/1998/

B. /news/

C. ftp:// /history/1998/

D. ftp:///news/

1

答案:A B C D

解释:从形式上看,都是正确的。

8)如果在chapter1下建立了一个子文件夹images,并且在其中放置了一个图片文

,那么以下URL正确的是:

A. localhost/asptemp/chapter1/images/

B. 127.0.0.1/asptemp/chapter1/images/

C. localhost/inetpub/wwwroot/asptemp/chapter1/images/

D. 127.0.0.1/inetpub/wwwroot/asptemp/chapter1/images/

答案:A B

9)对于1.5.5节建立的,以下浏览方式正确的是:

A. localhost/temp/

B. 127.0.0.1/temp/

C. localhost/asptemp/chapter1/temp/

D. 127.0.0.1/asptemp/chapter1/temp/

答案:A B C D

解释:AB两种方式利用了建立的虚拟目录,CD实际上没有用到这个虚拟目录,

此时和没有什么区别。

101.5.5节的示例为基础,假如现在在C:inetpubwwwrootasptempchapter1temp

下又建立了一个子文件夹temp其中建立了一个ASP文件则浏览方式正确的是:

A. localhost/temp/temp/

B. 127.0.0.1/temp/temp/

C. localhost/asptemp/chapter1/temp/temp/

D. 127.0.0.1/asptemp/chapter1/temp/temp/

答案:A B C D

解释:AB利用了建立的虚拟目录,CD没有用到虚拟目录。

2. 问答题

1)名词解释:静态网页、动态网页、服务器端、客户端、URL

答案:

静态网页——所谓静态网页,就是说该网页文件里没有程序代码,只有HTML标记,

这种网页的扩展名一般是.htm.html。静态网页一经制成,内容就不会再变化,不管何时

何人访问,显示的都是同样的内容,如果要修改内容,就必须修改源文件,然后重新上传

到服务器上。

动态网页——所谓动态网页,就是说该网页文件不仅含有HTML标记,而且含有程序

代码,这种网页的扩展名一般根据不同的程序设计语言而不同,如ASP文件的扩展名

.asp。动态网页能够根据不同的时间、不同的来访者而显示不同的内容。如常见的BBS

留言板、聊天室一般是用动态网页实现的。

服务器端、客户端——一般来说,凡是提供服务的一方称为服务器端,而接受服务的

一方称为客户端。比如,当我们在浏览搜狐主页的时候,搜狐主页所在的服务器就称为服

务器端,而我们自己的计算机就称为客户端。

URL——大家在上网的时候,需要在浏览器地址栏中输入一个网址,回车后就可以打

开相应的网页了,这个网址又叫做统一资源定位符(URLUniform Resource Locator。在

Internet中的每一个网页文件或其他类型的文件都有自己的URL,它的一般形式是:

协议://服务器地址(域名或IP地址): 端口号/路径(含文件名)

2)请结合URL知识简述静态网页和动态网页的工作原理。

2

答案:

静态网页的工作原理是当你在浏览器里输入一个网址回车后,就向服务器端提出了

一个浏览网页的请求。服务器端接到请求后,就会找到你要浏览的静态网页文件,然后发

送给你。

动态网页的工作原理是服务器端接到客户端发出的请求后,首先会找到你要浏览的动

态网页文件,然后就解释执行其中的程序代码,将含有程序代码的动态网页转化为标准的

静态网页,然后将静态网页发送给你。

3)请简单比较ASPPHPJSP的优缺点。

答案:总的来说,ASPPHPJSP基本上都是把脚本语言嵌入到了HTML文档中。

如果要说它们最主要的优点:ASP学习简单,使用方便;PHP软件免费,运行成本低;JSP

多平台支持,转换方便。

4)某同学开发了一个显示来访时间的ASP文件,存放在C:inetpubwwwroot下,

然后在Windows资源管理器中双击该文件,却不能正常显示,请问是什么原因?

答案:ASP文件是不能直接双击运行的,必须通过浏览器访问,由服务器端来解释执

行为标准的HTML代码,然后才可以显示在浏览器中。

5)在1.4.3节中讲的是如何访问ASP文件,如果希望访问HTML网页文件,可以

用类似的方法吗?

答案:可以。对于HTML文件,服务器端找到到该文件后,直接发送给客户端即可。

6)想一想,把一个HTML网页文件直接更改扩展名为.asp行不行?

答案:可以。相当于一个不含有任何动态代码的ASP文件,运行时服务器端也会对其

进行解释执行,只不过实际上没有代码需要解释执行而已。

7)什么是应用程序?为什么要建立应用程序?

答案:简单的说,添加了虚拟目录的文件夹就可以称为应用程序。建立应用程序后,

多个网站之间就可以独立了,一些公共变量就不会混淆。

3. 实践题

1)请根据自己的实际情况搭建ASP的运行环境。

答案:请按照教材中1.2节说明搭建,具体步骤略。

2)请上网下载并安装EditPlus

答案:从下载安装程序后,直接双击安装即可,具体步骤略。

3)请在文件夹C:Inetpubwwwrootasptemptjchapter1下新建一个asp文件,在页面

上显示来访日期(日期函数为Date()

EditPlusdate

C:Inetpubwwwrootasptemptjchapter1文件夹下,名称为

清单date 显示来访日期

</span><span style='font-size:13.5px;color:#000000;letter-spacing:1.198px;font-family:宋体;'>一个简单的</span><span style='font-size:13.5px;color:#000000;letter-spacing:0.539px;font-family:Times New Roman;'>ASP</span><span style='font-size:13.5px;color:#000000;letter-spacing:1.26px;font-family:宋体;'>程序</span><span style='font-size:13.5px;color:#000000;letter-spacing:0.604px;font-family:Times New Roman;'>

欢迎您光临我的主页

<%

Dim a '声明一个变量

'给变量赋值,其中Date是日期函数 a="您来访的日期是:" & Date()

3

a '在页面上输出变量a的值

%>

保存完毕后,打开浏览器,在其中输入localhost/asptemptj/chapter1/即可。

4)请在C:Inetpubwwwrootasptemptjchapter1下面新建一个文件夹tempb,然后为

该文件夹添加虚拟目录aspb,并设置默认文档为

答案:请参考教材1.5节进行,具体步骤略。

5IISC:Inetpub

wwwroot下开发ASP文件?可不可以放在别的文件夹下?

答案:其实可以在其他文件夹下,比如在D:asptemp下建立ASP文件,具体步骤如下:

1步:首先建立D:asptemp文件夹。

2步:在IIS中为该文件夹建立虚拟目录asptemp(注意,也可以用别的名称).

3步:下面就可以在asptemp文件夹下分章建立子文件夹和ASP文件了,比如建立

chapter1子文件夹,然后在其中建立文件。

4步:建立ASP文件后,在浏览器中输入localhost/asptemp/chapter1/

即可。

4

2 HTML基础知识

习题2

1. 选择题(可多选)

1HTML文档包含的两个部分是指:

A. 文档头部 B. 标题 C. 注释 D. 文档主体

答案:A D

2HTML中的注释格式是:

A. B.

C. <%-- 注释内容 --%> D.

<bgsound src="C:3" >

-->

该页面用来演示文档头部

10

3 VBScript基础知识

习题3

1. 选择题(可多选)

1)下列哪一个变量名称是正确的?

A. 1_ab B. ab_1 C. _ab D. ab?

答案:B

2)在一段程序中a是一个变量,那么"a"是:

A. 变量 B. 直接常量 C. 字面常量 D. 符号常量

答案:D

3)下面哪条语句可以正确执行?(注:第四句我的主页两边是中文引号)

A. "

我的主页

"

B. "

我的主页

"

C. "

我的主页

"

D. "

“我的主页”

"

答案:BCD

解释:在两个双引号中再次用到双引号时,可以用单引号或两个双引号来代替。

4)执行语句a="6"后,变量a的数据子类型是?

A. 字符串 B. 日期 C. 数值 D. 布尔

答案:A

5)执行语句a="2008-8-8"后,变量a的数据子类型是?

A. 字符串 B. 日期 C. 数值 D. 布尔

答案:A

6)假设变量a=5b=3,则执行语句c="a>b"后,变量c的数据子类型是?

A. 字符串 B. 日期 C. 数值 D. 布尔

答案:A

7)语句a="abc"="abc"运行完毕后,变量a的数据子类型是?

A. 数值 B. 字符串 C. 布尔 D. 日期

答案:C

解释:右侧是一个比较运算,结果是True,然后再赋值给a

8)执行语句a=3: a=a+5后,变量a的值是:

A. 3 B. 5 C. 8 D. 出错

答案:C

解释:ASP中,冒号(:)是用来做语句分割的,也就是说可以将两行语句合成

为一行来写。因此a=3: a=a+5就等价于a=3

a=a+5,结果自然就是8.

9)已知x=123,那么执行语句y=x 10 Mod 10后,变量y的值是?

11

A. 0 B. 1 C. 2 D. 3

答案:C

解释:这是一个算术运算,运算顺序为从左至右,x10表示x整除10后的值,

12,然后再计算12 Mod 10,表示12除以10的余数,结果为2.

10)已知a= "ab",那么执行语句b="cd'" & a & " " & "ef"后,变量b的值是?

(提示:请注意题目和答案中的空格)

A. "cd'ab ef" B. "cd'abef" C. "cdabef" D. "cdab ef"

答案:A

11)下面的语句执行完毕后,变量abcd的值分别是?

<% a="1"+"1": b="1"+1: c="1" & "1": d="1" & 1 %>

A. "11""11""11""11" B. "11"2"11""11"

C. 22"11""11" D. "11""11"22

答案:B

解释:做算术运算+的时候,如果有一个操作数是数值型,另一个是可以转换为

数值的字符串,则会自动转换为数值,并执行相加运算。但是如果用&,则任何时候

都是执行连接运算。

12)请问表达式Not(6+3<5+2)的值是?

A. True B. False C. 9 D. 无法计算

答案:A

13)请问Int(3.45)Int(-3.45)的值分别是什么?

A. 4-4 B. 3-4 C. 33 D. 3-3

答案:B

解释:Int:

返回数的整数部分,且对于负数,将返回小于或等于 number 的第一个负

整数。

14)执行语句a=Int(10 * Rnd())后,则a的值不可能出现的有?

A. 0 B. 1 C. 10 D. 11

答案:CD

解释:Rnd()返回一个大于等于0且小于1的随机数。

15)在取整时按四舍五入进行的函数是?

A. Int B. Fix C. Round D. CInt

答案:C

16)请问Mid("八千里路云和月",3,2)的返回值是什么?

A. "千里" B. "里路" C. "" D. "路云"

答案:B

解释:表示从第三个字符开始取两个字符。

17)执行语句a=InStr(Trim(Replace(" abcdef ","c","")),"ef")后,变量a的值是?

A. 0 B. 1 C. 4 D. 5

答案:C

解释:注意Replace(" abcdef ","c","")是将字符c替换为空,而不是空格。

Instr()是返回第二子串在第一个串中第一次出现的位置。

18)函数DateDiff("m",#2008-8-8#,#2008-10-1#)的返回值是?

A. 1 B. 2 C. 54 D. 5

答案:2

19)对于数组a(3,4),函数UBound(a,2)的值是:

A. 1 B. 2 C. 3 D. 4

12

答案:D

解释:UBound()

返回数组的指定维数的最大可用下标.

20)假如变量a的值是"100",则IsNumeric(a)VarType(a)的值分别是?

A. True2 B. True8 C. False2 D. False8

答案:B

解释:IsNumeric()会先转化变量a的类型为数值,如果能转化,就为True。而

VarType函数只返回当前的类型,而"100"当前确实是字符串。

21)假如变量a的值是"2008-8-8",则IsDate(a)VarType(a)的值分别是?

A. True2 B. True8 C. False2 D. False8

答案:B

解释:同上题。

22)执行语句a=Chr(Asc("ABC"))后,则a的值是:

A. "ABC" B. "A" C. 65 D. 出错

答案:B

解释:Asc()函数

返回与字符串的第一个字母对应的 ANSI 字符代码,而Chr函数

返回该ANSI代码对应的字符,所以最后为

"A"

23)退出Do循环的语句是?

AExit For B. Exit Do C. Exit Sub D. Exit Function

答案:B

24)在示例3-113-12中,循环结束后,I的值分别是多少?

A. 100100 B. 101101 C. 100101 D. 101100

答案:B

25)以下哪些语句可以嵌套使用?

A. For…Next B. Do…Loop C. Select Case D. If…Then…Else

答案:ABCD

2. 问答题

1)名词解释:单目运算符、双目运算符、操作数、函数、子程序、过程

单目运算符——就是指该运算符只对一个操作数起作用。

双目运算符——指运算符对它左右两侧的操作数都起作用。

操作数——参与运算的数。

函数——就是由若干语句组成的程序模块,它可以实现一个特定的功能,并返回

一个函数值。

子程序——就是只执行程序而不返回值的程序模块。

过程——就是自己定义的函数,过程有两种:一种是Sub子程序,一种是Function

函数。两者的区别在于:Sub子程序只执行程序而不返回值,而Function函数执行程序后

会返回值。

2)脚本级变量和过程级变量有什么重要区别?

答案:脚本级变量在整个ASP文件内都可以被引用,而过程级变量,只能在过程内使

用。

3)在页面A中定义的变量可以在页面B中引用吗?

答案:一般是不可以的,但是如果把A页面包含在B中,就是可以的。

4)程序中的符号常量可以用变量来代替吗?

答案:可以。

13

5)请简述四类运算符的优先级顺序。

答案:算术运算符>连接运算符>比较运算符>逻辑运算符

6)不同过程中的变量名是否可以一样?

答案:可以,因为过程级变量,只在本过程中有效。但不推荐这样使用。

7Function函数中的形参和实参名称是否可以一样?

答案:可以,形参和实参名称可以一样,也可以不一样,因为两者是按位置对应的。

8)在For…Next循环中,可以给计数器变量赋值吗?

答案:虽然也是可以的,但是不建议更改计数器变量,因为很容易引起变量值的混乱。

9)请以示例3-12为例简述Do…Loop循环的执行过程。

答案:略,请参考3.11.2节的讲解。

10)如何将两个变量的值互换?(提示:用一个中间变量)

答案:首先定义一个中间变量,将第一个变量的值赋给中间变量,然后再将第二个变

量的值赋给第一个变量,最后将中间变量的值赋给第二个变量,这样就实现了两个变量值

的互换。

3. 实践题

1)请在你的个人主页上添加时间显示信息,显示当天的日期、时间及星期几。

答案:参见asptemptj/chapter3/Time_注意学习select case的写法, 并打开浏览

器,在其中输入localhost/asptemptj/chapter3/ Time_即可访问,清单如下:

清单Time_list Time_. 显示时间信息代码

</span><span style='font-size:13.5px;color:#000000;letter-spacing:1.26px;font-family:宋体;'>习题</span><span style='font-size:13.5px;color:#000000;letter-spacing:0.676px;font-family:Times New Roman;'>3-2-</span><span style='font-size:13.5px;color:#000000;font-family:宋体;'>(</span><span style='font-size:13.5px;color:#000000;font-family:Times New Roman;'>1</span><span style='font-size:13.5px;color:#000000;font-family:宋体;'>)</span><span style='font-size:13.5px;color:#000000;letter-spacing:0.604px;font-family:Times New Roman;'>

<%

Date() & " " & Time()

Select Case Weekday(Date())

Case 1

"星期日"

"星期一"

"星期二"

"星期三"

"星期四"

"星期五"

14

Case 2

Case 3

Case 4

Case 5

Case 6

Case 7

"星期六"

%>

2)请编写程序段,判断当天日期,如果是25日,则显示“请注意,明天可能有病

毒发作”

asptemptj/chapter3/Date_

localhost/asptemptj/chapter3/ Date_即可访问,清单如下:

清单Date_meg Date_. 判断当天日期

End Select

<%

If Day(Date())=25 Then

"请注意:明天可能有病毒发作。"

End If

%>

3)请编写程序段,随机产生一个09的整数。如果是偶数,则在页面上输出“生

成的是偶数”,否则输出“生成的是奇数”

asptemptj/chapter3/

localhost/asptemptj/chapter3/ 即可访问,清单如下:

清单 判断奇偶数码

<%

Dim s

s=Int(10 * Rnd())

If (s Mod 2)=0 Then

"生成的是偶数"

Else

"生成的是奇数"

End if

%>

15

4S=1+3+5++99,请利用两种循环语句编写程序,计算S的值。

2222

asptemptj/chapter3/

localhost/asptemptj/chapter3/ 即可访问,清单如下:

清单Cycle 计算平方和

<%

'1种算法:

Dim I,Sum

Sum=0

For I=1 To 99 Step 2

Sum=Sum+I^2

Next

"S=" & Sum

%>

<%

'2种算法

I=1

Sum=0

Do While I<=99

Sum=Sum+I^2

I=I+2

Loop

"S=" & Sum

%>

5)请编写函数计算ab的立方和,并举例调用,调用时ab分别为36

asptemptj/chapter3/Cute_

localhost/asptemptj/chapter3/ Cute_即可访问,清单如下:

清单Cute_ 计算立方和

16

<%

'下面是函数

Function lifanghe(a,b)

Dim Sum,I

Sum=0

For I=a To b

Sum=Sum+I^3

Next

lifanghe=Sum

End Function

'下面是主程序,用来调用

Dim S

S=lifanghe(3,6)

"立方和=" & S

%>

6)请编写函数能够随机产生从ab之间的整数,并举例调用。

答案:参见asptemptj/chapter3/Rnd_,注意产生ab之间随机整数的写法为:

Int((b-a+1)*Rnd)+alocalhost/asptemptj/chapter3/

Rnd_即可访问,清单如下:

清单Rnd_ab Rnd_ 产生从ab之间随机数

<%

'下面是函数

Function Rndab(a,b)

Rndab=Int((b-a+1)*Rnd)+a

End Function

'下面是主程序,用来调用

Dim S

S=Rndab(3,10)

"产生310之间的一个随机整数为" & S

%>

17

7)请结合示例3-13开发一个函数,使其能实现Join函数的功能。

asptemptj/chapter3/

localhost/asptemptj/chapter3/即可访问,清单如下:

清单Join 构造Join函数

<% Option Explicit '强制声明变量%>

<%

'下面是将全部数组元素连接在一起的函数

Function join_string(S_temp)

Dim strSum,Item

For Each Item in S_temp '执行循环,取出每个元素

strSum=strSum & Item

Next

join_string=strSum

End Function

'下面是主程序,用来调用

Dim S(3) '定义一个数组

Dim Return_string

S(0)="a"

S(1)="b"

S(2)="c"

S(3)="--end--"

Return_string=join_string(S)

"全部数组元素连接成的字符串为" & Return_string

%>

8)请在示例3-14的基础上增加一段代码,从而可以计算所有数组元素的平方和。

(提示:请用嵌套循环)

asptemptj/chapter3/

localhost/asptemptj/chapter3/ 即可访问,清单如下:

清单Pingfanghe 计算所有数组元素的平方和

<% Option Explicit '强制声明变量%>

18

<%

Dim intA(9,9),intSum '声明一个1010列的二维数组

Dim I,J 'I是外层循环计数器变量,J是内层循环计数器变量

For I=0 To 9 '外层循环

'内层循环 For J=0 To 9

'给每一个元素赋初值10 intA(I,J)=10

Next

Next

For I=0 To 9 '外层循环

'内层循环 For J=0 To 9

'给每一个元素赋初值10 intSum=intSum+intA(I,J)^2

Next

Next

"该数组元素的平方和是"& intSum

%>

9(选做题)有100个人吃100个馒头,大人1人吃4个,孩子4人吃1个,问有多少个大人

和多少个孩子?(提示:使用嵌套循环和条件语句)

asptemptj/chapter3/

localhost/asptemptj/chapter3/ 即可访问,清单如下:

清单Bread 计算吃馒头的人数

</span><span style='font-size:13.5px;color:#000000;letter-spacing:1.198px;font-family:宋体;'>大小和尚吃馒头问题</span><span style='font-size:13.5px;color:#000000;letter-spacing:0.604px;font-family:Times New Roman;'>

<%

Dim I,J,ren,mantou

For I=1 To 100 '大和尚从1100循环

For J=1 To 100 '小和尚从1100循环

ren=I+J '计算总人数

mantou=I*4+J*0.25 '计算总馒头数

If ren=100 And mantou=100 Then

"
大和尚=" & I & " 小和尚=" & J

End If

Next

19

Next

%>

10(选做题)其实VBScript也可以在客户端运行的,请大家参考VBScript专门教

程进行学习,尤其要注意其中的MsgBox函数。

答案:略。

20

4 RequestResponse对象

习题4

1. 选择题(可多选)

1)对于Request对象,如果省略集合,如Request("strName"),将按什么顺序依次

检查是否有信息传入?

A. FormQueryStringCookiesServerVariablesClientCertificate

B. QueryStringFormCookiesServerVariablesClientCertificate

C. CookiesQueryStringFormServerVariablesClientCertificate

D. FormQueryStringCookiesServerVariablesClientCertificate

答案:B

2Request对象的QueryStringFormCookies集合获取的数据子类型分别是?

A. 数字、字符串、字符串 B. 字符串、数字、数字

C. 字符串、字符串、字符串 D. 必须根据具体值而定

答案:D

3)在表单中,下列哪个属性用于设定表单的提交方法?

A. method B. action C. POST D. GET

答案:A

4)若表单提交时采用GET方法,则下面哪种集合可以获取表单元素的值?

A. ("元素名") B. tring("元素名")

C. ("元素名") D. tring("元素名")

答案:B

5)下面哪种集合可以获取查询字符串中的信息?

A. Response("元素名") B. Request("元素名")

C. ("元素名") D. tring("元素名")

答案:BD

6)请问下面语句执行完毕后,页面上显示内容是什么?

<% "新浪" %>

A. 新浪 B. 新浪

C. 新浪(超链接) D. 错误信息

答案:C

7)请问下面程序段执行完毕,页面上显示的内容是什么?

<%

="北京"

="上海"

%>

A. 北京上海 B. 北京(换行)上海

21

C. 北京 D. 错误信息

答案:D

解释:当使用简写方式输出时,每一句两边都要加上<%%>

8)请问下面程序段执行完毕,页面上显示的内容是什么?

<%

"a": : "b":

"c": : "d"

%>

A. ac B. cd C. bd D. ad

答案:A

解释:Flush方法会立即输出内容;Clear方法会清空缓冲区中的内容;End方法

会结束输出。

9Response对象的什么方法可以将缓冲区中的页面内容立即输出到客户端?

A. Write B. End C. Clear D. Flush

答案:D

10)下列哪个集合可以返回客户端IP地址?

A. Request("REMOTE_ADDR") B. Variables("REMOTE_ADDR")

C. Variables("IP") D. Variables("LOCAL_ADDR")

答案:AB

2. 问答题

1)请问是否可以将的扩展名改为.htm?

答案:可以,因为4-1中只是将表单信息提交给,本身并没有动态代码,所以

可以修改。

2)假如变量a="b",那么Request(a)Request("a")返回值一样吗?

答案:不一样。因为用代入法,Request(a)是获得名称为b的变量的值,Request("a")

则是获得名称为a的变量的值。

3)当表单分别以POST方法和GET方法提交时,获取数据的方法有什么区别?

答案:用POST 方法提交表单,获取数据用的是方法;而用GET 方法提

交表单,获取数据用的是tring方法。

4)请问有什么方法可以检验各种集合返回值的数据子类型?

答案:一般集合返回值的数据子类型是取决于集合值本身的类型,因此是没有一个固

定的方法可以判断出某集合返回值的数据子类型,但常用的有三个函数IsNumericIsDate

IsNull可以辅助来判断一下返回值的数据子类型。

5)请结合第1章讲的WWW的工作原理来讲述的运行过程?

答案:当用户在浏览器中输入网址第1次访问本文件时,服务器端就会从头到尾解释

执行本文件。首先输出表单中的元素内容(文字、文本框、按钮),然后执行If判断语句,

访("txtA")=""

("txtB")=""If语句中条件表达式的返回值为False,因此执行Else后面输出

语句;接下来当用户输入两个数并提交表单后,此时就会第2次访问本文件,服务器端就

会再次从头到尾解释执行本文件,先输出表单元素内容,然后再次执行If判断语句,此时

因为已经提交了表单,所以("txtA")=输入的值, ("txtB")=输入的

值,If语句中条件表达式的返回值为True,因此执行运算语句,最后输出两个数的和。

6)请简述ResponseWrite方法的两种写法的区别及注意事项。

答案:两种写法分别为<%=%>,前者多用于在VBScript代码中,用

22

来向客户端输出服务器端的信息;后者则多用于大量HTML代码中嵌入少量VBScript

码的时候。

7)请简述Redirect方法的工作原理?

答案:Redirect是指将网页重新定向到另一个新的网址,该定向发生在客户端,当执

行到该语句时,客户端浏览器就会向相应的服务器端发出一个请求,然后该服务器端就会

返回这个新的页面给客户端。

8)请问Redirect方法和超链接的区别是什么?

答案:两者都可以引导用户至另一个页面,但是超链接必须要用户单击超链接才行,

Redirect可以自动引导用户至另一个页面。

9)请问当使用Redirect方法时,为什么有时要在文件开头加“=True

语句?在Windows 2000以上系统中一般需要加吗?

答案:因为如果=False,就表示将页面直接输出到客户端,那么如果

已经输出了部分页面内容到客户端,又想重定向到另一个页面,这是不允许的。而令Buffer

等于True后,将把页面先输出到缓冲区,在缓冲区中则可以随时重定向页面,

Windows 2000

以上操作系统中则默认为True,所以Windows 2000以上系统中一般不需要加。

10)本章中都有哪些方法可以将一个变量从一个页面传递到另一个页面?

答案:可以利用表单提交和在URL地址后面加上变量进行传递,也可以使用Cookie

传递变量。

3. 实践题

1)请将合并为一个页面。

答案:参见asptemptj/chapter4/,注意其中判断表单是否提交的写法,并打

开浏览器,在其中输入localhost/asptemptj/chapter4/ 即可访问,清单如下:

清单Register 合并为一个页面

请填写个人信息

type="hidden" name="page" value=1>

姓名:

密码:

性别:


爱好:计算机

音乐

旅游

职业:

23

简述:

<%

'下面的条件语句表示只有提交了表单才进行显示信息,请注意这个小技巧。

If ("page")=1 Then

Dim strName,strPwd,strSex,strLove,strCareer,strIntro '为了引用方便,声明变量

strName=("txtName")

strPwd=("txtPwd")

strSex=("rdoSex")

strLove=("chkLove")

strCareer=("sltCareer")

strIntro=("txtIntro")

"

下面是您的个人信息

"

"
姓名:" & strName

"
密码:" & strPwd

"
性别:" & strSex

"
爱好:" & strLove

"
职业:" & strCareer

"
简介:" & strIntro

End if

%>

2)请修改第2章的,将表单提交给自身。并判断:如果今天正好是用户的

生日,就输出祝贺信息。

asptemptj/chapter4/

localhost/asptemptj/chapter4/ 即可访问,清单如下:

清单Rewrite2-6 修改

</span><span style='font-size:13.5px;color:#000000;letter-spacing:1.191px;font-family:宋体;'>用户注册表单示例</span><span style='font-size:13.5px;color:#000000;letter-spacing:0.581px;font-family:Times New Roman;'>

24

用户注册

以下内容请如实填写,其中带有*号的栏目是必须填写的

请选择用户名:

*

请输入你的密码:

*(密码不能超过8)

请再次输入密码:

*

请输入你的姓名:

*

请选择你的性别:

*

请输入你的生日:

*

请选择你的最高学历:

请选择你的爱好:

读书

看电影

旅游

其他

你有什么意见吗?

<%

If ("txtUserId")<>"" Then

25

Dim txtYear,txtMonth,txtDay '为了引用方便,声明变量

txtYear=("txtYear")

'前面的txtYear是一个变量,后面的txtYear是表单中一个元素的名字,不是一

'回事,名字可以一样,也可以不一样,这里主要是为了方便记忆。

txtMonth=("txtMonth")

txtDay=("txtDay")

If Cint(txtYear)=Cint(Year(Date())) and Cint(txtMonth)=Cint(Month(Date()))

"祝您生日快乐!"

End if

End If

%>

and Cint(txtDay)=Cint(Day(Date())) then

3)请开发一个页面,显示来访者的IP地址。并判断:如果IP地址以202.112开头,

则显示欢迎信息;否则显示为非法用户,并终止执行程序。

asptemptj/chapter4/Verify_

localhost/asptemptj/chapter4/ Verify_即可访问,清单如下:

清单Verify_ip Verify_显示来访者的IP地址

<%

Dim IP

IP=Variables("REMOTE_ADDR")

If Mid(IP,1,7)="202.112" Then

"欢迎您"

Else

"您是非法用户"

End If

%>

26

4)请开发一个页面,让用户通过下拉列表框选择自己想要访问新浪、搜狐还是网

易网站,用户提交选择结果后自动打开该网站。

asptemptj/chapter4/

localhost/asptemptj/chapter4/ 即可访问,清单如下:

清单Navigation 网站导航

</span><span style='font-size:13.5px;color:#000000;letter-spacing:1.26px;font-family:宋体;'>导航</span><span style='font-size:13.5px;color:#000000;letter-spacing:0.609px;font-family:Times New Roman;'>

快速导航

请选择您要访问的网站:

<%

If ("sltsite")<>"" Then

ct ("sltsite")

End If

%>

5请开发一个页面,其中可以输入姓名和年龄,并选择有效期为1周、1月或1年。

提交表单后将姓名和年龄保存到Cookie中,并按选择设置有效期。

答案:参见asptemptj/chapter4/Cookie_,清单如下:

清单Cookie_valid Cookie_ Cookie有效期设置

请输入姓名

请输入年龄

27

请选择Cookie有效期

<%

'如果提交表单后执行如下语句

If ("user_name")<>"" And ("old")<>"" Then

s("user")("user_name")=("user_name")

s("user")("old")=("old")

s("user").Expires=DateAdd("d",("sltDate"),Date())

End If

%>

6)请开发一个简单的在线考试程序,包括5道单选题和5道多选题,单击【交卷】

按钮后就可以根据标准答案在线评分。

asptemptj/chapter4/

localhost/asptemptj/chapter4/ 即可访问,清单如下:

清单Exam 在线考试

一、单选题

1.请问在ASP中如果要向客户端输出内容,因该使用什么对象?


Request


Response


Session


Application


2.请问下面哪个函数可以求余数?


Rnd


Int

28


Mod


Mid


3.请问隐藏文本的类型为?


Hidden


Text


Password


Textarea


4.请问下面哪个函数可以将数值转换为字符串?


Cdate


Cint


Cstr


Cdbl


5.请问"1"+"1"=


"11"


11


1


2


二、多选题

1.请问搜索引擎主要有哪些?


美术网


教育网


新浪


Google


2.请问以下URL中,从形式上看正确的是?


标题


注释


文档主体


4.在超链接标记中,下面哪个属性用来指定超链接路径?


src


href


method


action


5.关于网页中的图像,下列说法正确的是?


图像标记必须成对出现


href
属性用于指定所要显示图


src
属性用于指定所要显示图


alt
用于指定显示在图像上的文

<%

If Request("page")=1 Then '如果提交了表单,就执行下面的判断语句

Dim Grade '分数 (单选答案:BCACD;多选答案:CDABCDADBACD

Grade=0

If ("q1")="B" Then

Grade=10

End If

If ("q2")="C" Then

Grade=Grade+10

End If

If ("q3")="A" Then

Grade=Grade+10

End If

If ("q4")="C" Then

Grade=Grade+10

End If

If ("q5")="D" Then

Grade=Grade+10

30

像文件的路径

像文件的路径

End If

'注意获取的值中间用逗号和空格隔开

If ("m1")="C, D" Then

Grade=Grade+10

End If

If ("m2")="A, B, C, D" Then

Grade=Grade+10

End If

If ("m3")="A, D" Then

Grade=Grade+10

End If

If ("m4")="B" Then

Grade=Grade+10

End If

If ("m5")="A, C, D" Then

Grade=Grade+10

End If

"您的分数为" & Grade

End If

%>

7(选做题)请开发一个程序,当用户第一次访问时,需在线注册姓名和性别,然

后把信息保存到Cookie中。当该用户再次访问时,则显示“某某先生/小姐,您好,您是

的欢迎信息。(提示:可以用多个页面实现)

asptemptj/chapter4/

localhost/asptemptj/chapter4/ 即可访问,清单如下:

清单Cookie 利用Cookie显示欢迎信息

<%

If s("user")="" Then

'如果是第1次访问,就让客户填写有关信息

"您好,您是第 1次访问本站,请填写个人信息"

%>

31

请输入姓名

请选择性别

<%

Elseif s("user")("vNumber")>=1 Then

'如果不是第1次访问,就令访问次数在原有次数上加1

Dim vNumber '定义一个访问次数变量

Dim user_name

Dim sex

vNumber=s("user")("vNumber")

user_name=s("user")("user_name")

sex=s("user")("sex")

If sex="" Then

sex_list="先生"

Else

sex_list="小姐"

End If

s("user")("vNumber")=vNumber+1 '将访问次数+1保存到

s("user")("user_name")=user_name

s("user")("sex")=sex

s("user").Expires=#2010-11-1# '设置有效期为2

s("user")("user_name") & sex_list & "您好,您是第"

End If

'如果提交表单后执行如下语句

Cookies

& (vNumber+1) & "次光临本站"

If ("user_name")<>"" And ("sex")<>"" Then

s("user")("user_name")=("user_name")

s("user")("sex")=("sex")

s("user")("vNumber")=1

s("user").Expires=#2010-11-1#

End If

%>

32

33

5 SessionApplication对象

习题5

1. 选择题(可多选)

1)请问下面程序段执行完毕,变量c的值是?

<% Session("a")=1: Session("b")=2: c=Session("a")+Session("b") %>

A. 12 B. 3 C. ab D. 以上都不对

答案:B

2)请问下面语句执行完毕后,变量c的值是?

<% Dim a,c: a="b": Session("a")= 1: Session(a)= 2 : c=Session("b") %>

A. 1 B. 2 C. 3 D.以上都不对

答案:B

3)请问下面程序段执行完毕后,变量c的值是?

<% Dim a: a="b": Session(a)=1: Session("b")=2: c=Session(b) %>

A. 1 B. 2 C. 3 D. 空(Empty

答案:D

解释:变量b没有给定义,此时Session(b)实际上为空。

4)请问下面程序段执行完毕,变量b的值是?

<% Session("a")=1: n: Dim b: b=Session("a") %>

A. 0 B. 1 C. 空(Empty D. 程序出错

答案:B

解释:执行n语句后,Session对象并没有立刻被清除,当前页面

中仍然可以使用Session中的信息,不过在其他页面中就不可以使用了。

5Session对象的默认有效期为多少分钟?

A. 10 B. 15 C. 20 D. 30

答案:C

6)在同一个应用程序的页面1中执行t=30,那么在页面2中执行

t,则输出值为多少?

A. 15 B. 20 C. 25 D. 30

答案:D

7Application对象的默认有效期为多少分钟?

A. 10 B. 15 C. 20 D. 从应用程序启动到结束

答案:D

8)在应用程序的各个页面中传递值,可以使用哪几个内置对象?

A. Request B. Response C. Session D. Application

答案:CD

9Session变量和Application变量的返回值的数据子类型是?

34

A. 字符串、字符串 B. 数值、字符串

C. 字符串、数值 D. 根据其中的数据的类型决定

答案:D

10)下面哪条语句可以创建一个对于访问网站的所有用户均有效的变量intAll?

A. Session("intAll")=10 B. Application("intAll")=10

C. Public Session("intAll") D. Public Application("intAll")

答案:B

11)在一个应用程序中,文件可以有几个?

A. 0 B. 1 C. 2 D. 无限多个

答案:B

12)在一个用户会话过程中,会触发几次Session_OnStart事件?

A. 1 B. 2 C. 3 D.无数次

答案:A

13)下列哪种情况下可能会触发Session_OnEnd事件?

A. 用户关闭了浏览器 B. 用户打开网页后离开电脑超过了20分钟

C. 修改了文件 D. 在程序中执行了Abandon方法

答案:ABCD

解释:四种情况都可能触发Session_OnEnd事件,只是A不会立即触发,而是

等待TimeOut规定的时间后才会触发。

14)下面哪种情况下表示会话结束,并会清除当前Session对象?

A. 用户打开页面后就离开了电脑长达30分钟。

B. 用户打开页面后链接到了另外一个网站,之后也没有再返回本网站。

C. 用户打开页面后一直浏览该页面达30分钟,期间没有刷新页面。

D. 用户关闭了浏览器窗口。

答案:ABCD

15)下面陈述正确的是?

A. 用户关闭浏览器窗口后就会立刻触发Session_OnEnd事件。

B. 在程序中执行n语句后,就会触发Session_OnEnd事件。

C. 弹出的新窗口和父窗口将使用不同的Session对象。

D. 用户不停地刷新页面,则Session对象永远不会过期。

答案:BD

2. 问答题

1)名词解释:会话、状态

答案:会话——是指用户访问网站的过程;状态,就是指会话过程中的一些变量、设

置等信息。

2)请简述Session对象的工作原理?

答案:当每一个用户开始访问网页时,服务器端就会给该用户建立一个Session对象,

并且在服务器端内存中给他分配一块区域,用来存储该用户的信息。当该用户结束访问时,

服务器端就会清除这个Session对象,并释放相应的内存区域。

3)如果客户端浏览器不支持Cookie,那么能支持Session吗?

答案:不能,因为每建立一个Session对象,服务器端就会生成一个长整数形式的ID

并把这个ID自动保存到客户端的Cookie中。当客户端再次向服务器端发送信息时,服务

器端就会根据这个ID返回相应的Session信息。因此如果不支持Cookie,则无法找到这个

35

ID,也就不会返回相应的Session信息

4)请简述Session对象建立和清除的时间?

答案:当用户打开一个浏览器窗口开始访问网站时,就会开始一个会话,并建立一个

Session对象;Session对象的清除是由它的有效期决定的,默认为20分钟。如果客户端在

20分钟内没有向服务器端发出任何请求信息,就表示这个会话结束了,Session对象就会

被清除。

5)请简述Session对象和Application对象各自的作用和最主要的区别。

答案:Session对象是记录单个用户的信息,而Application是记载所有用户的共享信

息;Session的有效期默认为20分钟,Application从服务启动到服务结束均有效。

6)在一个页面中,Session变量、Application变量、普通变量和数组变量的名称都

可以一样吗?

答案:Session变量、Application变量、普通变量的名称可以一样,但普通变量和数

组变量名称不能一样。

7)请比较CookieSessionApplication对象的有效期?

答案CookieSession是有有效限制,可以根据实情况行设定。而

Application对象没有有效期的限制,从应用程序启动后第一个用户开始访问到所有用户都

结束访问,它一直是有效的。

8)请问什么信息适合用Session保存,什么信息适合用Application保存?

答案:保存单个用户的信息时,用Session,保存共享信息时,用Application

9)请问文件的名称、位置、语法有什么规定?

答案:每一个应用程序只能有零个或一个文件,而且它的名字和位置都是

固定的,它必须被放在应用程序的根目录下。

10)请问在文件中可以使用语句吗?

答案:文件中不能包含语句。因为该文件只是被调用,根

本不会显示在页面上,所以不能输出任何内容。

11)就5.3.2节示例来说,如果没有添加虚拟目录,应该放在什么位置?

答案:应该放到C:inetpubwwwroot下。

12)请问怎样才能让一个Session对象永远不过期?(提示:可以使用自动刷新)

答案:将页面设置为自动刷新,比如可以用下面代码实现:区域中加入

http-equiv="refresh" content="10">,其中content="10"指每隔10秒刷新一次页面. 这个时

间间隔必须小于t(一般默认为20分钟),这样Session对象就永远不会过期

了。

3. 实践题

1)请在个人主页上加上当前在线人数和总访问人数。

答案:参见书中5.3.2节清单5-95-10.

2)请编写两个页面,在第一个页面中用户要输入姓名,然后保存到Session中,然

后自动引导到第二个页面。在第二个页面中读取该Session信息,并显示欢迎信息。如果

用户没有在第一页登录就直接访问第二页,要将用户重定向回第一页。

答案:参见asptemptj/chapter5/,并打开浏览器,在其中输入

localhost/asptemptj/chapter5/ p即可访问,清单如下:

清单5-3-2a 利用Session保存信息

36

请填写个人信息

action="" method="post" name="form1">

姓名:

<%

If ("user_name")<>"" Then

Session("user_name")=("user_name")

End If

%>

清单5-3-2b 利用Session显示欢迎信息

<%

If Session("user_name")="" Then

ct ""

%>

<%

Session("user_name") & "您好,欢迎光临"

%>

End If

3)请在示例的基础上添加一些代码,使得每位用户访问期间不管怎么刷新

页面都只计数1次。(提示:结合Session对象,但不要使用文件)

asptemptj/chapter5/

localhost/asptemptj/chapter5/即可访问,清单如下:

清单5-3-3 显示访问次数

我的主页

37

<%

If session("a")<>1 Then '给每个用户设定一个session"a")变量

'先锁定

Application("intAll")=Application("intAll")+1 'Application变量赋值

'解除锁定

session("a")=1

End If

Dim intVisit

intVisit=Application("intAll") '获取Application变量

"

您是第" & intVisit & "位访客。"

%>

4)请编写程序实现一个简单的聊天室,要能显示发言人姓名,发言内容、发言人

IP地址和发言时间。另外,要求过滤掉用户输入的“


”等特殊字符。

asptemptj/chapter5/chat

localhost/asptemptj/chapter5/chat/即可访问

5(选做题)请参考5.1.4节的方法输出ServerViarables集合中所有的环境变量。

asptemptj/chapter5/,

localhost/asptemptj/chapter5/即可访问。

清单5-3-4 输出ServerViarables集合中所有的环境变量

<%

Dim Item

For Each Item In Variables

"名字:" & Item & ",值:" & Variables(Item) & "

"

%>

Next

6(选做题)在5.1.4节中采用For Each…Next循环输出全部Session变量时,如果

Session变量是数组就会出错,请大家修改使之能正确运行。(提示:先判断是否数组)

asptemptj/chapter5/

localhost/asptemptj/chapter5/ 即可访问,清单如下:

清单5-3-5 5-3-5 输出全部Session变量

<%

session("a")="aaa"

session("b")="bbb"

dim array_a(2) '定义一个数组

38

array_a(0)="array1"

array_a(1)="array2"

array_a(2)="array3"

session("c")=array_a '将该数组存放到session变量中。

Dim Item

For Each Item In ts

If Not isArray(ts(Item)) Then

"名字:" & Item & ",值:" & ts(Item) & "

"

Else

dim Array_temp '定义一个数组变量

Array_temp=ts(Item)

For i=0 to Ubound(Array_temp)

"名字:" & Item & ",值:" & Array_temp(i) & "

"

Next

End if

%>

Next

39

6 Server对象

习题6

1. 选择题(可多选)

1)如果设置ScriptTimeOut60秒,请问脚本最长执行时间为多少秒?

A. 30 B. 60 C. 90 D. 300

答案:B

2)如果在页面1中添加TimeOut=300,并在同一网站的页面2中添加

a=TimeOut,请问变量a的值等于多少?

A. 60 B. 90 C. 300 D. 以上都不对

答案:B

解释:ScriptTimeOut属性只对当前页面有效,且它的默认值是90秒。

3)在给对象变量赋值时,一般要使用下面哪个关键字?

A. Dim B. Set C. Public D. Private

答案:B

4)执行语句a=code("

")后,变量a的值是?

A. p B.

C. "

" D. "<p>"

答案:D

解释:执行HTMLEncode后,<>会被替换,所以结果为"<p>"

5执行语句a=code(code("

"))后,变量a的值是?

A. "<

>" B. ""

<p>

C. "<<p>>" D. "&lt;p&gt; "

答案:D

解释:因为要执行两次HTMLEncode操作。

6)执行语句a=ode("b c")后,变量a的值是?(请注意其中空格)

A. b c B. b+c C. "b+c" D. "b c"

答案:C

解释:此时变量a的值实际上是"b+c",仍然是一个字符串。

7)如果要返回应用程序根目录的物理路径,那么MapPath方法的参数可以是?

A. "/" B. "" C. "." D. "C:Inetpubwwwroot"

答案:AB

解释:一般不区分”/”

8)在中,以下哪些方法可以返回的物理路径?

A. h("") B. h("/asptemp/chapter6/")

C. h(".") D. h("")

答案:ABD

9)如果将中的Execute方法替换为Transfer,那么中的ScriptTimeOut

属性值是?

40

A. 90 B. 100 C. 300 D. 以上都不对

答案:B

解释:TransferExecute都可以把一些环境变量传递过去。

10)如果将中的e方法替换为ct,那么

ScriptTimeOut属性值是?

A. 90 B. 100 C. 300 D. 以上都不对

答案:A

解释:Redirect不能把一些环境变量传递过去,因此输出的是默认值90.

2. 问答题

1)请问什么时候可能会用到HTMLEncode方法?

答案:在需要输出HTML语句和<>和空格等HTML特殊字符时会用到该方法。

2)请简述ExecuteTransferRedirect方法的主要区别?

答案:三者都是停止执行当前网页,转到新的网页执行。主要区别有:

一是,Redirect Transfer跳转到新网页后,不会再返回原网页,而Execute则会在

执行完新网页后,返回原网页继续执行Execute方法后面的语句。

二是,Redirect的重定向实际发生在客户端,而ExecuteTransfer方法的重定向发生

在服务器端,效率更高。

三是,Redirect语句不能把一些环境变量一起传递到新网页中,而ExecuteTransfer

可以。

四是,Redirect方法可以转向一个网页或其他网站,而ExecuteTransfer方法一般只

能转到同一个应用程序的其他文件。

3)对于6.2.6节的例子来说,假如向提交了表单,那么在中可以用

获取表单信息吗?

答案:不能用获取到表单上的信息,因为表单是提交到的,而

中已经用Redirect跳转到了另一个页面,跳转后和6-4已经没有关系了,

因此无法获得。

4)接着上题,在中声明的普通变量,在中可以引用吗?

答案:不能,原因同上。

3. 实践题

1)请修改5.2.2节的聊天室例子,使其能够原样输出用户输入的HTML代码。

答案:使用Rewrite_chat

HtmlEncode方法原样输出HTML代码,参见asptemptj/chapter6/

并打开浏览器,在其中输入localhost/asptemptj/chapter6/ Rewrite_chat /即可访

问。

2)请结合第4章习题中开发的考试程序,增加考试HTML知识的题目。比如:

请问换行标记是什么?

A.

B.
C.


D.

asptemptj/chapter6 /Rewrite_,

localhost/asptemptj/chapter6/ Rewrite_即可访问,清单如下:

清单Rewrite_exam Rewrite_ 在线考试

41

一、单选题

1.请问在ASP中如果要向客户端输出内容,因该使用什么对象?


Request


Response


Session


Application


2.请问下面哪个函数可以求余数?


Rnd


Int


Mod


Mid


3.请问隐藏文本的类型为?


Hidden


Text


Password


Textarea


4.请问下面哪个函数可以将数值转换为字符串?


Cdate


Google


2.请问以下URL中,从形式上看正确的是?




ftp://


ftp:///news/


3.请问换行标记是什么?






4.在超链接标记中,下面哪个属性用来指定超链接路径?


src


href


method


action


5.关于网页中的图像,下列说法正确的是?


图像标记必须成对出现


href
属性用于指定所要显示图


src
属性用于指定所要显示图


alt
用于指定显示在图像上的文

<%

If Request("page")=1 Then '如果提交了表单,就执行下面的判断语句

43

/history/1998/

/news/

<%=code("

")%>

<%=code("


")%>

<%=code("")%>

Dim Grade '分数 (单选答案:BCACD;多选答案:CDABCDADBACD

Grade=0

If ("q1")="B" Then

Grade=10

End If

If ("q2")="C" Then

Grade=Grade+10

End If

If ("q3")="A" Then

Grade=Grade+10

End If

If ("q4")="C" Then

Grade=Grade+10

End If

If ("q5")="D" Then

Grade=Grade+10

End If

'注意获取的值中间用逗号和空格隔开

If ("m1")="C, D" Then

Grade=Grade+10

End If

If ("m2")="A, B, C, D" Then

Grade=Grade+10

End If

If ("m3")="A, D" Then

Grade=Grade+10

End If

If ("m4")="B" Then

Grade=Grade+10

End If

If ("m5")="A, C, D" Then

Grade=Grade+10

End If

"您的分数为" & Grade

End If

%>

44

3)假如为文件夹C:asptempasptempchapter6添加虚拟目录temp6,请根据该虚拟

目录改写

asptemptj/chapter6 /Rewrite_

localhost/temp6/ Rewrite_即可访问,清单如下:

清单Rewrite_6-3 Rewrite_ 改写6-3

<%

'下面转换两个特殊的路径

h("/") & "
"
'转换应用程序根目录

h(".") & "
"
'转换当前目录

'下面将绝对路径转换为物理路径

h("/temp6/") & "
"

h("/temp6/") & "
"

h("/temp6/temp6/") & "
"

h("/asptemp/chapter5/") & "
"

'下面将相对路径转换为物理路径

h("") & "
"
'转换自身

h("") & "
"
'转换同文件夹下的文件

'转换子文件夹下的文件 h("temp6/") & "
"

h("../chapter5/") '转换其他文件夹下的文件

%>

4(选做题)请自己开发一个函数,可以基本实现HTMLEncode方法的功能。(提

示:使用Replace函数替换“&><”为对应的字符实体)

答案:参见asptemptj/chapter6 /, 清单如下:

清单HtmlEncode 实现HTMLEncode方法的函数

<%

function HTMLEncode(fstring)

fstring=replace(fstring,">",">")

fstring=replace(fstring,"<","<")

fstring=replace(fstring,CHR(32)," ")

fstring=replace(fstring,CHR(13),"")

fstring=replace(fstring,CHR(10)&CHR(10),"

")

fstring=replace(fstring,CHR(10),"
")

45

HTMLEncode=fstring

end function

%>

46

7 数据库基础知识

习题7

1. 选择题(可多选)

1)下面哪条语句可以查询strName"萌萌"且是200888日前注册的用户?

A. Select * From tbAddress Where strName=萌萌And dtmSubmit<#2008-8-8#

B. Select * From tbAddress Where strName="萌萌" And dtmSubmit<2008-8-8

C. Select * From tbAddress Where strName="萌萌" And dtmSubmit<#2008-8-8#

D. Select * From tbAddress Where strName="萌萌" Or dtmSubmit<#2008-8-8#

答案:C

2)下面哪条语句可以查询姓“赵”并且年龄等于22岁的用户,请问用哪条语句?

A. Select * From tbAddress Where strName="" And intAge=22

B. Select * From tbAddress Where strName like "%" And intAge="22"

C. Select * From tbAddress Where strName like "%" And intAge=22

D. Select * From tbAddress Where strName like "%%" And intAge=22

答案:C

3)要在tbAddress表中插入记录,下面哪条语句是正确的?

A. Insert Into tbAddress(strName,strTel) Values("萌萌","6545632")

B. Insert Into tbAddress(strName,strEmail) Values("萌萌", "")

C. Insert Into tbAddress(strName,strEmail) Values("萌萌",NULL)

D. Insert Into tbAddress(strName,intAge) Values(萌萌,22)

答案:ABC

4)要在tbAddress表中更新记录,下面哪条语句是正确的?

A. Update tbAddress Set strName="萌萌",intAge=22 Where ID=2

B. Update tbAddress Set strName=萌萌,intAge=22 Where strName=萌萌

C. Update tbAddress Set dtmSubmit=2008-10-1 Where strName="萌萌"

D. Update tbAddress Set intAge=18

答案:AD

解释:选项D没加条件语句,将会对表中所有记录的intAge都做更新。

5)下面哪个聚合函数可以用来返回数据表中记录总数?

B. Avg C. Sum D. Max

答案:A

6执行Select Max(intAge) As MaxAge,Min(intAge) As MinAge From tbAddress语句

后,会返回多少条记录?

A. 0 B. 1 C. 2 D. 不能确定

答案:B

7)执行Select Count(*) As Total From tbAddress Group By intAge语句后,会返回多

47

少条记录?

A. 0 B. 1 C. 2 D. intAge的值有关

答案:D

8)执行Delete From tbAddress语句后,共删除多少条记录?

A. 0 B. 1 C. 若干条 D. 全部

答案:D

9执行Delete From tbAddress Where strName=“萌萌”语句后,共删除多少条记录?

A. 0 B. 1 C. 若干条 D. 全部

答案:C

解释:因为如果有姓名相同的,就都会删除。

10)目前常用的数据库管理系统属于?

A. 关系型 B. 层次型 C. 网状型 D. 结构型

答案:A

2. 问答题

1)请论述为什么要采用数据库来管理数据?

答案:因为数据库

其实就是把各种各样的数据按照一定的规则组合在一起形成的“数据”

“集合”,而根据这种规则就可以很快捷的找出我们所需要的数据。

2)请思考数据表中自动编号字段和主键字段的作用?

答案:自动编号可以自动递增或随机产生一个整数,常用来自动产生唯一编号。

主键可以唯一标识某一行记录,所以可以确保执行数据更新、删除的时候不会出

现张冠李戴的错误。此外,主键常常与外键构成参照完整性约束,防止出现数据不一致。

3)在strName适合作为主键字段吗?

答案:不适合,因为姓名也可能会重复,主键字段要求不能重复。

4)如果想更新记录,可以不可以先删除再添加记录?这样有什么缺点?

答案:可以采用先删除后添加的方式来代替更新记录,但是这样做的缺点是会使自动

编号字段有所改变,不能恢复成原来的自动编号。

5)设置数据源后,如果移动了Access数据库的位置,还能正常使用吗?

答案:不能,必须重新设置数据源,否则就找不到该数据库了。

3. 实践题

1)请按照本章步骤自己建立通讯录数据库,并为其设置数据源addr

答案:参见,数据源设置请参考书中7.4节进行设置。

2)请在数据库中建立查询qryTest,并将7.3节中讲的SQL语句逐条

输入到该查询窗口中测试。

答案:请参考中查询qryTest

3)在组合查询中提到一个用户信息数据库,在第9章中还会用到。请

按以下步骤建立该数据库,保存为C:

第一步:建立一张表tbUsers,表的结构如题7-1图所示。

48

7-1

tbUsers的结构

第二步:建立第二张表tbLog,表的结构如题7-2图所示。

7-2 tbLog的结构

第三步:建立完毕后,请在该表中输入若干条记录。

第四步:请在该表中建立一个查询qryTest,在其中执行7.3.1节中的组合查询语句。

第四步:请为该数据库设置数据源userinfo

答案:参见asptemptjchapter7

49

8 ASP存取数据库

习题8

1. 选择题(可多选)

1)就8.2节示例而言,下面哪个数据库连接字符串是正确的?

A. "Dsn=address"

B. "Driver={Microsoft Access Driver (*.mdb)};Dbq=" & h("")

C. "Driver={Microsoft Access Driver (*.mdb)};Dbq=" & h("asptemp

")

D. "Provider=.4.0;Data Source=" & h("asptemp

")

答案:ABCD

2)在中,如果要查询thedate(时间变量)以后添加的记录,SQL字符串应

为:

A. "Select * From tbAddress Where dtmSubmit>#thedate# "

B. "Select * From tbAddress Where dtmSubmit>#" & thedate & "# "

C. "Select * From tbAddress Where dtmSubmit>" & #thedate# & "

D. "Select * From tbAddress Where dtmSubmit>" & thedate

答案:B

3)在中,如果要查询年龄大于theAge(数值变量)的人员,SQL字符串应

该为:

A. "Select * From tbAddress Where intAge>theAge"

B. "Select * From tbAddress Where intAge>'" & theAge & "'"

C. "Select * From tbAddress Where intAge>" & 'theAge' & "

D. "Select * From tbAddress Where intAge>" & theAge

答案:D

4)就本章示例而言,下面哪条SQL语句可以正确执行?

(其中 theName="卢红" theAge=22 theDate=#2008-8-8#

A. "Select * From tbAddress Where strName=" & theName

B. "Select strName,intAge From tbAddress where strName='" & theName & "'"

C. "Select * From tbAddress Where intAge

D. "Select * From tbAddress Where dtmSubmit>#theDate#"

答案:B

5)就本章示例而言,下面哪条SQL语句可以正确添加记录?

(其中 theName="卢红" theAge=22 theIntro=""

A. "Insert Into tbAddress(strName,intAge,strIntro) Values('theName',theAge,'theIntro')"

B. "Insert Into tbAddress(strName,intAge,strIntro) Values('" & theName & "'," &

theAge & ",'" & theIntro & "')"

C. "Insert Into tbAddress(strName,intAge,strIntro) Values(" & theName & "," &

50

theAge & "," & theIntro & ")"

D. "Insert Into tbAddress(strName,intAge,strIntro) Values('" & theName & "', '" &

theAge & "','" & theIntro & "')"

答案:BD

6)就本章示例而言,下面哪条SQL语句可以正确更新记录?

(其中 theName="卢红" theAge=22 theIntro="" theID=5

A. "Update tbAddress Set strName='theName', intAge=theAge,strIntro='theIntro' Where

ID=theID"

B. "Update tbAddress Set strName='" & theName & "', intAge=" & theAge &

",strIntro='" & theIntro & "' Where ID=" & theID

C. "Update tbAddress Set strName='" & theName & "', intAge='" & theAge &

"',strIntro='" & theIntro & "' Where ID=" & theID

D. "Update tbAddress Set strName=" & theName & ", intAge=" & theAge &

",strIntro=" & theIntro & " Where ID=" & theID

答案:BC

7)就本章示例而言,下面哪条SQL语句可以正确执行?(其中' '表示空字符串)

A. "Update tbAddress Set strName='卢红', intAge=0,strIntro=' ' Where ID=5"

B. "Update tbAddress Set strName='卢红', intAge=0,strIntro=NULL Where ID=5"

C. "Insert Into tbAddress(intAge,strIntro) Values(0,NULL)"

D. "Insert Into tbAddress(intAge,strIntro) Values(0, ' ')"

答案:ABCD

2. 问答题

1)某程序可以显示记录,但不能更新记录,请问可能是什么原因?

访

Windows 2000Windows XP系统,如果安装时采用了NTFS文件系统,还要设置Internet

来宾帐户”可以完全控制该数据库文件。

2)请您针对本章例子列出各种可能的数据库连接字符串?

答案:第一种:基于ODBC数据源方式:Dsn=address

ODBC Driver={Microsoft Access Driver

(*.mdb)};Dbq=C:

第三种:基于OLE DB的连接方式: Provider=.4.0;Data

Source=C:

其中第二种和第三种中数据源的写法都可以利用Mappath方法加相对路径来写。

3)请问一次操作分别可以查询、添加、删除、修改多少条记录?

答案:全部都可以一次添加若干条记录。

4)请问在更新记录时还有哪些方法可以将ID字段值传递过去?

答案:还可以利用隐藏文本将ID字段值传递过去。

5)请问在8.3.4节的中为什么不可以用tring获取首页传

过来的ID

答案:因为首页传ID是用的表单提交方式,而非在URL后面加参数传递的方式,因

此要用来获取值。

6)请问在8.3.1节的中为什么要将ID字段值传递到删除和更新页面中,

传递别的字段值是否可以,比如姓名?

答案:只能传递ID字段,因为只有ID字段才是对应表的主键,也就是说,只有通过

51

ID才能找出唯一对应的记录,然后进行删除或更新。如果用其他字段,找到的记录有可能

会不唯一,这样更新就会产生张冠李戴的错误。

3. 实践题

1)请结合自己的操作系统设置数据库文件的权限。

答案:.首先要去掉数据库文件的只读属性。

其次,对于Windows XPWindows 2000等系统,如果安装时采用了NTFS文件系统,

还要设置“Internet来宾帐户”可以完全控制该数据库文件。操作步骤略。

2)请利用数据库在首页开发一个计数器(提示:每次访问该页面就读取数据库中的访

问次数,然后再更新记录即可)

asptemptj/chapter8/count

localhost/

asptemptj/chapter8/count/

即可访问,清单如下:

清单count 计数器

</span><span style='font-size:13.5px;color:#000000;letter-spacing:1.198px;font-family:宋体;'>计数器示例</span><span style='font-size:13.5px;color:#000000;letter-spacing:0.604px;font-family:Times New Roman;'>

我的主页

width="20%">

<%

Dim db

Set db=Object("tion")

"Dbq=" & h("") & ";Driver={Microsoft

'读取计数器

dim sql,visitnumber,rs

sql="SELECT log_Number FROM page_counter"

SET rs=E(sql)

If Not And Not Then

visitnumber=rs("log_number")

52

Access Driver (*.mdb)}"

visitnumber=visitnumber+1

sql="update page_counter set log_number=" & visitnumber

E(sql)

Else

visitnumber=1

sql="insert into page_counter(log_number) values(1)"

E(sql)

End If

"

您是第" & visitnumber & "位访问者"

%>

下面是我的主页的正式内容„„

3请参照示例开发一个简单的留言板程序,可以查看、添加、删除和更新留言。(提

示:在显示留言时不必按照本章中表格的样式,可以按照一般的留言板样式。

答案:参见asptemptj/chapter8/guest,并打开浏览器,在其中输入localhost/

asptemptj/chapter8/guest/即可访问。

4)请参考8.3.2节最后的说明练习调试SQL字符串错误的方法。

答案:操作步骤略。

5(选做题)请将8.3.4节更新记录的两个文件合并成一个文件。

localhost/

asptemptj/chapter8/address

asptemptj/chapter8/ address /index,更新文件

.asp即可访问清单如下:

清单update_form update_ 更新记录

<%

'以下连接数据库,建立一个Connection对象实例conn

Dim conn,strConn

Set conn=Object("tion")

strConn="Provider=.4.0;Data Source=" & h("")

strConn

Dim strSql

'利用隐藏文本page,来判断表单是否提交了

If ("page")=1 Then

'只要有姓名和电话,就更新记录,否则给出错误信息

If ("txtName")<>"" And ("txtTel")<>"" Then

'以下获取提交的表单数据

53

Dim ID,strName,strSex,intAge,strTel,strEmail,strIntro '声明几个变量

ID=("txtID") '获取隐藏文本框传递过来的ID

strName=("txtName") '获取姓名

strSex=("rdoSex") '获取性别

If ("txtAge")<>"" Then '获取年龄

intAge=("txtAge")

Else

intAge=0

End If

'获取电话 strTel=("txtTel")

'获取E-mail strEmail=("txtEmail")

'获取个人简介 strIntro=("txtIntro")

'下面利用Execute方法更新记录,注意更新条件为隐藏文本框传过来的ID

strSql="Update tbAddress Set strName='" & strName & "',strSex='" & strSex &

"',intAge=" & intAge & ",strTel='" & strTel & "',strEmail='" & strEmail &

"',strIntro='" & strIntro & "' Where ID=" & ID

e(strSql)

'更新完毕,重定向回首页

ct ""

Else

"姓名和电话必须填写"

"重新填写"

End If

%>

更新成员信息

<%

'以下建立一个记录集对象实例rs,注意会用到传过来的ID

Dim rs

strSql="Select * From tbAddress Where ID=" & tring("ID")

Set rs=e(strSql)

'下面将记录的数据显示在表单中

%>

54

End if

会和SQL语句中的单引号冲突,程序就会报错。请自己尝试解决该问题。(提示:可以用

Replace函数将用户填写的信息中的单引号替换为连续两个单引号。

答案:可以写一个处理单引号的函数,然后对所有获取的文本框值,都先调用该函数

做一下处理即可,函数请参见清单如下:

asptemptj/chapter8/

清单function 处理单引号的函数

<%

'该函数用来对字符串中的危险字符进行处理。

Function myDangerEncode(myString)

If IsNull(myString) Then

myDangerEncode="" '如果myString为空,则赋值空字符串

Else

myString=Trim(myString) '去掉前后的空格

'将单引号替换为连续两个单引号 myString=Replace(myString,"'","''")

myDangerEncode=myString '返回函数值

End If

%>

End Function

56

9 深入进行数据库编程

习题9

1. 选择题(可多选)

1)如果希望打开的数据库是只读的,需要设置Connection对象的哪个属性?

A. Provider B. Mode C. ReadOnly D. ConnectionString

答案:B

2)通常使用什么属性可以返回集合中的对象数目?

A. Count B. Number C. Item D. Total

答案:A

3)如果希望使用RecordCount属性返回记录总数,则CursorType属性值需要为:

A.向前指针 B.键盘指针 C.动态指针 D.静态指针

答案:BD

4)如果一个记录集为空,那么BofEof属性的值分别是:

A. TrueFalse B. FalseTrue C. TrueTrue D. FalseFalse

答案:C

解释:此时均为True

5)执行Recordset对象的Requery方法后,记录指针一般会指向第几条记录?

A. Bof B. 1 C. 最后一条 D. Eof

答案:B

6)对于图9-9,如果指针指向第1条记录,则的值分别为:

A. TrueFalse B. FalseTrue C. TrueTrue D. FalseFalse

答案:D

7)对于图9-9,如果指针指向第17条记录,然后又执行了一次MoveNext方法,

的值分别为:

A. TrueFalse B. FalseTrue C. TrueTrue D. FalseFalse

答案:B

8)对于图9-9,如果当前指针已经指向第10条记录,如果继续执行MoveNext

法,则指针会指向第几条记录?

A. 10 B. 11 C. 15 D. 会发生错误

答案:B

9)对于图9-9,如果指针指向第10条记录,然后又执行了一条 2语句,

则指针会指向第几条记录?

57

A. 8 B. 10 C. 12 D. 会发生错误

答案:C

10)下面哪条语句打开的记录集可以前后移动指针,并且可读可写?

A. strSql,conn B. strSql,conn,1,2

C. strSql,conn,,2 D. strSql,conn,1

答案:B

2. 问答题

1)请简述为什么要使用事务处理?

答案:使用事务处理可以保证操作的一致性,即只有完全执行了所有操作步骤后,

才会被提交,如果其中任一步没有执行,则其它所有的都不会做。比如银行的划款就必须

要用到事务处理。

2)在示例中去掉On Error Resume Next一句,还会输出有关错误信息吗?

答案:不会输出,因为如果没有On Error Resume Nex这一句,程序会在发生错误处终

止程序,并会显示错误信息,这样就显示不出后面输出的相关错误信息了。

3请比较9.4.3节利用Recordset对象存取数据库和之前第8章讲的方法的区别?

答案:其中查询记录和第八章基本一样,对于添加、删除和更新记录方面,第八章

的方法是利用Connection对象的Execute方法执行一条sql语句(insertupdatedelete)即可

完成更新;而利用Recordset更新记录时,首先要用打开要操作的记录集,且打

开方式必须要用键盘指针类型和可以更新的参数,其次要用到AddNewDeleteUpdate

三个方法来进行数据的更新。总的来说,两种方法的最大区别是在更新数据时,利用

Recordset不用编写复杂的sql语句。

4)请比较9.4.4节示例和8.3.2节示例的区别?

答案:主要的区别是在9.4.4中要用到记录集的方法来更新数据,

AddNewUpdate

8.3.2是利用Connection对象的Execute方法执行构造好的sql语句来进行更新数据的。

5)请比较Recordset对象的Filter属性和Find方法的区别?

答案:Find是查找单个记录。其中只能使用一个条件,不能使用逻辑运算符;

Filter是过滤记录集中的记录,其中可以使用条件和逻辑运算符。

6)使用Access数据库和SQL数据库时有什么主要区别?

答案:主要区别是连接数据库时的字符串写法不同,请大家对比学习。

7)可以对多个表同时进行删除和更新操作吗?

答案:不可以,一次只能对一个表进行删除和更新操作。

8)可以在一个页面中建立多个ConnectionCommandRecordset对象吗?

答案:可以。

9)请思考一下,如果希望限制只能读取数据库,都有哪几种方法?

答案:一是可以把数据库文件本身的属性设置为只读。

二是可以在打开数据库连接字符串时,使用只读模式打开。

10)请思考和总结对象和对象集合的概念与基本操作方法?

58

答案:略,请参考书中关于Error对象和Errors集合、Parameter对象和Parameters

集合、Field对象和Fields集合的操作用法。)

3. 实践题

1)请参考9.4.3节方法改写9.2.4节查找数据示例,请尽量不要使用SQL语句。

答案:参见asptemptj/chapter9/Rewrite9-2 (请注意利用Find循环查找的写法.

并打开浏览器,在其中输入localhost/asptemptj/chapter9/Rewrite9-2/即可

访问。

2)请参考9.4.4节方法修改9.7节综合示例中的(提示:在更新记录时,

对于文本字段,如果用户没有输入内容,可以赋值NULL或空字符串""

asptemptjchapter9address

localhost/asptemptj/chapter9/address/即可访问。

3)在第4章和第6章习题中开发过简单的考试程序,现在可以利用数据库修改一

下。将试题和答案都存放到数据库中,从数据库中读出;学生在线完成后,将成绩保存

回数据库。(提示:可能需要两张数据表,分别用来保存题目和成绩)

asptemptjchapter9Test

localhost/asptemptj/chapter9/Test/即可访问。

4)假如你不知道tbAddress表的具体结构,请想办法使用表格输出全部记录(提

示:需要使用Field对象和Fields集合)

asptemptjchapter9Fields,

localhost/asptemptj/chapter.asp即可访问 清单如下:

9/ Fields /field,

清单field 利用Field对象和Fields集合输出全部记录

Fields集合与Field对象示例

<%

'以下连接数据库,建立一个Connection对象实例conn

Dim conn,strConn

Set conn=Object("tion")

strConn="Provider=.4.0;Data Source=" &

strConn

'以下建立Recordset对象实例rs

Dim rs,strSql

Set rs=Object("set")

strSql ="Select * From tbAddress"

strSql,conn

h("")

%>

59

姓名

性别

<%If rs("strSex")="" Then "checked"%>>

<%If rs("strSex")="" Then "checked"%>>

年龄

电话

E-mail

个人简介

<%

Dim I,fld

For I=0 to -1 '用一个循环先将所有字段名称输出

Set fld=(I) '建立当前字段的Field对象实例fld

%>

<%

Next

%>

<%While not %>

<%

For I=0 to -1 '用一个循环显示所有字段名称的值

Set fld2=(I) '建立当前字段的Field对象实例fld2

%>

<% Next %>

<%

xt

wend

%>

<%=%>
<%=%>

5)请模仿一般网站的注册系统开发一个程序,要求用户能注册,输入用户名、密

码等个人信息,下一次访问时可以用该用户名和密码登录,登录后就可以察看有关网页

内容。如果没有登录直接访问其他页面,则重定向回注册页面。

asptemptj/chapter9/login

localhost/asptemptj/chapter9/ login /即可访问.

6)在上一章习题中开发过留言板,请结合本章知识改写一下。

答案:参见asptemptj/chapter9/guest ,主要修改了添加和删除页面。

7(选做题)请修改9.2.4节排序示例,使得单击某一标题时按升序排列,再次单

击就按倒序排列(提示:可以在查询字符串中同时传回排序字段和排序方向)

60

asptemptj/chapter9/sort/,

localhost/asptemptj/chapter9/sort /即可访问。

8(选做题)请修改9.7节综合示例,使得删除和更新记录时需要输入一个密码,

密码正确才可以修改。(提示:在删除和更新记录时要求用户输入一个正确的密码。不过

此时要注意ID值的正确传递。

asptemptjchapter9addressNew

localhost/asptemptj/chapter9/addressNew/即可访问。

61

10 文件存取组件及其他组件

习题10

1. 选择题(可多选)

1)如果程序中需要建立一个临时文件,下面哪个方法可以用来生成一个临时文件

名称?

A. GetFileName B. GetDriveName C. GetBaseName D. GetTempName

答案:D

2)当使用OpenTextFile方法打开一个文件并准备读取内容时,指针一般指向:

A. 文件开头 B. 文件结尾 C. 1 D. 最后一行

答案:C

解释:对于文本文件,它会自动指向第1行,马上可以读取。

3)如果目标文件存在,下面哪条语句建立的TextStream对象可以读取文件?

A. Set tsm= xtFile("C:",1,True)

B. Set tsm= xtFile("C:",1)

C. Set tsm= xtFile("C:")

D. Set tsm= xtFile("C:", ,True)

答案:ABCD

4)如果目标文件不存在,下面哪条语句能够自动建立文件?

A. Set tsm= xtFile("C:",1,True)

B. Set tsm= xtFile("C:",2,True)

C. Set tsm= xtFile("C:",8,False)

D. Set tsm= xtFile("C:",1,False)

答案:A

5)执行“lankLines 1”语句后,会在文件中写入一个:

A.

B.
C. 1 D. 换行符(回车)

答案:D

6)如果给某文件的Attributes属性赋值3,则该文件属性为:

A. 普通 B. 只读 C. 隐藏 D. 只读和隐藏

答案:D

解释:属性是相加的,所以3就是只读和隐藏。

7)在Folder对象中,下面哪个属性可以返回一个对象或对象集合?

A. Drive B. ParentFolder C. SubFolders D. Files

62

答案:ABCD

8)在超链接组件的超链接数据文件中,文件URL和说明之间可以用什么隔开?

A. 空格 B. 逗号 C. 冒号 D. Tab

答案:D

9)在广告轮显组件中,假如在广告信息文件中设置Border1,然后在页面中又

设置了Border属性值为3,则显示在页面中的广告图片的边框宽度为:

A. 0 B. 1 C. 3 D. 4

答案:C

10)在文件超链接组件中,假如使用GetNextURL方法读取到了最后1个文件的

URL,如果继续执行该方法,将会读取第几个文件的URL?

A. 1 B. 最后1 C. 停止不动 D. 程序会出错

答案:B

解释:它会循环执行。

2. 问答题

1)小王在调试程序中,无论如何修改程序都不能正确执行,可能是什么

原因?

答案:可能是因为没有对。设置如下:首先去掉它的只读属

chapter10文件夹的写权限

性。对于Windows 2000Windows XP系统,如果安装时采用了NTFS文件系统,一般

可以设置它为EveryOne(任何人)可以完全控制。

2)在新建文本文件时,扩展名是否一定要用.txt

答案:不一定,可以为别的,如.htm

3)如果希望修改一个文件的名字,请思考都有什么方法?

答案:可以利用复制和删除来实现,先复制为新的名字,然后删除旧的。

4)如果希望创建一个新的文本文件,请思考都有什么方法?

答案:可以利用FileSystemObject对象的CreateTextFile方法来创建。

5)请比较按行读取文本文件和读取数据库记录有什么区别?

答案:按行读取文本文件是当光标还没有位于文件末尾时,开始逐行读取文本内容,

直到文件末尾时结束;而读取数据库记录是在没有到达记录集末尾时,开始逐条记录进

行读取,直到到达记录集末尾为止。

6)文本文件中的换行符(回车)会自动在浏览器中呈现换行效果吗?

答案:不会,因此在读取时,要用
来输出换行效果。

7)请思考究竟什么时候用FileSystemObject对象,什么时候用File对象和Folder

对象?

答案:一般而言,在新建、复制、移动、删除文件和文件夹时,用FileSystemObject

对象,而File对象用来显示文件自身的各种信息;Folder对象用来显示文件夹的各种信

息。

8)请简述浏览器兼容组件的工作原理?

63

答案:就是当客户端访问服务器上资源时,首先会向服务器端发出一个HTTP请求,

该请求信息中实际上就包含了客户端浏览器的类型等信息。浏览器兼容组件就可以从这

HTTP请求信息中提取出客户端浏览器的类型和版本等信息,然后它会将这些信息与

服务器端的一个特殊文件相匹配,如果浏览器兼容组件在中找

到了相匹配的浏览器信息,它就假定客户端浏览器特性和该文件所记录的一致;当找不

到匹配信息时,它会将中设定的默认浏览器的信息当做客户端浏览器的特

性。

9)请简述广告轮显组件的工作原理?

答案:就是在要显示广告图片文件的页面,首先创建一个AdRotator对象,然后利用

该对象的GetAdvertisement方法调用广告信息文件(该文件用来存放每个广告的图片路

径、超链接网址、广告大小与边框大小等信息,当需要增删广告信息时,修改该文件即

可),每次从这里取出的图片文件都不一样,这样就实现了广告轮显。

10)如果浏览器兼容组件无法返回正确的信息,请问可能是什么原因?

文件,并将其覆盖原来的文件。

3. 实践题

1)请利用文件存取组件自己制作一个计数器。

asptemptj/chapter10/counter

localhost/asptemptj/chapter10/ counter/即可访问,清单如下:

清单index 计数器

</span><span style='font-size:13.5px;color:#000000;letter-spacing:1.154px;font-family:宋体;'>计数器示例</span><span style='font-size:13.5px;color:#000000;letter-spacing:0.626px;font-family:Times New Roman;'>

个人主页

<%

Dim fso '声明一个FileSystemObject对象实例

Set fso=Object("stemObject")

Dim TextFile '声明一个TextStream对象实例

'下面读取原有的访问次数

Set TextFile= xtFile(h(""),1)

Dim visitNum '声明一个访问次数变量

visitNum=CLng(ne) '读取原有的访问次数,注意转化为长整型

'将访问次数加1,并将新的访问次数写回文件中

visitNum=visitNum+1

Set TextFile= xtFile(h(""),2)

64

ine(visitNum) '将新的访问次数写回文件

'关闭TextStream对象

'在页面上输出访问次数

"您是第" & visitNum & "访客"

%>

2请用文件存取组件开发一个故事接龙网页(提示:可以在表单中输入故事内容,

然后追加到一个文本文件中)

asptemptjchapter10story

localhost/asptemptj/chapter10/story/即可访问。

3)请在自己的个人主页上添加广告轮显组件和计数器组件。

asptemptjchapter10myWeb

localhost/asptemptj/chapter10/myWeb/index即可访问,清单如下:

清单index 添加广告轮显组件和计数器组件

</span><span style='font-size:13.5px;color:#000000;letter-spacing:1.154px;font-family:宋体;'>计数器示例</span><span style='font-size:13.5px;color:#000000;letter-spacing:0.626px;font-family:Times New Roman;'>

个人主页

<%

Dim fso '声明一个FileSystemObject对象实例

Set fso=Object("stemObject")

Dim TextFile '声明一个TextStream对象实例

'下面读取原有的访问次数

Set TextFile= xtFile(h(""),1)

Dim visitNum '声明一个访问次数变量

visitNum=CLng(ne) '读取原有的访问次数,注意转化为长整型

'将访问次数加1,并将新的访问次数写回文件中

visitNum=visitNum+1

Set TextFile= xtFile(h(""),2)

ine(visitNum) '将新的访问次数写回文件

'关闭TextStream对象

'在页面上输出访问次数

"您是第" & visitNum & "访客"

%>

65

4)请制作一个页面,判断用户的浏览器版本。如果是IE 5.0以下版本,就提示用

户更新自己的浏览器软件。

asptemptj/chapter10/

localhost/asptemptj/chapter10/即可访问,清单如下:

清单Brower 判断用户的浏览器版本

检查客户端浏览器

<%

Dim bc '声明一个BrowserType对象实例

Set bc=Object("rType")

If UCase(Trim(r))="IE" and cint(n)<5 Then

"您的浏览器版本太低,请更新!"

End If

%>

5)请参考改写为生成一个静态通讯录页面。

asptemptj/chapter10/html

localhost/asptemptj/chapter10/html/即可访问。

6(选做题)请自己编程实现广告轮显效果。(提示:使用随机函数,但是注意不

同广告的出现概率)

asptemptjchapter10Adr

localhost/asptemptj/chapter10/即可访问,清单如下:

Adr/

清单adr 实现广告轮显效果

<%

'这段语句显示广告图片

'首先产生一个10以内的随机整数

Dim NumTemp

Randomize Timer '该语句用于初始化随机种子,否则每次产生的值都一样

NumTemp = Int((10 * Rnd()) + 1)

'根据该整数显示相应的图片,并加上超链接

66

Select Case Numtemp

Case 0,1,2,3

"

"

Case 4,5,6

"

"

Case 7,8,9

"

"

End Select

%>

7(选做题)请自己开发一个简单的网上文件管理器,在其中可以显示指定文件

夹下的所有子文件夹和文件;可以单击子文件夹的名称进入下一层文件夹;可以返回父

文件夹;可以删除文件或文件夹;如果是文本文件,可以读取并显示在页面上。

asptemptjchapter10file

localhost/asptemptj/chapter10/ file/即可访问。

67

11 使用第三方组件

习题11

1. 选择题(可多选)

1)下面哪条语句可以用于限制上传文件的大小为2M,并且超出大小时报错?

A. Size 2*1024*1024,True

B. Size 2*1024*1024,False

C. Size 2*1024*1024

D. Size=2*1024*1024

答案:A

2)对于文件上传组件,下面哪条语句可以输出上传文件的大小。

A. (fleUpload).Size

""

B. (fleUpload).Size

" "

C. (fleUpload).Size

" "

D. (fleUpload).Size

" "

答案:A

3)对于文件上传组件,下面哪条语句可以输出上传表单元素的值。

A. (txtIntro).Value

""

B. (txtIntro)

""

C. (txtIntro).Value

""

D. (txtIntro)

""

答案:AB

4)在中,下面哪些语句可以用来输出上传文件的大小?

A. (fleUpload).Size

""

B.

C. (1).Size

D. fle

答案:ABC

5Upload对象的哪个属性用于设置是否允许覆盖文件?

A. IgnoreNoPost B. OverWrite C. SetMaxSize D. OverWriteFiles

答案:D

6)对于发送邮件组件,如果信箱是jjshang99@,密码是123456,发信服务器

,发信时需要验证。请问应该用下面哪一句?

A. ""

B. "jjshang99@"

C. "jjshang99:123456@"

D. "jjshang99:123456@"

答案:D

7)如果要发送支持HTML格式的邮件,需要用下面哪个属性设置邮件内容?

A. Body B. HTMLBody C. Subject D. HTMLSubject

68

答案:B

8)如果希望确保发送的邮件中不会出现乱码,可以设置哪个属性?

A. Subject B. Body C. Charset D. ContentType

答案:C

2. 问答题

1)小王在测试11.1.3节的示例时,无论如何都不能正确执行,请分析可能原因?

答案:可能是上传文件夹upfiles的权限问题,首先去掉它的只读属性。对于Windows 2000

Windows XP系统,如果安装时采用了NTFS文件系统,一般可以设置它为EveryOne

(任何人)可以完全控制。

2)在11.1节的例子中,可以用获取表单元素值吗?

答案:不可以,因为该表单是以二进制方式提交的,必须用ASPUpload组件提供的方法

来获取元素。

3)在文件上传时,可能上传时间会比较长而不能成功。想想应该怎么办?(提示:

Server对象的ScriptTimeOut属性)

答案:可以修改Server对象的ScriptTimeout属性

4)请比较第9章学习的文件存取组件和本章学习的文件上传组件的区别。

答案:文件存取组件是对服务器端的文件和文件夹操作的。文件上传组件用来将客户

端的文件上传到服务器端。

5)在发送邮件时,附件到底是位于客户端还是服务器端?

答案:先将附件上传到服务器端,然后才当作附件发送的。

6)从网上下载一个组件文件后,应该如何注册该组件?

答案:要用Regsvr32命令在命令行注册该组件(如:Regsvr32 C:

3. 实践题

1)请参考11.1.3节示例改写11.1.4节示例,将其修改为逐个获取上传文件和说明。

asptemptjchapter11Rewrite_11-4

localhost/asptemptj/chapter11/ Rewrite_11-4 /即可访问。

2)请修改11.1.3节示例,将上传文件用当时的日期和时间的组合命名保存。例如

(提示:一要利用日期函数和字符串函数生成文件名称;二要先将

上传文件保存到内存中,然后以该名称另存)

asptemptjchapter11upload

localhost/asptemptj/chapter11/upload /upload_即可访问。

3)请在自己的个人主页中添加自动发信功能,当有人给你留言时,可以将留言内容

发送到你的信箱,并给留言人发一封感谢信。

asptemptjchapter11sendMail

localhost/asptemptj/chapter11/sendMail/即可访问。

4)请结合W3Jmail组件和数据库知识开发一个可以自动群发E-mail的页面。

asptemptjchapter11jmail

localhost/asptemptj/chapter11/ 清单如下:

mail/即可访问,

清单 .asp 利用jmail自动群发

jmailjmail

<% Option Explicit %>

69

</span><span style='font-size:13.5px;color:#000000;letter-spacing:1.26px;font-family:宋体;'>自动发送</span><span style='font-size:13.5px;color:#000000;letter-spacing:0.616px;font-family:Times New Roman;'>Email

<%

Dim Jmail

Set Jmail = Object("e")

'这一段添加收件人

'连接数据库,建立Connection对象

Dim db, strConn

strConn="Dbq=" & h("") & ";Driver={Microsoft Access Driver

Set db=Object("tion")

strConn

'以下建立Recordset对象实例rs

Dim strSql,rs

strSql="Select email From users"

Set rs=e(strSql)

Do While Not

ipient rs("email") '利用循环添加每一个收件人

xt

Loop

Set db=Nothing

="jjshang99@"

t ="节日快乐"

="您好,祝节日快乐,万事如意!,送您一首歌"

achment h("") '附件

("jjshang99:123456@") '执行发送

'关闭对象

Set Jmail=Nothing

"已经成功发送"

%>

(*.mdb)}"

70

5)请在个人主页中添加个人影集页面,可以在线添加照片。

asptemptjchapter11myphoto

localhost/asptemptj/chapter11/

myphoto/即可访问。

6请为11.3节的发布信息综合示例添加删除功能。(提示:删除记录时要利用上一章

讲的文件存取组件同时删除掉upfiles文件夹下的文件)

asptemptjchapter11news

localhost/asptemptj/chapter11/ news/即可访问。

7(选做题)上一章习题中开发过网上文件管理器,请为其添加上传文件的功能。

asptemptjchapter11fileupload

localhost/asptemptj/chapter11/ fileupload /即可访问。

811.1.3使

IgnoreNoPost属性,请参考组件的使用说明)

localhost/asptemptj/chapter11/ 清单如下:

即可访问,

清单Rewrite11.1.3 上传表单与提交文件合二为一

</span><span style='font-size:13.5px;color:#000000;letter-spacing:1.191px;font-family:宋体;'>表单与处理程序在同一个页面示例</span><span style='font-size:13.5px;color:#000000;letter-spacing:0.604px;font-family:Times New Roman;'>

表单与处理程序在同一个页面

选择文件:

文件说明:

作者姓名:

<%

'创建一个文件上传组件实例

Dim Upload

Set Upload = Object("")

'设置如果没有上传文件就不要保存

NoPost = True

'将上传文件保存到upload文件夹下,并且返回一个参数Count表示上传了几个文件(当

Dim Count

71

然本示例只是上传一个文件)

Count=(h("upload"))

'如果Count>0,表示上传了文件,所以写出上传文件的信息

If Count > 0 Then

'获取表单元素信息(文件说明)

Dim intro

intro=("txtIntro").value

'输出文件的各种信息

"上传文件为:" & ("fleUpload").Path & "
"

"文件名称为:" & ("fleUpload").filename & "
"

"文件大小为:" & ("fleUpload").Size & "字节
"

"文件说明为:" & intro & "
"

"点击此处可以 End If

%>

("fleUpload").filename & "' target='_blank'>浏览文件"

9(选做题)网上还有一个比较流行的免费的文件上传组件,有兴趣者

可以自己下载研究使用。

asptemptjchapter11Lyfupload,

localhost/asptemptj/chapter11/Lyfupload/即可访问。

72

12 网络程序开发实例

习题12

1. 问答题

1本章在对文本进行HTML编码时是在读取记录时进行的,那么是否可以在添加

记录之前对文本进行编码处理呢?两者有什么区别?

答案:可以。在读取时进行HTML编码比较简单,因为这种方法只需要在读取时进

行转化即可,而在存入数据时,是无需任何转化的;但若在记录之前对文本进行编码处

理,则需要在更新前和读取时都需要进行对应的编码处理,这种方法比前者的操作要繁

琐。

2)使用8.3.2节、9.4.4节和12.1节的方法添加不完整记录时,有什么区别?

答案:9.4.4节和12.1节的添加方法基本一致,都是先根据判断可以为空的字段是否

为空,来构造sql 语句;而8.3.2节是不需要判断,直接添加,如某字段为空,则用空字

符串来代替。

3)在聊天室中可以用数据库或文本文件保存聊天信息和在线人员名单吗?

答案:可以,但是由于聊天室中几秒就要刷新一下页面,需要频繁读取数据,而从

数据库或文本文件中读取数据相对会慢一点。

4)在本聊天室中,如果用户进入聊天室后一直没有发言,那么过3分钟后他会被

从在线人员名单中删除吗?

答案:一般是不会,虽然程序中有规定t时间为3分钟,但一般会有

延迟现象,不是很精确。

5)如果关闭了服务器,本聊天室中的聊天信息会保留下来吗?

答案:不会保留下来,因为信息都保存在Application中,关闭服务器,则信息清空。

6)在Session_OnEnd事件中可以使用hVariables

吗?

Session_OnEnd使Variables使

h

7)在本BBS中,都是利用URL后的查询字符串传递栏目编号和页码,还有什么

别的方法吗?

答案:可以考虑将编号和页码存放到Session对象中。

8在本BBSlog_中,可以将用户名附在URL后面的查询字符串中

传递到log_中吗?两者有什么区别?(提示:用户可以自己修改显示在浏览

73

器地址栏中的查询字符串)

答案:虽然也是可以将用户名附在URL后面的查询字符串中,但是这样做很不安全。

因为用户可以自己修改显示在浏览器地址栏中的查询字符串,如果此时将URL后面

的用户名字符串更改为其他已存在的,那么到log_页面,就会将别人的信息

修改掉,所以最好还是采用书中所讲的方法,将其存放到Session中。

2. 实践题

1)在留言板示例中,请进行如下修改:

1.保存到数据库的同时,给站长发一封E-mail通知。

2.增加站长回复功能,站长可以对每条留言进行回复。(提示:增加一个字段,

专门用来存放回复信息)

3.尝试将首页修改为分页显示。(提示:此时就要注意传递页码参数)

答案:参见asptemptj/chapter12/guest(注意发信用了Jmail组件,需要先注册)

并打开浏览器,在其中输入localhost/asptemptj/chapter12/guest/即可访

问。

2)在聊天室示例中,请进行如下修改:

1.在聊天室中限制不允许使用HTML代码。(提示:对输入文本进行处理)

2.在其中添加更多的说话颜色和表情。

3.增加一个姓名颜色框,可以添加姓名颜色。

4.添加私聊功能,可以对指定的人说话。(提示:此时的聊天信息字符串处理操

作非常复杂)

5.可以添加多个聊天房间。(提示:添加房间后,所有保存的信息要注意分房间

保存)

asptemptj/chapter12/chat ,

localhost/asptemptj/chapter12/chat /即可访问。

3)在BBS论坛示例中,请进行如下修改:

1.添加论坛管理模块,可以在线添加和删除栏目,可以设置版主。

2.版主可以删除文章或置顶文章。

2.添加用户管理模块,可以在线删除用户。

asptemptj/chapter12/bbs,

localhost/asptemptj/chapter12/bbs/即可访问。

4(选做题)在聊天室示例中,用数据库文件保存在线人员名单。

答案:略。

5(选做题)在聊天室示例中,如果不使用,如何来删除用户?请编程实现。

(提示:在用户关闭浏览器时执行删除操作)

答案:略。

74