7.1 课前导读
7.2 课堂教学
7.3 上机练习
7.4 课后作业第 7课 ASP程序与
ASP的内置对象
7.1 课前导读
1,脚本语言
2,对象与 ActiveX组件
7.1 课前导读
ASP是微软公司推出的一种位于服务器端的脚本运行环境 。 通过这种环境,可将 HTML页,脚本命令以及 COM组件组合在一起,创建交互式网页或功能强大的基于 Web的应用程序,可以创建和运行动态的交互式 Web服务器应用程序 。 因为不用通过编译生成目标程序,ASP程序的开发与修改非常容易 。
1,脚本语言脚本语言是介于 HTML和 Java,C++,Visual
Basic等编程语言之间的语言 。 HTML用于格式化文本和链接网页 。 编程语言则向计算机发送一系列复杂机器指令,以完成一系列的操作 。 脚本语言介于两者之间,通常用于格式化文本和使用以编程语言编写的已编译好的组件 。 脚本语言也可用来向计算机发送指令,
但它们的语法规则没有可编译的编程语言那样严格和复杂 。
ASP默认的脚本编写语言为 VBScript语言,用户可以根据自己的需要选择其他的脚本语言 。 只要安装了相应的脚本引擎,就可以使用几乎目前所有流行的脚本语言编写 ASP应用程序 。 为简单起见,本教程中的所有 ASP应用程序均使用 VBScript编写 。
2,对象与 ActiveX组件在面向对象编程中,对象就是指由当作完整实体的操作和数据组成的变量 。 对象是基于特定模型的,
用户可通过由对象提供的一组方法或相关函数的接口来访问对象的数据,或执行相应的操作 。
ActiveX组件是建立 Web应用程序的关键 。 ActiveX
组件是一个存在于 Web服务器上的文件,该文件含有完成某些特定任务的代码 。 ActiveX组件扩展了服务器环境下的对象模型,提供公共服务,增强了对服务器平台上应用程序的支持,在 ASP编程时就不必再去创建执行这些任务的代码 。
ASP的核心技术是对组件和对象技术的充分支持 。
组件提供了在脚本中执行任务的对象,要使用组件提供的对象,需创建对象的实例并将这个新的实例分配变量名 。 使用 ASP的 Server.CreateObject方法可以创建对象的实例,使用脚本语言的变量分配指令可以为对象实例命名 。 组件可以提供一个或多个对象以及对象的方法和属性 。
用 ASP编程时可使用的组件有两类:一类是 ASP内置的组件,另一类是由第三方提供 ( 或自己编写 ) 的组件 。
7.2 课堂教学
7.2.1 基本概念
7.2.2 Response对象及其使用
7.2.3 Server对象及其使用
7.2.1 基本概念
1,ASP程序
2,主脚本语言
3,ASP程序的发布与执行
4,ASP的包含文件
5,ASP的内置对象
6,ASP的内置组件
7,用户自定义组件
1,ASP程序
ASP程序是以,asp为扩展名的文本文件,这个文本文件由静态 HTML标记和动态 ASP组成,它们之间可以相互包含,也就是说,在 HTML标记中可以插入 ASP代码,
在 ASP脚本语言代码中也可以插入 HTML代码 。
创建 ASP程序非常容易,比如可以在 HTML文件中添加脚本,只需将该文件的扩展名,htm或,html替换为,asp就可以了 。 要使,asp文件可用于 Web用户,需将这个新文件保存在 Web站点上的目录中 ( 确定启用了该目录的脚本和执行权限 ) 。 使用浏览器查看该文件时,
可以看到 ASP处理并返回的 HTML页 。
由于服务器要对,asp文件做额外的处理,所以最好不要将所有的 HTML页都转换为 ASP页 。
(1) ASP脚本命令
ASP脚本命令使用定界符 <% 和 %>。 可以在定界符中包含任何命令,只要这些命令对正在使用的脚本语言有效 。 下述代码给出了包含脚本命令的简单的
HTML页:
<HTML>
<BODY>
页面的打开时间是,<%= Now %>.
</BODY>
</HTML>
说明,VBScript函数 Now返回当前的日期和时间 。
Web服务器处理该页时,会使用当前的日期和时间替换 <%= Now %>并且将该页返回到浏览器,显示结果 。
与前面各课的客户端脚本编写 ( 编写在浏览器上运行的脚本 ) 不同,请注意不要用 HTML中的 <SCRIPT>
标记括入表达式 。 在编写服务器端脚本时,<SCRIPT>
标记只能在 ASP定界符 ( <%和 %>) 以外定义过程 。
(2) 合成 HTML和 ASP脚本命令在 ASP定界符中可以包含任何在主脚本语言中合法的语句,表达式,过程或操作符 。 在 VBScript和其他脚本语言中,语句是语法完整的单元,该单元表达某项活动,声明或定义 。
【 例 7-1】 根据时间返回不同的 结果 。
代码如下:
<HTML>
<BODY>
<%
If Time >= #12:00:00 AM# And Time < #12:00:00 PM# Then
Greeting = "Good Morning!"
Else
Greeting = "Hello!"
End If
%>
<%= Greeting %>
</BODY>
</HTML>
说明,① 其中的条件语句 If...Then...Else将
,Good Morning!” 或,Hello!” 存储在变量 Greeting
中 。 <%= Greeting %>命令将变量值发送到浏览器中 。
② 在语句的不同部分之间可以加入 HTML文本 。
例如上例脚本在 If...Then...Else语句中加入 HTML,
产生同样的结果:
<HTML>
<BODY>
<% If Time >= #12:00:00 AM# And Time < #12:00:00 PM# Then %>
Good Morning!
<% Else %>
Hello!
<% End If %>
</BODY>
</HTML>
如果条件为真,那么 Web服务器将跟随条件的
HTML(,Good Morning!,) 发送到浏览器;否则,
将跟随 Else的 HTML(,Hello!,) 发送到浏览器 。
这种混合 HTML和脚本 命令的方式 可以方便地将
If...Then...Else语句变换为几行 HTML文本 。
③ 最好从脚本命令中将 HTML文本返回到浏览器,
而不用脚本命令散布 HTML文本 。 要将文本返回到浏览器,可以使用 ASP的内建对象 Response( 参见 7.2.2) 。
下述代码可以产生与前例同样的结果:
<HTML>
<BODY>
<%
If Time >= #12:00:00 AM# And Time < #12:00:00 PM# Then
Response.Write "Good Morning!"
Else
Response.Write "Hello!"
End If
%>
</BODY>
</HTML>
Response.Write将跟随的文本发送到浏览器 。
(3) 在脚本中的空白字符如果使用的脚本语言是 VBScript或者 JScript,
ASP调用的 VBScript或者 JScript解释器会从指令中删除空白字符 ( 使用其他脚本语言时,ASP保留空白字符 ) 。 空白字符包括空格,制表符,回车和换行符 。
使用 VBScript和 JScript时,在打开定界符之后和关闭定界符之前使用空白字符更容易阅读命令 。 下面的命令都是合法的:
<% Color = "Green" %>
<%Color="Green"%>
<%
Color = "Green"
%>
由于 VBScript或者 JScript解释器要将 ASP语句中关闭定界符与下一个语句的打开定界符之间的空白字符删除,要保留两个语句间的空白字符,比如在句子中显示变量值的时候,就要使用 HTML不间断空格符
( &nbsp;) 来实现 。 例如:
<%
Hello = "Hello"
World = "World"
%>
<P>My response is to say "<%= Hello %>&nbsp;<%= World %>."
</P>
2,主脚本语言
ASP使 Web开发者可以用各种脚本语言编写程序而不用担心浏览器是否支持 。 实际上,在一个,asp文件中可以使用多种脚本语言,只要你在每段脚本程序开始处用 HTML标签标明所用的脚本语言 。
VBScript 是 缺 省 的 主 脚 本 语 言,无 需 安 装
VBScript的脚本引擎 。 主脚本语言用在定界符 <%和 %>
之内,可以在定界符之内使用任何有效的 VBScript命令,ASP会调用 VBScript脚本引擎来处理这些命令 。
因为脚本是在服务器端执行,VBScript中不再支持用户界面函数 InputBox和 MsgBox。 另外,在服务器端的脚本中,不要使用 VBScript函数 CreateObject和
GetObject,而要使用 Server.CreateObject,这样
ASP就可以跟踪 对象实例 了 。 用 CreateObject或
GetObject创建的对象不能访问 ASP内建对象,也不能参与事务处理 。
由于 ASP脚本是在服务器端被处理的,所以即使客户端的浏览器不支持脚本语言,也不必通过包含进
HTML注释标记来隐藏脚本 。 在内容送到浏览器之前,
所有 ASP命令都已被处理好了 。 可用 HTML注释将注释内容加进 HTML页,注释将返回给浏览器,若用户浏览
HTML源文件,就可以看见 。
VBScript支持 REM或撇号型注释 。 与 HTML注释不同,当处理脚本时,它们将被删除,而不是被送到浏览器 。 可以在脚本命令之间或程序中使用注释,如下述代码在浏览器中看不到 REM后面代码的作用:
<%REM This line and the following line are comments'Print
greeting in green
greeting="How are you!"%>
<font color=GREEN><%=greeting%>
输出表达式不能包括注释 。 例如,下面的第一行将正常运行,而第二行则不能,因为它是以 <%=开头的 。
<% i = i +1 'this increments i,This script will work,%>
<%= name 'this prints the variable name,This script will
fail,%>
还可以将任一种脚本语言设为主脚本语言 。 设置格式为:
<%@LANGUAGE=ScriptingLanguage%>
其中,ScriptingLanguage表示脚本语言名 。
3,ASP程序的发布与执行
ASP程序运行于服务器中,执行后产生浏览器可识别的 HTML代码,然后再传送给浏览器 。 发布 ASP程序,即将其放于 Web服务器的目录下 。 例如将程序
hello.asp 放置于 Web 服务器的
\Inetpub\wwwroot\myasp目录下 。 如果该服务器域名为 www.myname.com,则可以在浏览器的地址栏中输入如下的网址来执行此程序:
http,//www.myname.com/myasp/hello.asp
服务器收到这个请求后,使用 ASP的 VBScript语言解释器解释原始程序,而原始程序是不会传到使用者的浏览器的 。 用户端使用浏览器观看到的是一般标准的 HTML代码,网站服务器会自动将 ASP的程序代码解释为标准 HTML格式的网页内容 。
4,ASP的包含文件
ASP代码实际上就是 ASP程序中一组执行特定任务的脚本命令 。 如果需要经常执行某一组特定任务,可以将之定义成子程序,然后重复调用 。 如果该子程序只在某一页内调用,把它放在这一页内即可,如果在多页中都要调用多个子程序的话,可以把这些子程序放在一个单独的文件中 ( 称为被包含文件 ),然后在每个要调用这些子程序的,asp页中将,被包含文件,
包含进来 。 包含文件的命令格式为:
<!--#INCLUDE Virtual | file ="filename"-->
说明:
① filename是被包含文件名,被包含文件不要求专门的文件扩展名,但是,被包含文件以,inc为扩展名以便和其他类型文件相区分是一个良好的编程习惯 。
② Virtual表示被包含文件的路径开始于虚拟目录 。 例如,如果一个被命名为 footer.inc的文件属于一个名为 /Myapp的虚拟目 录,则下述命 令将把
footer.inc的内容插入到包含该命令行的文件中:
<!--#include virtual ="/myapp/footer.inc"-->
③ file表示使用相对路径,相对路径开始于含有当前文件的目录 。 例如,当前文件位于目录 Myapp
中,而被包含文件 Header1.inc在 Myapp\Headers目录中,下述命令将把 Header1.inc插入到包含该命令行的文件中:
<!--#include file ="headers/header1.inc"-->
④ 如果在 Internet服务管理器中的,启用上层目录,选项被选中,则也可以使用 file关键字和,./
语法包含父目录即上一层目录中的文件 。
⑤ 一个被包含文件也可以包含其他的文件 。 如果 #include指令没有导致循环,一个,asp文件可以多次包括同一个文件 。 例如,如果文件 First.asp包含文件 Second.inc,则 Second.inc一定不 能再 包含
First.asp。 一个文件也不能包含自身 。 ASP检测此类循环或嵌套错误,并在检测到时产生一个错误消息,
同时停止处理被请求的,asp文件 。
⑥ ASP在执行脚本命令之前包含文件 。 因此,不能用脚本命令去创建被包含文件的名称 。 例如,下面的脚本将不能打开 Header1.inc,因为 ASP会在它分配一个文件名给变量 name之前先执行 #include指令 。
<!-- This script will fail -->
<% name=(header1 & ".inc") %>
<!--#include file="<%= name %>"-->
5,ASP的内置对象在 ASP引擎中提供了六大内置对象,即 Request对象,Response对象,Application对象,Server对象,
Session对象和 ObjectContext对象,其中最为常用的是前 5种 。
(1) Request对象该对象是 ASP的请示对象,它所包含的信息是客户端浏览器提出的请求 。 利用 Request对象可以接收用户基于 HTTP请求的所有信息,这包括通过 POST方法或 GET
方法,cookies以及客户端证书从 HTML表单传递的参数 。
通过 Request对象也可以访问发送到服务器的二进制数据,如文件上载 。
(2) Response对象该对象专门负责 HTTP的响应工作,也就是说,
Response对象可以通过多种方式将服务器端数据发送到客户端,如客户端屏幕显示,用户浏览页面的重定向以及在客户端创建 cookies等 。
(3) Session对象
Session对象是 ASP技术中实现用户会话管理的手段,主要用来存储特定用户会话所需的信息 。 当用户在应用程序的 Web页面之间跳转时,存储在 Session对象中的变量不会丢失,而且在整个用户会话中会一直存在下去 。 Session对象常用来存储用户的首选项,
也经常被用来保存用户的身份标记,实现用户的身份认证和用户权限管理 。
(4) Application对象
Application对象可以控制服务器端应用程序的启动和终止状态,并保存整个应用程序过程中的信息 。
它将虚拟目录及其子目录也看成一个应用程序,用来在给定的应用程序的所有用户之间共享信息 。 它在很多方面与 Session对象很相似,但是在本质上有着很大区别 。 比如对于同一个页面,不同的访问者可以创建不同的 Session,而 Application的值却是固定不变的,只被创建一次 。 在 ASP中,多个用户可以共享
Application对象,因此必须用 lock和 unlock方法来确保多个用户不能同时改变 Application对象 。
(5) Server对象
Server对象是 ASP六大内置对象之中与服务器关系最为密切的一个对象,它允许用户存取 Web服务器提供的功能 。 Server对象使用其方法和属性来访问
Web服务器,大多数方法和属性是作为实用程序的功能服务的 。 使用 Server对象,可以在服务器上启动
ActiveX组件,可以创建各种 Server对象的实例以简化用户的操作 。
(6) ObjectContext对象
ObjectContext对象是微软在 IIS4.0中最新提供的对象,它主要用来处理与事务相关的问题 。 与 ASP
的其它对象有所不同,ObjectContext对象没有属性和集合,只有方法和事件 。
6,ASP的内置组件在 ASP页面中要想使 Web应用程序具有强大的功能,
必须要依靠 ActiveX组件来实现 。 ASP的内置组件是指安装 ASP时自动注册到 ASP Web服务器上的组件 。
(1) Ad Rotator( 广告轮显组件 )
该组件可以用于创建一个 Ad Rotator对象,然后按指定计划在同一页上自动轮换显示广告 。 可以使用 Ad Rotator组件来交替显示图像,并提供从图像到其相应内容的 URL的链接,从而在相应的图像出现后可以链接至相应的页面 。
(2) Browser Capabilities( 浏览器功能组件 )
该组件可以用于创建一个 Browser Type对象,用来探测访问该 Web站点的每个浏览器的性能,类型及版本 。 通过该组件,可检测出浏览器的有关信息,如浏览器的名称,版本及本浏览器是否支持 ActiveX组件框架结构等,从而对发送到该浏览器的内容进行剪裁 。
(3) Collaboration Data Objects for NTS( 邮件对象组件 )
该组件可以提供 Web应用程序所使用的邮件对象,
可以快速,简便的在 Web页上添加收发邮件功能 。 但该组件只适用于 Internet Information Server for
Windows NT? Server。
(4) Content Linking( 内容超链接组件 )
该组件可以创建一个 NextLink对象,该对象可生成 Web页内容列表,这样用户就可以像处理书的内容一样处理网站的内容 。
(5) Content Rotator ( 内容轮播组件 )
该组件可以根据 Content Schedule文件中指定的内容,按照一定的权值随机显示所指定的页面 。 当然该页面可以是任何 Web页,如文本,图像,声音,超链接等,只要页面代码符合 HTML规范即可 。
(6) Counters( 计数器组件 )
该组件可以创建一个 Counters对象,使用该对象可以创建,保存,增加或检索任意数量的独立计数器 。
从而用来统计一个页面被访问的次数,也可以同及其它的一些数据,如统计一个页面被请求的次数或统计广告被点击的次数等等 。
(7) Database Access ( 数据库存取组件 )
该组件提供用 ActiveX Data Objects (ADO)对数据库的访问 。 使用该组件可以在应用程序中访问数据库,显示表的内容,构造用户查询以及在 Web页执行一些其它的数据库方面的操作 。
(8) File Access( 文件访问组件 )
该组件可以创建用于在计算机文件系统中创建,
修改,复制,删除和检索文件等操作的对象,它包括多个互相关联的对象,如 FileSystemObject对象,
File对象,Folder对象,TextStream对象,Drive对象等等,用户可以用这些对象对文件系统进行操作和处理 。
(9) Page Counter( 页计数器组件 )
该组件可以用来创建一个 Page Counter组件实例,
以记录并显示 Web页被访问的次数 。
其他还有 MyInfo,Status,System,Tools( 个人信息,状态,系统和工具 ) 等 。
7,用户自定义组件在使用 ASP开发应用程序时,有时需要完成某些特定的功能,但仅仅使用 ASP所提供的组件却无法完成,或者为了弥补 ASP的某些漏洞,用户不得不自己建立一些组件 。 自定义组件的方法很多,可以使用
Server对象的 CreateObject方法,也可以使用 Visual
Basic等其它一些高级语言来开发 。
7.2.2 Response对象及其使用
1,Response对象功能概述
2,Response对象的属性
3,Reponse对象的 Cookies集合
1,Response对象功能概述
Response对象主要用来输出信息到客户端 。 包括直接发送信息给浏览器,重定向浏览器到另一个 URL
或设置 cookie的值等功能 。 Reponse对象提供了集合,
属性,方法等来进行参数的传递 。
(1) 将输出传输到浏览器端使用 Response对象的 Write方法可以向发往客户端浏览器的 HTML文件中直接输出信息 。 与 Document对象的 Write方法相似,Response对象的 Write方法将信息从 Web服务器输出到浏览器 。 其语法格式为:
Response.Write Variant
其中,Variant为要输出的数据,可以是任何
VBScript的 Variant数据类型,包括字符,字符串和整数 。
说明:
① 向浏览器中传递的数据可以混合使用 HTML标记,如:
<%
Response.Write "<H1>使用 Response对象的 Write方法 <H1><br>"
%>
或:
<%
data = "<H1>使用 Response对象的 Write方法 <H1><br>"
Response.Write data
%>
② 如果 <%和 %>之间只有一行 Response.Write语句,
则可以写成简略写法:
<%= "<H1>使用 Response对象的 Write方法 <H1><br>" %>
或:
<% data = "<H1>使用 Response对象的 Write方法 <H1><br>" %>
<%= data %>
③ 如果要在浏览器显示的信息包含符号,%>,则必须写为,%\>,以免被视为 ASP代码的结束 。
(2) 重定向网址
Response对象的 Redirect方法可以使浏览器从当前网页转向其他网页 。 其语法格式为:
Response.Redirect path
其中,path” 是新网页的网址 。
说明:由于 Response.Redirect的作用是告诉浏览器打开新网页,所以 Response.Redirect必须放在没 有 数 据 输 出 到 浏 览 器 端 之 前,换句话说,
Response.Redirect应放在程序的 <HTML>标记前面,
或设置 Response.Buffer=True,以启用缓冲处理,将输出存放至缓冲区 。
【 例 7-2】 使用 Response.Redirect在一周内显示不同的网页,星期一~星期五显示 workday.htm,星期六和星期日显示 playday.htm。
ASP程序 7_2.asp的代码如下:
<%@ Language=VBScript %>
<%Response.Buffer=True%>
<HTML>
<BODY>
<%
w=weekday(Date())
Select Case w
Case "2","3","4","5","6"
PageName = "workday.htm"
CaSe "1","7"
PageName = "playday.htm"
End Select
Response.Redirect PageName
%>
</BODY>
</HTML>
其中调用的两个 HTML文件可以分别简化为:
workday.htm的代码如下:
<HTML>
<BODY>
今天是工作日
</BODY>
</HTML>
playday.htm的代码如下:
<HTML>
<BODY>
今天是休息日
</BODY>
</HTML>
将三个文件发布到 Web服务器中,运行 ASP程序
7_2.asp,根据日期不同,浏览器中将 显示 不同的网页 。
(3) 结束程序的运行
Response对象的 End方法可以结束 ASP程序的运行 。
其语法格式为:
Response.End
此时,如果缓冲区内有数据,将会把数据输出到浏览器端 。 使用该方法可以控制程序的执行 。
【 例 7-3】 网页的有效显示时段为 09:00:00~
17:00:00,若超过该时段,就 显示 相应信息并结束程序的执行,而不显示网页的内容 。
ASP程序 7_3.asp的代码如下:
<%@ Language=VBScript %>
<%
CurrentTime=Time()
If CurrentTime <#09:00:00# Or CurrentTime >#17:00:00# Then
Response.Write "现在时刻为 "
Response.Write CurrentTime
Response.Write "<P>网页开放时间为 09:00:00 — 17:00:00,
目前暂不开放 !</P>"
Response.End
End If
%>
<HTML>
<BODY>
<CENTER><P>现在时刻为 <% =CurrentTime%></P>
<FONT size=7 face=华文彩云 color= blue>欢迎光临 !</FONT>
</CENTER>
</BODY>
</HTML>
(4) Response对象的其他方法除了前面介绍的 Write方法,Redirect方法和 End
方法之外,Response对象还有如下方法:
① BinaryWrite方法允许向浏览器发送非文本的原始二进制信息,这些信息不做任何转换而直接显示二进制数据给用户 。 其格式如下:
Response.BinaryWrite Date
其中,Date变量为要发送到浏览器的二进制的信息 。 一般用这个方法来传送声音,图像,可执行文件,
压缩文件等 。
② Clear方法用于清除缓冲区中的所有 HTML输出,
可以用来防止显示第二个页面时,第一个页面也显示出来,它把第一个页面从 buffer中清空了 。 但 Clear
方法只清除响应正文而不清除响应标题 。 可以用该方法处理错误情况 。 如果没有将 Response.Buffer设置为 True,则该方法将导致运行时错误 。 其语法如下:
Response.Clear
③ Flush方法可以立即发送缓冲区中的输出 。 如果没有将 Response.Buffer设置为 TRUE,该方法将导致运行时错误 。 其语法如下:
Response.Flush
2,Response对象的属性
Reponse对象的属性有很多,如 Buffer属性,
Cachecontrol属性,Charset属性,Contenttype属性,
Expire 属性,ExpireAbsolute 属性,
Isclientconnected属性,Pics属性和 Status属性等 。
(1) Buffer属性
Buffer属性是 Reponse对象使用较多的属性之一,
它主要用来控制是否输出缓冲页,也就是控制何时将输出信息送至请求浏览器 。 Buffer属性的取值可以是
Ture或 False,若取 Ture为使用缓冲页,取 False为不使用缓冲页 。
若 Web服务器输出使用缓冲页,则只有当前页的所有服务器脚本处理完毕或是调用了 Flush或 End方法,
才将数据传送至客户端;反之,数据在当前页的所有服务器脚本处理的同时传送至客户端 。 对于一个页面来说,处理起来如果需要花很长时间,则使用缓冲和不使用缓冲有明显的区别,若处理时间很短,则不明显 。
【 例 7-4】 使用缓冲页的输出 。
ASP程序 7_4.asp的代码如下:
<% Response.Buffer=True %>
<HTML>
<HEAD><TITLE>Response输出时使用缓冲页示例
</TITLE></HEAD>
<BODY>
<P align="center">Response输出时使用缓冲页
<BR><BR></P>
<%For I=1 to 2000000
Response.Write "使用缓冲 "
Next%>
</BODY>
</HTML>
说明:当使用缓冲,程序直到执行完才输出 显示,
图 7-5左为程序执行过程中,图 7-5右为程序执行完毕;
若不使用缓冲,则在程序执行过程的同时输出显示,
如图 7-6所示 。
(2) Cachecontrol属性
Cachecontrol属性用来控制是否允许代理服务器缓存页面 。 若允许代理服务器缓存页,则应用程序可以通过代理服务器发送页面给用户,代理服务器代替用户浏览器从 Web站点请求网页 。 代理服务器缓存
HTML页使相同页的重复请求能够快速有效地返回给浏览器 。 并且可以减轻网络和 Web服务器的负荷 。
默认情况下,Cachecontrol 属性取值为:
Private,表示禁止代理服务器缓存 ASP页,要允许缓存,可将 Cachecontrol属性值设为,Public。
(3) ContentType属性
ContentType属性指定服务器发送给客户端的
HTTP内 容类 型或 标准 MIME类型 。 MIME即多 功 能
Internet邮件扩展 。 在网页编程中有时要将超链接指向一个 Word或 Excel文件,当用户点击这个链接时浏览器会自动调用对应方法将这个文件打开 。 之所以能做到这点就是因为用户机器上安装 Office后会在浏览器中注册对应的 MIME资源类型 。 比如说 Word文件的
MIME类型是 Application/msword( 前者是 MIME类型,
后者是 MIME子类 ),Excel文件的 MIME资源类型是
Application/msexcel。
事实上,凡是浏览器能处理的所有资源都有对应的 MIME资源类型 。 在与服务器的交互中,浏览器就是根据所接受数据的 MIME类型来判断要进行什么样的处理,对 HTML,JPG等文件浏览器直接将其打开,对 Word、
Excel等浏览器自身不能打开的文件则调用相应方法打开 。 对没有标记 MIME类型的文件,浏览器则根据其扩展名和文件内容猜测其类型 。 如果浏览器无法猜出,
则将它作为 Application/octet-stream。
ContentType属性的默认值为 text/HTML,表示浏览器将代码解释为普通 HTML页面并显示给用户 。 常用的类型有是 text/plain,image/gif,image/jpeg、
Application/msword,Application/msexcel等 。
(4) Expire属性
Expire属性取值为整数,用来确定在浏览器上缓冲存储的页面距离过期还有多少时间 ( 以分钟为单位 ) 。 如果用户在某个页面过期之前返回该页,就会显示缓冲区中的页面,否则将从服务器重新读取该页面 。
这是一个较实用的属性,当客户通过 ASP的登录页面进入 Web站点后,应该利用该属性使登陆页面立即过期 ( 如设置 Response.Expire=0),以确保安全 。
(5) ExpireAbsolute属性
ExpiresAbsolute属性指定缓存于浏览器中页面的确切到期日期和时间 ( Expires属性指定的是相对过期时间 ) 。 在未到期之前,若用户返回到该页,该缓存中的页面就显示 。 如果未指定时间,该主页在当天午夜到期 。 如果未指定日期,则该主页在脚本运行当天的指定时间到期 。 如下述代码指定页面在 2003年
6月 20日上午 10:00分 30秒到期 。
<%Response.ExpiresAbsolute=#June 20,2003 10:00:30# %>
(6) Isclientconnected属性
Isclientconnected属性用于确定客户端浏览器在服务器最后一次处理 Response.Write命令后,是否与 Web服务器保持连接 。 可以利用这个属性检查浏览器和服务端是否仍然连接,来控制脚本是否停止执行 。
当然,IsClientConnected 属性仅仅在上一个
Response.Write调用时浏览器仍然处于连接状态才有效 。 如果运行了一个运行时间很长的脚本程序而没有输出任何东西,那么这个属性也就不会产生作用 。
(7) PICS属性
PICS属性用于设置网页的 PICS标签 ( PICS-
LABEL) 。 PICS标签可以指明某一网页的内容级别,比如暴力或色情的程度等 。 通常,可以使用 PICS标签来为 Web站点的内容分级,一些浏览器或其他的一些工具通过寻找这个标签来决定是否显示一个页面 。 语法格式如下:
Response.PICS=Value
其中 Value表示 PICS标签的文本内容 。
(8) Status属性
Status属性用于设置由服务器返回的状态行,通常为当客户端浏览器在浏览过程中出现错误时需执行的状态值 。
3,Reponse对象的 Cookies集合
Cookies集合是 Response对象和 Request对象的一项经常用到的集合 。 我们将在下一课中再作介绍 。
7.2.3 Server对象及其使用
1,Server对象的属性
2,Server对象的方法在 ASP中,当处理 Web服务器上的特定任务,特别是一些与服务器的环境和处理活动有关的任务时,需要用到 Server对象 。 Server对象通过属性和方法来访问 Web服务器,从而实现对数据,网页,外部对象,
组件的管理 。
1,Server对象的属性
ASP的 Server对象只有一个属性,ScriptTimeout
属性 。 当服务器很忙,或者服务器运行的某个组件陷入循环,或者程序本身具有逻辑上的错误,可能使
ASP页面运行很长时间甚至陷入死循环 。 出于这样的考虑,使用 ScriptTimeout属性可以决定一个页面中脚本的运行时间,它的时间单位是秒,缺省为 90秒 。
【 例 7-5】 在浏览器中 显示 目前 ASP程序允许运行的最长时间 。
ASP程序 7_5.asp的代码如下:
<HTML>
<HEAD><TITLE>显示此页面运行的最长时间 </TITLE></HEAD>
<BODY>
<P align="center">Server对象的 ScriptTimeout属性应用 <P>
<%
Response.write "此页面运行的最长时间是 "
Response.write Server.ScriptTimeout
Response.write "秒 "
%>
</BODY>
</HTML>
ScriptTimeout属性的设置必须在 ASP程序之前,
否则为无效设置 。
【 例 7-6】 设置 ScriptTimeout属性为 120秒,并在浏览器中显示 ASP程序允许运行的最长时间,如图 7-8
所示 。
<%Server.ScriptTimeout=120%>
<HTML>
<HEAD><TITLE>显示此页面运行的最长时间 </TITLE></HEAD>
<BODY>
<P align="center">Server对象的 ScriptTimeout属性应用 <P>
<%
Response.write "此页面运行的最长时间是 "
Response.write Server.ScriptTimeout
Response.write "秒 "
%>
</BODY>
</HTML>
输出结果 。
2,Server对象的方法
Server 对 象 共 有 四 个 方 法,它 们 分 别 是
CreateObject方法,MapPath方法,HTMLEncode方法和
URLEncode方法,下面将逐一介绍 。
(1) CreateObject方法
CreateObject方法是 Server对象中最重要,最常用的方法,可以说如果没有 CreateObject方法则 ASP的功能将会受到很大的限制 。
CreatObject方法用于创建已经在服务器上注册的服务器组件 ( ActiveX控件 ) 的实例 。 包括所有的 ASP
内置的组件,Ad Rotator,Browser Capabilities、
Page Counter等等,也可以是第三方提供的 ActiveX组件 。
组件只有在创建了实例以后才可以使用,这些组件扩展了 ASP的功能 ( 组件将在第 10课中介绍 ) 。 其语法格式如下:
Server.CreateObject( ObjectParameter)
其中,ObjectParameter是要创建的 ActiveX组件类型 。 ObjectParameter的格式如下:
[出版商名,]组件名 [.版本号 ]
例如,创建一个 ADODB组件的实例,可以使用下述代码:
<%Set myConn=Server.CreateObject("ADODB.Connection")%>
说明:
① 在使用 CreateObject创建 ActiveX组件时,关键字 Set一定不能丢失,否则在使用所定义的对象时会发生错误,并且这种错误在用 CreateObject创建组件时并不能被发现,只有在第一次调用该组件时系统才报错,且无详细的错误描述 。
② CreateObject方法创建的对象的作用域默认为页作用域 。 即:当前 ASP文件完成后,该对象即由服务器自动清除 。 要改变作用域可使用 Session对象保留该组件,直到 Session对象的生命期结束 。
③ 当所创建的对象不再需要时,应当释放其所占的系统资源 。 通常使用 Nothing来消除实例对象 。 例如要释放一个名为 myConn的对象,可采用下面的代码:
<%Set myConn=Nothing%>
④ 试图创建与 ASP内建对象同名的实例对象都是错误的 。 例如,下述代码将返回错误:
<%Set Response=Server.CreateObject("Response")%>
第 10课中将介绍 CreateObject方法创建对象实例的步骤和方法 。
(2) MapPath方法
Server对象的 MapPath方法可以将指定的虚拟路径转换成实际的物理路径,所谓的虚拟路径是指 Web
服务器上的相对路径 。 其语法格式如下:
Realpath=Server.MapPath("UnrealPath")
其中,RealPath是指被转换成的文件实际物理路径,UnrealPath是指要进行转换的文件虚拟路径,且在虚拟路径中字符,/” 与字符,\” 被视为相同 。
【 例 7-7】 应用 Server对象的 MapPath方法转换路径 。
ASP程序 7_7.asp的代码如下:
<HTML>
<HEAD><TITLE>Server对象的 MapPath方法转换路径 </TITLE></HEAD>
<BODY>
<P align="center">Server对象的 MapPath方法转换路径 <P>
<TABLE ALIGN=Center BORDER=0>
<%
Response.write "<tr><td>服务器的根目录是,"
Response.write "<td>" & Server.MapPath("/")
Response.write "<tr><td>当前目录的上层目录是,"
Response.write "<td>" & Server.MapPath("../")
Response.write "<tr><td>当前目录是,"
Response.write "<td>" & Server.MapPath("./")
Response.write "<tr><td>当前的文件是,"
Response.write "<td>" & Server.MapPath("7_7.asp")
%>
</BODY>
</HTML> 输出结果 。
(3) HTMLEncode方法
Server对象的 HTMLEncode方法用于对指定的字符串进行 HTML编码,从而使该字符串以所需的形式显示出来 。 其语法格式如下:
Server.HTMLEncode(HtmlString)
其中,HtmlString是需要进行 HTML编码的字符串 。
在 ASP编程过程中,有时为了特殊的需要,不得不向屏幕输出一些 HTML或 ASP语言的特殊标记,如 <、
<%和 >等等标记符号,这时则需要用到 Server对象的
HTMLEncode方法 。
【 例 7-8】 使用 HTMLEncode方法讲解 HTML语言定义居中的 <P align="Center"> </P>的 显示效果 。 代码如下:
<HTML>
<HEAD><TITLE>Server对象的 HTML方法 </TITLE></HEAD>
<BODY>
<P align="center">Server对象的 HTML方法 <p>
<%
Response.write "在 ASP网页中,需要居中显一行文本时可使用如下格式,"
Response.write "<P align=center>"
Response.write server.HTMLEncode("<P align=")
Response.write "&quot;Center&quot;"
Response.write server.HTMLEncode(">欲输出的文本 </P>")
%>
</p>
</BODY>
</HTML>
请试一试不用 HTMLEncode方法的情形 。
(4) URLEncode方法
Server对象的 URLEncode方法可以用来将用户指定字符串用 URL编码方式重新编码,URLEncode方法常用于把 <A>元素或其它链接的值写到 ASP网页 。 例如要在查询字符串 ( 参见第 8课 ) 中建立一系列的连接,
你会见到如下的字符串:
Http%3A%2F%2Fwww%2Ezzuli%2Eedu%2Ecn%3CBR%3E
这就是利用 URLEncode方法进行编码得到的 。
【 例 7-9】 将所 显示 的字符串变成了 URLEncode方法编码的字符串 。 代码如下:
<HTML>
<HEAD><TITLE>Server对象的 URLEncode方法 </TITLE></HEAD>
<BODY>
<P align="center">Server对象的 URLEncode方法示例 <P>
<%
Response.write ("嘿 ! 你好吗?"&"<BR>")
Response.write ("Http://www.zzuli.edu.cn"&"<BR>")
Response.write Server.UrlEncode("嘿 ! 你好吗?"&"<BR>")
Response.write Server.UrlEncode("Http://www.zzuli.edu.cn"&"<BR>")
%>
</BODY>
</HTML>
7.3 上机练习
【 练习 7-1】 编写一个 ASP程序,在浏览器上输出一个,*” 构成的菱形,如图 7-12所示 。
图 7-12,*”构成的菱形代码如下:
<HTML>
<HEAD><TITLE>输出一个,*” 构成的菱形示例 </TITLE></HEAD>
<BODY>
<P align="center">输出一个,*” 构成的菱形示例 <HR>
<CENTER>
<%
dim x(8)
x(0)="*"
x(1)="*&nbsp&nbsp*"
x(2)="*&nbsp&nbsp&nbsp&nbsp*"
x(3)="*&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp*"
x(4)="*&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp*"
x(5)="*&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp*"
x(6)="*&nbsp&nbsp&nbsp&nbsp*"
x(7)="*&nbsp&nbsp*"
x(8)="*"
For I=0 to 8
Response.write x(I) & "<br>"
next
%>
</BODY>
</HTML>
显示代码也可以写为如下形式:
<HTML>
<HEAD><TITLE>输出一个,*” 构成的菱形示例 </TITLE></HEAD>
<BODY>
<P align="center">输出一个,*” 构成的菱形示例 <HR>
<CENTER>
<%
dim x(8)
x(0)="*"
for j=1 to 4
p="*"
for k=1 to 2 * j
p=p & "&nbsp"
next
x(j)=p & "*"
x(8-j)=p & "*"
next
x(8)="*"
For I=0 to 8
Response.write x(I) & "<br>"
next
%>
</BODY>
</HTML>
【 练习 7-2】 编写一个 ASP程序,判断 当前日期是否为星期日,如果是则输出,你好 ! 今天该休息了,,
否则,输出,你好 ! 要好好工作啊 !,,代码如下:
<HTML>
<HEAD><TITLE>根据日期输出不同的问候语示例 </TITLE></HEAD>
<BODY>
根据日期输出不同的问候语示例 <HR>
<P align="center"><FONT size=5 face=华文彩云 color= blue>
<%
Dim x
x=WeekDay(date)
if x=1 Or x=7 then
Response.write "你好 ! 今天是 " & weekdayname(x) & "<p>"
Response.write "<P align=center> 该休息了 ! "
else
Response.write "你好 ! 今天是 " & weekdayname(x) & "<p>"
Response.write "<P align=center> 要好好工作啊 ! "
end if
%>
</FONT>
</BODY>
</HTML>