2024年3月7日发(作者:)

Response对象

Response对象的作用是在向浏览器发送数据。将Response对象与上一节介绍的接收数据的Request对象一起使用,就可以达到服务端-浏览器间的交互,这也是实现动态网页的基础。

Response对象的属性及方法在ASP中极其常用。下面几节将针对Response对象的常用属性、方法及集合进行详细讲解,对于不常用的也给出了说明。

一、Response对象的常用属性

1、

Buffer属性

其值为布尔型,即只有True和False两种情况,表明输出的Asp页是否被缓冲, 使用Buffer属性后,只有当前页的所有服务器脚本处理完毕或者调了 Flush 或 End 方法后,服务器才将响应发送给浏览器,在服务器将部分响应发送给浏览器后就不能再设置 Buffer 属性,因此通常在 .asp 文件的第一行调用 。

设置Buffer属性方法如下:

<%=True %>

2、

ContentType属性

ContentType 属性指定服务器响应的 HTTP 内容类型。如果未指定

ContentType,默认为 text/HTML。即在服务器响应的 HTTP中显示content-type:text/html。如果要用到特殊的ContentType属性,应按照以下示例中的方式调用:

<%tType="text/css" %>

3、

Charset属性

Charset属性用于设置字符集的名称并将其添加到内容类型标题(content-type)的后面,若未在Asp页中设置Charset属性,则content-type为content-type:text/html,若将Charset属性设置为"gb2312"则content-type为content-type:text/html; charset=gb2312。

设置Charset属性的方法如下:

<% t="gb2312" %>

小技巧:

无论设置的字符集是否有效,该设置都会将设置的字符集写到内容类型标题(content-type)后面,所以在使用该属性时要保证设置字符集的有效性。

如果页面包含多个Charset设置,则以最后一次被执行的Charset设置为准。

常用的字符集还有ASCII Latin1 gb2312 big5 gbk gb18030 Unicode等,如果要做国际化网站建议使用Unicode。

4、

Expires属性

Expires属性用于指定在浏览器缓存页面距超时还有多少时间,若用户在指定时间内回到此页,服务器会将缓存的页面返回给用户,设置的数字的单位是分。

设置Expires属性的方法如下:

<% s=3 %>

上例表示本页三分钟后超时。

小技巧:

设置s=0则使缓存页浏览后立即超时,这样做可以确保页面信息的安全。

5、

ExpiresAbsolute属性

ExpiresAbsolute属性与Expires属性类似,只是其值应设置为一个具体时间。

下例表示缓存页到2006年10月30日 20:22:00过期:

<% sAbsolute=#Oct 30,2006 20:22:00# %>

6、

IsClientConnected属性

该属性为只读属性,用于判断上次向浏览器输出响应后,浏览器是否仍和服务器连 接。

7、

CacheControl属性

CacheControl属性用于决定代理服务器是否能缓存ASP生成的输出,默认值为False。如果将其设置为True将会大大降低网站的安全性。

8、

Pics属性

将PICS标记的值添加到响应的标题的PICS标记字段中,指定某一网页的内容级 别,如:暴力、色情、儿童不宜等。

该属性的使用方法:

<%("相关字符串")%>

9、

Status属性

Status属性服务器返回的状态行的值。

该属性的使用方法:

<%="状态描述字符串"%>

二、Response对象的常用方法

1、Write方法

将变量作为字符串写入当前的HTTP输出

几种使用方法:

<%"输出内容"%>

或:

<%("输出内容")%>

如果要输出变量则用如下方法:

<%

Dim s

s="输出内容"

(s)

%>

小技巧:

在直接输出到浏览器时通常可用

<%= s %>

来代替

<% (s) %>

小技巧:

如要输出一个”,可以将”用两个双引号代替,例如:

<% (””””) %>

在浏览器上输出的内容就是”了

小技巧:

对于HTML与服务器变量的交替输出,请不要将HTML代码与输出语句混写,例如:

<% For i=1 to 10 %>

<% =i %>

<% Next %>

此类情况最好写成:

<% For i=1 to 10

” & i & ”

Next %>

因为在前一种写法中服务器端解析器不断在HTML与VBScript中跳转将会很大程度上影响执行速度。

小技巧:

对于输出大量连接而成的字符串,通常使用以下方法:

<%

For i=1 to 10

a=a &

i

Next

(a)

%>

但如果面对很大的数量,如

<%

For i=1 to 50000

a=a &

i

Next

(a)

%>

的情况下,执行会极其之慢(大概12秒)。

这是因为VBScript在申请字符串变量的内存是要浪费大量时间。

但可以通过以下代码提高效率,使执行时间接近300毫秒。

<%

a=Spc(50000)

For i=1 to 50000

a=mid( a , i , 1)

Next

(a)

%>

2、Redirect方法

将页面转向一个URL:

使用方法:

<%

ct (””)

%>

则页面将跳转到

小技巧:

网页的重定向也可以用Server对象的Transfer方法。

但Server. Transfer与ct 有所不同。

ct可以转向任意网页、而Server. Transfer只能转向本虚拟目录下的网页。

ct不可以传递网页参数、而Server. Transfer却可以传递参数。

ct跳转后浏览器中显示的URL也随之改变、而Server.

Transfer却仍显示原来的URL。

3、End方法

End 方法使 Web 服务器停止处理脚本并返回当前结果。文件中剩余的内容将不被处理。如果 已设置为 TRUE,则调用

将缓冲输出。

例如:

<%

"1"

()

"2"

%>

则浏览器中输出的结果为1

End方法执行后即按本页执行完毕处理。

小技巧:

在网页中有错误,但还不能确定错误所在位置时。

可以添加一个并通过移动其位置,起到调试程序的目的。

4、Flush方法

Flush 方法立即发送缓冲区中的输出。如果没有将

设置为 TRUE,则该方法将导致运行时错误。

5、Clear 方法

可以用 Clear 方法清除缓冲区中的所有 HTML 输出。但 Clear 方法只清除响应正 文而不清除响应标题。可以用该方法处理错误情况。但

是如果没有将 设置为 TRUE,则该方法将导致运行时错误。

6、BinrayWrite方法

将信息写入到当前HTTP输出中,并且不进行任何字符集转换。通常用于输出图片文件。

7、AppendToLog方法

在请求的Web服务器日志条目后添加字符串。

8、AddHeader方法

从名称到值设置HTML标题。

二、Response对象的常用集合

Response对象的集合只有一个,就是cookies,Cookies 集合用于设置

cookie 的值。若指定的 cookie 不存在,则创建它。若存在,则设置新的值并且将过去存储的值删去。

语法

s(cookie)[(key)|.attribute]=value

这里的

cookie 是指定 cookie 的名称。而如果指定了

key,则该 cookie 就是一个字典。attribute 指定 cookie 自身的有关信息。attribute 参数可以是下列之一 :

1、Domain

只写属性,该值若被指定,则 cookie 将被发送到对该域的请求中去。

2、Expires

只写属性,该值指定 cookie 的过期日期。为了在会话结束后将 cookie

存储在客户端磁盘上,必须设置该日期。若此项属性的设置未超过当前日期,则在任务结束后 cookie 将到期。

3、HasKeys

该值指定 cookie 是否包含关键字。

4、Path

该值若被指定,则 cookie 将只发送到对该路径的请求中。如果未设置该属性,则使用应用程序的路径。

5、Secure

用于设定Cookies是否在一个安全的渠道传递。当一个安全渠道没有在HTTP首页被发现,Cookies信息将不被发送。

下面给出一个cookie的使用示例:

<%

s("Eice")("UserName")="admin" ''设置名为Eice的cookie的UserName字段的值

s("Eice")("PassWord")="admin" ''设置名为Eice的cookie的PassWord字段的值

(s("Eice")("UserName"))''取出名为Eice的cookie的UserName字段的值

(s("Eice")(" PassWord "))''取出名为Eice的cookie的UserName字段的值

%>

在ASP中操作HTTP报头方法分析

我们已经在几处见到ASP如何创建或修改在响应页面请示时被发送到客户的HTTP报头。在Response对象中有几个属性和方法可帮助我们做到一点。下面是一些报头方法:

· 控制缓存和有效期。

· 创建状态和定制的HTTP报头。

· 指定MIME类型或内容类型。

· 添加PICS标签。

接下来将简要地研究每一个方面。可在“Response Object”主页(show_)上,单击相关属性名或方法名,来检查我们所说的属性和方法。

1. 缓存和“到期”ASP网页

用户的浏览器以及他们和服务器这间的任一代理服务器,都可以缓存HTML和用ASP创建的网页。当用户随后请求页面时,浏览器就发送一个“最新修改”的请求到服务器(使用一个包含缓存版本的日期的HTTP_IF_MODIFIED_SINCE报头),询问网页是否已被修改。

若没有被修改,服务器应用状态码和消息“304 Not Modified”来响应,浏览器将使用缓存的内容而不会通过网络下载一个副本。若已经存在已修改的版本,它就会与“200 OK”状态码和消息一道被发送出去。

1) ontol属性

其他的一些因素也会影响这一处理过程。然而,任一被网页使用的网络路由内的代理服务器(一般位于客户机端),能被通过设置ontrol属性为Private来放弃缓存网页。在ASP 3.0中对ASP网页这是缺省的,不用设置。但在网页为个别访问者特别定制时尤其有用。这可以阻止别的在同一网络上的用户进入同一网页。当CacheControl的属性值被设定为Public时,允许服务器缓存网页。注意,一些代理服务器可能表现得不尽相同,或忽视或越过这个报头。

在IE4中,在代理服务器缓存可用时,有可能得到一个虚假的“This page has expired”消息。我们已提供了一个网页(expiretest_),可以通过自己的代理服务器在网络上做试验,来检查这一属性的影响。可以通过在“Response Object”主页中单击“Response. CacheControl”链接来显示这个网页。如下图所示:

这一页面提交到expiretest_网页时,能够设置ontrol属性,然后在网页中插入值和脚本被执行的时间:

<%

If (“public”) = “on” Then ‘Cache-Control check box was

ticked

ontrol = “Public”

Else

ontrol = “Private”

End If

%>

<HTML>

...

Cache-Control is: <B><% = ontrol %></B><P>

Value in text box is: <B><%

(“textbox”) %>

<%

Right(“0” & Hour(Now),2) & “:” & Right(“0” &

Minute(Now),_

& 2) & “:” & Right(“0” & Second(Now),2)

%></B>

通过单击浏览器上的“Back”和“Forward”,能看到代码是自动执行还是使用缓存的副本。

2) s和sAbsolute属性

控制缓存的网页存放时间的两个属性为Response对象的Expires和ExpriesAbsolute属性。s定义了风页在从缓存区被丢弃前应保持有效的时间长度,以创建以来的分钟数形式表示。ExpiresAbsolute属性为到期时间设置了一个绝对的日期和时间。

我们提供一个命名为addheaders_的例子网页,用于演示如何使用这些属性。在“Response

Object”主页中单击对这两种属性的链接。

在得到的页面中,可加入自己定制的HTTP报头,并可设置一些影响响应的HTTP报头的多种属性。在“提交查询内容”按钮上单击时,页面show_在返回的数据流中添加所选的报头,然后显示用来完成此操作的代码,显示相应的执行时间,可用来检查页面是被缓存还是被再次执行。

show_网页中的代码创建和添加HTTP报头,程序如下:

<%

‘Write HTTP headers before any other output

If (“expires”) = “on” Then _

s = (“expires_value”)

If (“expiresabs”) = “on” Then _

sAbsolute = (“expiresabs_value”)

If (“lastmod”) = “on” Then _

der “LAST-MODIFIED”,

Cstr((“lastmod_value”))

If (“pragma”) = “on” Then _

der “PRAGMA”, CStr((“pragma_value”))

If (“refresh”) = “on” Then _

der “REFRESH”, CStr((“refresh_value”))

If (“addheader”) = “on” And

Len((“addheader_name”)) Then _

der CStr((“addheader_name”)), _

CStr((“addheader_value”))

If (“status”) = “on” Then _

= (“status_value”)

%>

<HTML>

...

... Show code and execution time

...

其余部分仅仅是显示已被执行的代码和执行时间。读者会注意到包含在网页中的定制的报头“PRAGMA”(至今我们还没讨论过)。一些(先前的)代理服务器使用它作为网磁是否应被缓存的指示。缺省是网页被缓冲,除非接受到HTTP报头“PRAGMA=NO-CACHE“。

2. 创建状态码和定制的HTTP报头

可使用先前在实例网页中所看到的Response对象的AddHeader方法来创建自己的状态码或自己喜欢的定制的报头。这一方法需要两个参数:HTTP报头名称或一个包含其值或分配给它的值的字符串。作为一个例子,下面的代码在页面中添加REFRESH报头:

der “REFRESH”, ”60;URL=newpath/”

这等同于客户机端<META>元素:

<META HTTP-EQUIV=”REFRESH”, “60;URL=newpath/”>

换句话说,也可配合Status属性使用AddHeader方法使浏览器载入一个新的页面:

= “302 Object Moved”

der “Location”, “newpath/”

这等同于使用ct方法:

ct “newpath/”

属性可被用来发送一些所需要的状态消息,例如添加如下几行:

= “401 Unauthorized”

der “WWW-Authenticate”, “BASIC”

强制浏览器显示一个用户名/口令对话框,然后使用BASIC验证把它们发送回服务器(将在本系列后续部分看到验证方法)。

3. MIME类型和内容类型

当我们想向浏览器发送一个动态创建的字符串,而且它们自己提供给浏览器时没有直接指明内容类型,而是提供表示是否是磁盘文件的扩展名时,tType是非常有用的。除非特别指定,所有ASP创建的网页缺省都为“text/type”。内容类型的标识符是MIME类型(MIME代表Multi-purpose Internet

Multimedia Extension或Multi-pupose Internet Mail Extension,通常依据上下文来定)。

例如,若发送到客户的数据注解是通过从数据库读二进制值创建的图片,就需要在发送任何内容之前添加合适的CONTENT-TYPE报头:

tType = “image/jpeg”

假如从一个数据库创建一个XML文件,使用MIEM类型“text/xml”;并且如果正在创建一个文本文件可以在文件编辑器中显示或作为一个磁盘文件在客户上被存储起来,使用“text/text”。

4. 添加PICS卷标

属性仅仅是添加一个PICS(Platform for Internet Content system)卷标到页面上,方式与通常用<META>标记所用的方式相同:

QUOT = Chr(34)

StrPicsLabel = “(PICS-1.0” & QUOT &

“/”_

& QUOT & “ 1 gen true comment “ & QUOT _

& “RSACi North America Server” & QUOT & “ for “ & QUOT _

& “” & QUOT & “ on “ & QUOT _

& “1999.08.01T03:04-0500” & QUOT & “ r (n 0 s 0 v 2 l 3))”

(strPicsLabel)

这段代码添加了如下的PICS卷标:

(PICS-1.0 “/” 1 gen true comment

“RSACi

North America Server” for “” on

“1999.08.01T03:04-0500”

r (n 0 s 0 v 2 l 3))

要得到关于PICS的更多的信息,或了解更多的定义页面内容的方式,请检索/站点。

在Internet Service Manager中定义报头

在本系列文章的第一部分,已经说明了如何在Internet Service Manage(MMC插件)应用程序中设置每个Web网站和IIS 5.0目录的属性,这就定义了使用此站点或目录资源发送到客户机的所有请求的HTTP报头,也就提供了使用每个网页中的ASP脚本代码设置这些属性的替代方法。

在Web站点或目录上右击鼠标并选择“Properties”,在其对话框的“HTTP Headers”选项卡中,可设置页面内容有效期的相对时间或绝对日期,定义定制的报头,创建PICS内容等级标签,也可以通过MIME类型映射来定义内容类型。

那么可以看到已创建了自定义的REFRESH HTTP报头,应用于从此目录载入的所有网页。即每一分钟自动地重载(刷新)一次(对于显示棒球比赛的最近比分是非常理想的,但对服务器而言负担太重了)。

要在“MIME Map”框中添加自定义的内容类型映射,只需在“Properties”主对话框中单击“File

Types”按扭把它们添加到清单中即可。

当使用HTTP报头开始试验时,你很快会发现不是所有的浏览器表现都相同,许多浏览器以不同的方式响应不同的HTTP报头,使得可靠地建立一个普遍适用的原则有时极为困难。

2. 使用客户证书

假如设立了一个安全的Web网站或部分内容具有安全机制的网站,可安装一个数字服务器证书,通过允许访问者使用证书中的加密的细节,来验证服务器。每一次对该站点或目录的页面请求,服务器都将发送证书的一个副本,浏览器可检查这个副本以确定正在和谁交谈。

同样,也可设置服务器,要求用户在进入网站时提供一个有效的数字证书。他们可从很多来源获得此证书,例如Verisign()或Thawte Consulting()。读者将在第25章看到这一处理过程的细节。

这些情况都使用了Request对象的ClientCertificate集合的值,本章的实例代码中,已包含了一个显示用户如何使用些集合值的一些方法的页面。

这一网页被命名为,而且其所做的一切就是遍历ClientCertificate集合显示其包含的所有值。可使用以前经常使用的简单代码来完成它,唯一的不同之处就是建立一个HTML表以容纳结果,并将其截为每60个字符一组。

<TABEL CELLPADDING=0 CELLSPACING=0>

<%

For Each keyItem In Certificate()

StrItemValue = Certificate(keyItem)

If Len(strItemValue) > 90 Then strItemValue = Left(strItemValue, 60)

& “..etc.”

“<TR><TD>” & keyItem & “ = “ & strItemValue &

“</TD></TR>”

Next

%>

</TABLE>

使用客户证书重定向

一旦要求所有访问网站或部分网站的浏览者给出的其客户证书,就可以使用其包含的信息来制作我们为此用户创建的网页。例如,可使用他们的证书的Organization条目来自动使他们重定向到该网站的指定部分,使别的访问者重定向到别的地方:

If Certificate(“SubjectO”) = “Wrox Press Inc” Then

ct “/wrox_staff/” ‘Wrox staff site

Else

ct “/public/” ‘Normal public site

End If

相应地,可使用Country条目来使访问者重定向到一个相应的网站:

Select Case Certificate(“SubjectC”)

Case “UK”: ct “uk_/”

Case “DE”: ct “de_/”

Case “FR”: ct “fr_/”

‘... ect.

Case Else: ct “us_/”

End Select

3. 读写二进制数据

有两个方法提供了对从浏览器发送到服务器的HTTP数据流和从服务器返回到浏览器的数据流的二进制数据访问。Read方法可得到指定要读取的字节数的参数,并返回变体类型的数组,其中包含从请求的POST段中得到的字节(例如在ASP的Form集合中数据)。下面的程序读数据的头64个字节:

varContent = Read(64)

假如使用了BinaryRead方法,以后就不能访问ASP的集合。同样,一旦我们采用任何方式引用了集合,就不能使用BinaryRead方法。

把二进制数据写进ASP创建的响应流中也是可能的,可采用BinaryWrite方法。需要给其提供想写到客户的字节的变体类型数组:

Write(varContent)

这些方法都很少使用,除非从一个数据库创建非HTML源才用到这些方法。使用的一个实例就是从数据库读取组成图像的字节,并使用BinaryWrite方法把它发送到客户。

4. 创建定制的日志消息

假如设置了服务器,以W3C Extended Log File Format格式将请求记录到一个文本文件,可使用ToLog方法在日志文件条目的结尾处添加一条消息字符串。若想为特定的网页存储一些值或消息,或在脚本中出现了特定的情况时,这种方式是非常有用的。

例如,通过的Intranet的“stationary order”应用程序,可以记录超过特定的条目数目的雇员的部门号码:

...

If intItemCount > 25 Then

ToLog “Large order from ‘” & strDept & department.”

End If

...

设置扩展的日志

要使用AppendToLog方法,必须激活W3C Extended Log File Format日志设置。该设置方法是,进入Properties对话框中的Web Site选项卡,选中Enable Logging复选框,选择W3C Extended Log File Format并单击Properties按钮,如下图所示:

在出现的Extended Logging Properties对话框中,可选择想包括进日志文件的条目。确保选中URI

Stem,否则AppendToLog方法将失败。

我们提供了一个试图在日志文件中写入一个条目的简单实例页面,可从Request Object主页(show_)中的AppendToLog方法链接处打开它。这一页面所做的全部工作就是创建一个包含当前日期和时间的简单字符串,然后执行AppendToLog方法:

strToAppend = “Page executed on ” & Now

ToLog strToAppend

小结

本文已经开始了对ASP 3.0的研究,而且我们也看到了ASP 3.0如何与Internet Informateion Server

5.0共同工作,以提供一个易用的、高效的创建动态Web网页和Web应用程序的方法。当然,仍有一些地方需要去研究,本章仅仅是学习了ASP内置的两个最基本的对象。

这两个最基本的对象是Request和Response对象,允许我们访问和使用作为客户机/服务器会话一部分的值,无论用户何时从Web网站请求和载入一个网页或资源,这种会话就会进行,意味着Request对象能够提供对用户请求的全部内容的访问,同时Response对象允许创建和修改服务器发回的响应。

这些对象能够通过集合和属性揭示会话的各个部分,并提供了多个能用来检索和修改各段的方法。假如把它们当作分解用户请求和使用相应的内容创建响应的工具,这有助你理解究竟发生了什么。这也将有助于理解各种方法如何影响客户、服务器和正在创建的网页。

内置ASP对象

Application对象

Application对象能用于存储和接受可以被某个应用程序的所有用户都能共享的信息。

集合

ts(key)

在应用程序级定义的所有数据和对象的集合,不使用标识符。Key是该Application的条目的名称。

Objects(key)

使用标识符定义的所有在应用程序级的数据和对象的集合。Key是该Application条目的名称。

事件

当Web服务器被关闭或卸载该应用程序时会激发该事件。该事件会在所有的客户进程结束时执行。

t

当请求该应用程序中的第一个网页时激发该事件。该事件在所有客户进程开始之前执行。

方法

防止其他的用户修改Application对象中的任何变量。

允许其他用户修改Application对象中的变量。

ObjectContext对象

该对象用于控制Active Server Pages的事务处理。事务处理由Microsoft Transaction

Server (MTS)管理。

事件

sactionAbort

由放弃的事务处理事件激发,在脚本完成处理后发生。

sactionCommit

由成功的事务处理事件激发,在脚本完成处理后发生。

方法

rt

显式的放弃一次事务处理。

plete

覆盖前面任何调用rt方法的调用。

Request对象

Request对象用于接受所有从浏览器发往你的服务器的请求内的所有信息。

集合

Certificate(key[SubField])

所有客户证书的信息的集合。对于Key,该集合具有如下的关键字:

Subject 证书的主题。包含所有关于证书收据的信息。能和所有的子域后缀一起使用。

Issuer 证书的发行人。包含所有关于证书验证的信息。除了CN外,能和所有的子域后缀一起使用。

VadidFrom

ValidUntil

SerialNumber

Certificate

证书发行的日期。使用VBScript格式。

该证书不在有效的时间。

包含该证书的序列号。

包含整个证书内容的二进制流,使用ASN.1格式。

对于SubField,Subject和Issuer关键字可以具有如下的子域后缀:(比如:SubjectOU或IssuerL)

C

O

OU

CN

L

S

T

GN

I

起源国家。

公司或组织名称。

组织单元。

用户的常规名称。

局部。

州(或省)。

个人或公司的标题。

给定名称。

初始。

当文件(VBScript使用)或(Jscript使用)通过使用#INCLUDE导向包含在你的Active Server Page里时,下面两个标志可以使用:

ceCertPresent 指明客户证书是否存在,其值为TRUE或

FALSE。

ceUnrecongnizedIssure 指明在该链表中的最后的证书的发行者是否未知,其值为TRUE或FALSE。

s(Cookie[(key).Attribute])

Cookie的集合。允许获得浏览器的Cookie。Cookie指明返回那一个Cookie。Key用于从Cookie字典中返回具有某一关键字的Cookie值。对于Attribute,你能使用属性HasKeys来确定某一Cookie是否具有子关键字。HasKeys的值为TRUE或FALSE。

(Parameter)[(Index).Count]

填写在HTML的表单中所有的数据的集合。Parameter是在HTML表单中某一元素的名称。当某一参数具有不止一个值(比如,当在

评论列表(有0条评论)
    福州电脑网_福州电脑维修_福州电脑之家_福州iThome

    福州电脑网_福州电脑维修_福州电脑之家_福州iThome

    福州电脑维修网(fzithome.com)专业的电脑维修,笔记本维修,上门维修各种电脑,笔记本,平板等,快速上门.电脑知识频道内容覆盖:计算机资讯,电脑基础应用知识,各种电脑故障维修学习,电脑外设产品维修维护,病毒,软件,硬件,常识.