Response对象.docx
《Response对象.docx》由会员分享,可在线阅读,更多相关《Response对象.docx(28页珍藏版)》请在冰点文库上搜索。
Response对象
Response对象
Response对象的作用是在向浏览器发送数据。
将Response对象与上一节介绍的接收数据的Request对象一起使用,就可以达到服务端-浏览器间的交互,这也是实现动态网页的基础。
Response对象的属性及方法在ASP中极其常用。
下面几节将针对Response对象的常用属性、方法及集合进行详细讲解,对于不常用的也给出了说明。
一、Response对象的常用属性
1、 Buffer属性
其值为布尔型,即只有True和False两种情况,表明输出的Asp页是否被缓冲, 使用Buffer属性后,只有当前页的所有服务器脚本处理完毕或者调了Flush或End方法后,服务器才将响应发送给浏览器,在服务器将部分响应发送给浏览器后就不能再设置Buffer属性,因此通常在.asp文件的第一行调用Response.Buffer。
设置Buffer属性方法如下:
<%Response.Buffer=True%>
2、 ContentType属性
ContentType属性指定服务器响应的HTTP内容类型。
如果未指定ContentType,默认为text/HTML。
即在服务器响应的HTTP中显示content-type:
text/html。
如果要用到特殊的ContentType属性,应按照以下示例中的方式调用:
<%Response.ContentType="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属性的方法如下:
<%Response.Charset="gb2312"%>
小技巧:
无论设置的字符集是否有效,该设置都会将设置的字符集写到内容类型标题(content-type)后面,所以在使用该属性时要保证设置字符集的有效性。
如果页面包含多个Charset设置,则以最后一次被执行的Charset设置为准。
常用的字符集还有ASCIILatin1gb2312big5gbkgb18030Unicode等,如果要做国际化网站建议使用Unicode。
4、 Expires属性
Expires属性用于指定在浏览器缓存页面距超时还有多少时间,若用户在指定时间内回到此页,服务器会将缓存的页面返回给用户,设置的数字的单位是分。
设置Expires属性的方法如下:
<%Response.Expires=3%>
上例表示本页三分钟后超时。
小技巧:
设置Response.Expires=0则使缓存页浏览后立即超时,这样做可以确保页面信息的安全。
5、 ExpiresAbsolute属性
ExpiresAbsolute属性与Expires属性类似,只是其值应设置为一个具体时间。
下例表示缓存页到2006年10月30日20:
22:
00过期:
<%Response.ExpiresAbsolute=#Oct30,200620:
22:
00#%>
6、 IsClientConnected属性
该属性为只读属性,用于判断上次向浏览器输出响应后,浏览器是否仍和服务器连 接。
7、 CacheControl属性
CacheControl属性用于决定代理服务器是否能缓存ASP生成的输出,默认值为False。
如果将其设置为True将会大大降低网站的安全性。
8、 Pics属性
将PICS标记的值添加到响应的标题的PICS标记字段中,指定某一网页的内容级 别,如:
暴力、色情、儿童不宜等。
该属性的使用方法:
<%Response.Pics("相关字符串")%>
9、 Status属性
Status属性服务器返回的状态行的值。
该属性的使用方法:
<%Response.Status="状态描述字符串"%>
二、Response对象的常用方法
1、Write方法
将变量作为字符串写入当前的HTTP输出
几种使用方法:
<%Response.Write"输出内容"%>
或:
<%Response.Write("输出内容")%>
如果要输出变量则用如下方法:
<%
Dims
s="输出内容"
Response.Write(s)
%>
小技巧:
在直接输出到浏览器时通常可用
<%=s%>
来代替
<%Response.Write(s)%>
小技巧:
如要输出一个”,可以将”用两个双引号代替,例如:
<%Response.Write(””””)%>
在浏览器上输出的内容就是”了
小技巧:
对于HTML与服务器变量的交替输出,请不要将HTML代码与输出语句混写,例如:
<%Fori=1to10%>
<%=i%>
<%Next%>
此类情况最好写成:
<%Fori=1to10
Response.Write ””&i&””
Next%>
因为在前一种写法中服务器端解析器不断在HTML与VBScript中跳转将会很大程度上影响执行速度。
小技巧:
对于输出大量连接而成的字符串,通常使用以下方法:
<%
Fori=1to10
a=a& i
Next
Response.Write(a)
%>
但如果面对很大的数量,如
<%
Fori=1to50000
a=a& i
Next
Response.Write(a)
%>
的情况下,执行会极其之慢(大概12秒)。
这是因为VBScript在申请字符串变量的内存是要浪费大量时间。
但可以通过以下代码提高效率,使执行时间接近300毫秒。
<%
a=Spc(50000)
Fori=1to50000
a=mid(a,i,1)
Next
Response.Write(a)
%>
2、Redirect方法
将页面转向一个URL:
使用方法:
<%
Response.ReDirect(””)
%>
则页面将跳转到
小技巧:
网页的重定向也可以用Server对象的Transfer方法。
但Server.Transfer与Response.ReDirect有所不同。
Response.ReDirect可以转向任意网页、而Server.Transfer只能转向本虚拟目录下的网页。
Response.ReDirect不可以传递网页参数、而Server.Transfer却可以传递参数。
Response.ReDirect跳转后浏览器中显示的URL也随之改变、而Server.Transfer却仍显示原来的URL。
3、End方法
End方法使Web服务器停止处理脚本并返回当前结果。
文件中剩余的内容将不被处理。
如果Response.Buffer已设置为TRUE,则调用Response.End将缓冲输出。
例如:
<%
Response.Write"1"
Response.End()
Response.Write"2"
%>
则浏览器中输出的结果为1
End方法执行后即按本页执行完毕处理。
小技巧:
在网页中有错误,但还不能确定错误所在位置时。
可以添加一个Response.End并通过移动其位置,起到调试程序的目的。
4、Flush方法
Flush方法立即发送缓冲区中的输出。
如果没有将Response.Buffer设置为TRUE,则该方法将导致运行时错误。
5、Clear方法
可以用Clear方法清除缓冲区中的所有HTML输出。
但Clear方法只清除响应正 文而不清除响应标题。
可以用该方法处理错误情况。
但是如果没有将Response.Buffer 设置为TRUE,则该方法将导致运行时错误。
6、BinrayWrite方法
将信息写入到当前HTTP输出中,并且不进行任何字符集转换。
通常用于输出图片文件。
7、AppendToLog方法
在请求的Web服务器日志条目后添加字符串。
8、AddHeader方法
从名称到值设置HTML标题。
二、Response对象的常用集合
Response对象的集合只有一个,就是cookies,Cookies集合用于设置cookie的值。
若指定的cookie不存在,则创建它。
若存在,则设置新的值并且将过去存储的值删去。
语法
Response.Cookies(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的使用示例:
<%
Request.Cookies("Eice")("UserName")="admin" ''设置名为Eice的cookie的UserName字段的值
Request.Cookies("Eice")("PassWord")="admin" ''设置名为Eice的cookie的PassWord字段的值
Request.Write(Request.Cookies("Eice")("UserName"))''取出名为Eice的cookie的UserName字段的值
Request.Write(Request.Cookies("Eice")("PassWord"))''取出名为Eice的cookie的UserName字段的值
%>
在ASP中操作HTTP报头方法分析
我们已经在几处见到ASP如何创建或修改在响应页面请示时被发送到客户的HTTP报头。
在Response对象中有几个属性和方法可帮助我们做到一点。
下面是一些报头方法:
·控制缓存和有效期。
·创建状态和定制的HTTP报头。
·指定MIME类型或内容类型。
·添加PICS标签。
接下来将简要地研究每一个方面。
可在“ResponseObject”主页(show_response.asp)上,单击相关属性名或方法名,来检查我们所说的属性和方法。
1.缓存和“到期”ASP网页
用户的浏览器以及他们和服务器这间的任一代理服务器,都可以缓存HTML和用ASP创建的网页。
当用户随后请求页面时,浏览器就发送一个“最新修改”的请求到服务器(使用一个包含缓存版本的日期的HTTP_IF_MODIFIED_SINCE报头),询问网页是否已被修改。
若没有被修改,服务器应用状态码和消息“304NotModified”来响应,浏览器将使用缓存的内容而不会通过网络下载一个副本。
若已经存在已修改的版本,它就会与“200OK”状态码和消息一道被发送出去。
1)Response.CacheContol属性
其他的一些因素也会影响这一处理过程。
然而,任一被网页使用的网络路由内的代理服务器(一般位于客户机端),能被通过设置Response.CacheControl属性为Private来放弃缓存网页。
在ASP3.0中对ASP网页这是缺省的,不用设置。
但在网页为个别访问者特别定制时尤其有用。
这可以阻止别的在同一网络上的用户进入同一网页。
当CacheControl的属性值被设定为Public时,允许服务器缓存网页。
注意,一些代理服务器可能表现得不尽相同,或忽视或越过这个报头。
在IE4中,在代理服务器缓存可用时,有可能得到一个虚假的“Thispagehasexpired”消息。
我们已提供了一个网页(expiretest_form.asp),可以通过自己的代理服务器在网络上做试验,来检查这一属性的影响。
可以通过在“ResponseObject”主页中单击“Response.CacheControl”链接来显示这个网页。
如下图所示:
这一页面提交到expiretest_result.asp网页时,能够设置Response.CacheControl属性,然后在网页中插入值和脚本被执行的时间:
<%
IfRequest.Form(“public”)=“on”Then‘Cache-Controlcheckboxwasticked
Response.CacheControl=“Public”
Else
Response.CacheControl=“Private”
EndIf
%>
<HTML>
...
Cache-Controlis:
<B><%=Response.CacheControl%></B><P>
Valueintextboxis:
<B><%Response.WriteRequest.Form(“textbox”)%>
<%
Response.WriteRight(“0”&Hour(Now),2)&“:
”&Right(“0”&Minute(Now),_
&2)&“:
”&Right(“0”&Second(Now),2)
%></B>
通过单击浏览器上的“Back”和“Forward”,能看到代码是自动执行还是使用缓存的副本。
2)Response.Expires和Response.ExpiresAbsolute属性
控制缓存的网页存放时间的两个属性为Response对象的Expires和ExpriesAbsolute属性。
Response.Expires定义了风页在从缓存区被丢弃前应保持有效的时间长度,以创建以来的分钟数形式表示。
ExpiresAbsolute属性为到期时间设置了一个绝对的日期和时间。
我们提供一个命名为addheaders_form.asp的例子网页,用于演示如何使用这些属性。
在“ResponseObject”主页中单击对这两种属性的链接。
在得到的页面中,可加入自己定制的HTTP报头,并可设置一些影响响应的HTTP报头的多种属性。
在“提交查询内容”按钮上单击时,页面show_headers.asp在返回的数据流中添加所选的报头,然后显示用来完成此操作的代码,显示相应的执行时间,可用来检查页面是被缓存还是被再次执行。
show_headers.asp网页中的代码创建和添加HTTP报头,程序如下:
<%
‘WriteHTTPheadersbeforeanyotheroutput
IfRequest.Form(“expires”)=“on”Then_
Response.Expires=Request.Form(“expires_value”)
IfRequest.Form(“expiresabs”)=“on”Then_
Response.ExpiresAbsolute=Request.Form(“expiresabs_value”)
IfRequest.Form(“lastmod”)=“on”Then_
Response.AddHeader“LAST-MODIFIED”,Cstr(Request.Form(“lastmod_value”))
IfRequest.Form(“pragma”)=“on”Then_
Response.AddHeader“PRAGMA”,CStr(Request.Form(“pragma_value”))
IfRequest.Form(“refresh”)=“on”Then_
Response.AddHeader“REFRESH”,CStr(Request.Form(“refresh_value”))
IfRequest.Form(“addheader”)=“on”AndLen(Request.Form(“addheader_name”))Then_
Response.AddHeaderCStr(Request.Form(“addheader_name”)),_
CStr(Request.Form(“addheader_value”))
IfRequest.Form(“status”)=“on”Then_
Response.Status=Request.Form(“status_value”)
%>
<HTML>
...
...Showcodeandexecutiontime
...
其余部分仅仅是显示已被执行的代码和执行时间。
读者会注意到包含在网页中的定制的报头“PRAGMA”(至今我们还没讨论过)。
一些(先前的)代理服务器使用它作为网磁是否应被缓存的指示。
缺省是网页被缓冲,除非接受到HTTP报头“PRAGMA=NO-CACHE“。
2.创建状态码和定制的HTTP报头
可使用先前在实例网页中所看到的Response对象的AddHeader方法来创建自己的状态码或自己喜欢的定制的报头。
这一方法需要两个参数:
HTTP报头名称或一个包含其值或分配给它的值的字符串。
作为一个例子,下面的代码在页面中添加REFRESH报头:
Response.AddHeader“REFRESH”,”60;URL=newpath/newpage.asp”
这等同于客户机端<META>元素:
<METAHTTP-EQUIV=”REFRESH”,“60;URL=newpath/newpage.asp”>
换句话说,也可配合Status属性使用AddHeader方法使浏览器载入一个新的页面:
Response.Status=“302ObjectMoved”
Response.Addheader“Location”,“newpath/newpage.asp”
这等同于使用Response.Redirect方法:
Response.Redirect“newpath/newpage.asp”
Response.Status属性可被用来发送一些所需要的状态消息,例如添加如下几行:
Response.Status=“401Unauthorized”
Response.Addheader“WWW-Authenticate”,“BASIC”
强制浏览器显示一个用户名/口令对话框,然后使用BASIC验证把它们发送回服务器(将在本系列后续部分看到验证方法)。
3.MIME类型和内容类型
当我们想向浏览器发送一个动态创建的字符串,而且它们自己提供给浏览器时没有直接指明内容类型,而是提供表示是否是磁盘文件的扩展名时,Response.ContentType是非常有用的。
除非特别指定,所有ASP创建的网页缺省都为“text/type”。
内容类型的标识符是MIME类型(MIME代表Multi-purposeInternetMultimediaExtension或Multi-puposeInternetMailExtension,通常依据上下文来定)。
例如,若发送到客户的数据注解是通过从数据库读二进制值创建的图片,就需要在发送任何内容之前添加合适的CONTENT-TYPE报头:
Response.ContentType=“image/jpeg”
假如从一个数据库创建一个XML文件,使用MIEM类型“text/xml”;并且如果正在创建一个文本文件可以在文件编辑器中显示或作为一个磁盘文件在客户上被存储起来,使用“text/text”。
4.添加PICS卷标
Respnse.Pics属性仅仅是添加一个PICS(PlatformforInternetContentsystem)卷标到页面上,方式与通常用<META>标记所用的方式相同:
QUOT=Chr(34)
StrPicsLabel=“(PICS-1.0”"&“http:
//www.rsac.org/ratingsv01.html”_
"&“1gentruecomment“"_
&“RSACiNorthAmericaServer”"&“for“"_
&“”"&“on“"_
&“1999.08.01T03:
04-0500”"&“r(n0s0v2l3))”
Response.Pics(strPicsLabel)
这段代码添加了如下的PICS卷标:
(PICS-1.0“http:
//www.rsac.org/ratingsv01.html”1gentruecomment“RSACi
NorthAmericaServer”for“”on“1999.08.01T