ASP教程之其他Request和Response技能
问题是他们究竟是喜欢他们是使用软件时,速度快还是速度慢好.(当然在3秒以内).无论是他们输入资料时,查找资料时,分析资料时.request|response|技能如今,来看一下几个利用Request和Response工具的有效技能,包含:
・毗连、缓冲和页面重定向的办理。
・HTTP报头、缓存与“到期”页面的操纵。
・使用客户证书。
・创立定制的日记文件动静。
1.毗连、缓冲和页面重定向的办理
ASP的一个很有效的特性就是利用户可以从一个ASP网页转向到另外一个网页(ASP或HTML),或另外一个源文件(比方一个ZIP文件或文本文件)。这对用户来讲是通明的,实践上是扫瞄器做这个事情。当利用Response.Redirect办法来载进一个新的网页时,实践上是发送回一个特别的HTTP报头到客户。此报头为:
HTTP/1.1302ObjectMoved
Location/newpath/newpage.asp
扫瞄器读到此报头信息,并按Location值的唆使载进页面。这在功效上与在Web页中利用客户端HTML<META>标志不异,比方:
<METAHTTP-EQUIV=”REFRESH”CONTENT=”0;URL=/newpath/newpage.asp”>
这带来的一个成绩是,服务器与用户之间的代办署理服务器大概会供应它本人的包括与新页面的链接的动静,而不是间接载进新页面。并且扫瞄器依据厂商和版本大概做一样的事情。这就往除假定的通明,并且对用户来讲一向收到的是毛病信息,则对你的站点的会见变得对照贫苦。
在发送诸如文本或HTML等任何页面内容后,我们就不克不及再利用Redirect办法。但是,一个看起来可以限定“代办署理服务器影响”的办法是,先断定没有输入(包含HTTP报头)被发送到客户。在ASP2.0中,必需翻开缓冲,然后利用Clear办法来清空缓冲区:
Response.Buffer=True
‘Someconditiontoselecttheappropriatepage:
IfRequest.ServerVariables(“SERVER_PORT”)=1856Then
StrNewPage=“/newpath/this_page.asp”
Else
StrNewPage=“/newpath/the_other_page.asp”
EndIf
Response.Clear
Response.RedirectstrNewPage
在ASP3.0中,缓冲缺省为翻开,以是第一行可被疏忽,但它是有害的,并且能确保我们的网页即便在ASP2.0情况中也仍旧能事情。
与其利用这类范例的HTTP报头重定向,不如利用ASP3.0的一个新特征,它同意我们经由过程Server工具的Transfer办法转换为实行另外一个网页,我们将在第4章进一步研讨这个成绩。
1)ASP页面缓冲区
正如已看到过的,IIS5.0中ASP3.0页面缓冲是缺省翻开的,在初期的版本中是缺省封闭的。微软告知我们缓冲在IIS5.0中供应了更无效的网页传送,这就是缓冲缺省形态被改动的缘故原由。在年夜部分情形下,这对我们没有影响。可是,假设有一个十分年夜的网页,或一个用ASP或其余服务器端代码和组件消费必定工夫创立的网页,当其各部分完成时,我们可以分批革新它们到客户:
...
...Codetocreatefirstpartofthepage
...
Response.Flush
...
...Codetocreatenextpartofpage
...
Response.Flush
...
偶然大概但愿在页面停止之前的某些点上中断代码的实行,能够经由过程挪用End办法往革新一切确当前内容到客户并中断任何进一步的处置历程。
...
...Codetocreatefirstpartofthepage
IfstrUserName=“”ThenResponse.Clear
...
...Codetocreateanewversionofthispartofthepage
...
这里有两演出示缓冲和重定向的实例网页,能够从“ResponseObject”主页面(sow_response.asp)下载它们。第一个Response.Redirect例子网页定名为redirect.asp,它在缓冲的页面中定进一些内容,扫除缓冲区,偏重定向到另外一个网页:
ForintLoop=1To1000000
Response.Write“.”
Next
Response.Clear
Response.Redirect“show_redirect.asp”
Response.End
方针页show_response.asp,做一样的事情,但重定向则是回到“ResponseObject”主页。由于这些网页都在缓冲区内,并且一切的输入在重定向之前必需扫除,故在扫瞄器中没有可见的输入。但是,能够经由过程察看扫瞄器的形态看到产生的每次重定向。以下图所示:
在“ResponseObject”主页中,点击“Response.Flush”链接将翻开第二个示例网页usebuffer.asp,它复杂地遍历一个字符串的每个字符,以必定的提早将它们革新到客户,这虽是Web服务器和ASP极低效力的利用体例,但它演示了缓冲的事情体例。
上面是所请求的最小化的ASP代码,注重我们分离把每一个字符革新到扫瞄器,由于不如许的话它将被寄存在缓冲区中,直至网页完成:
strText=“Thistexthasbeenflushedtothebrowserusing“&_
“<B>Response.Flush</B>
”
ForintChar=1ToLen(strText)
ForintWrite=1To100000
Next
Response.WriteMid(strText,intChar,1)
Response.Flush
Next
2)Response.IsClientConnected属性
IsClientConnected属性在ASP2.0中已存在了,但却有些不成靠。在其前往一个正确的了局之前必需发送一些输入到客户。这一成绩在ASP3.0中已被办理。如今这一属性可被自在利用。
IsClientConnected是察看用户是不是仍连到服务器和正在载进ASP创立的网页的有效体例。假如用户断开毗连或中断下载,我们就不必再华侈服务器的资本创立网页,由于缓冲区内容将被IIS抛弃。以是,对那些必要大批工夫盘算或资本利用较多的网页来讲,值得在每阶段都反省扫瞄器是不是已离线:
...
...Codetocreatefirstpartofthepage
...
IfResponse.IsClientConnectedThen
Response.Flush
Else
Response.End
EndIf
...
...Codetocreatenextpartofpage...
1.操纵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“"_
&“http://yoursite.com”"&“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“http://yoursite.com”on“1999.08.01T03:04-0500”
r(n0s0v2l3))
要失掉关于PICS的更多的信息,或懂得更多的界说页面内容的体例,请检索http://www.rsac.org/站点。
在InternetServiceManager中界说报头
在第1章,已申明了怎样在InternetServiceManage(MMC插件)使用程序中设置每一个Web网站和IIS5.0目次的属性,这就界说了利用此站点或目次资本发送到客户机的一切哀求的HTTP报头,也就供应了利用每一个网页中的ASP剧本代码设置这些属性的替换办法。
在Web站点或目次上右击鼠标并选择“Properties”,在其对话框的“HTTPHeaders”选项卡中,可设置页面内容无效期的绝对工夫或相对日期,界说定制的报头,创立PICS内容品级标签,也能够经由过程MIME范例映照来界说内容范例,以下图所示:
在上图中,能够看到已创立了自界说的REFRESHHTTP报头,使用于今后目次载进的一切网页。即每分钟主动地重载(革新)一次(关于显现棒球竞赛的比来比分长短常幻想的,但对服务器而言包袱太重了)。CustomHTTPHeaders栏的Edit对话框以下图所示:
要在“MIMEMap”框中增加自界说的内容范例映照,只需在“Properties”主对话框中单击“FileTypes”按扭把它们增加到清单中便可,以下图所示:
当利用HTTP报头入手下手实验时,你很快会发明不是一切的扫瞄器体现都不异,很多扫瞄器以分歧的体例呼应分歧的HTTP报头,使得牢靠地创建一个广泛合用的准绳偶然极其坚苦。
2.利用客户证书
假设设立了一个平安的Web网站或部份内容具有平安机制的网站,可安装一个数字服务器证书,经由过程同意会见者利用证书中的加密的细节,来考证服务器。每次对该站点或目次的页面哀求,服务器都将发送证书的一个正本,扫瞄器可反省这个正本以断定正在和谁扳谈。
一样,也可设置服务器,请求用户在进进网站时供应一个无效的数字证书。他们可从良多来历取得此证书,比方Verisign(http://www.verisign.com)或ThawteConsulting(http://www.thawte.com)。读者将在第25章看到这一处置历程的细节。
这些情形都利用了Request工具的ClientCertificate汇合的值,本章的实例代码中,已包括了一个显现用户怎样利用些汇合值的一些办法的页面。
这一网页被定名为showcert.asp,并且其所做的统统就是遍历ClientCertificate汇合显现其包括的一切值。可以使用之前常常利用的复杂代码来完成它,独一的分歧的地方就是创建一个HTML表以包容了局,并将其截为每60个字符一组。
<TABELCELLPADDING=0CELLSPACING=0>
<%
ForEachkeyItemInRequest.ClientCertificate()
StrItemValue=Request.ClientCertificate(keyItem)
IfLen(strItemValue)>90ThenstrItemValue=Left(strItemValue,60)&“..etc.”
Response.Write“<TR><TD>”&keyItem&“=“&strItemValue&“</TD></TR>”
Next
%>
</TABLE>
运转了局以下图所示:
利用客户证书重定向
一旦请求一切会见网站或部分网站的扫瞄者给出的其客户证书,就能够利用其包括的信息来制造我们为此用户创立的网页。比方,可以使用他们的证书的Organization条目来主动使他们重定向到该网站的指定部分,使其余会见者重定向到其余中央:
IfRequest.ClientCertificate(“SubjectO”)=“WroxPressInc”Then
Response.Redirect“/wrox_staff/default.asp”‘Wroxstaffsite
Else
Response.Redirect“/public/Default.asp”‘Normalpublicsite
EndIf
响应地,可以使用Country条目来使会见者重定向到一个响应的网站:
SelectCaseRequest.ClientCertificate(“SubjectC”)
Case“UK”:Response.Redirect“http://uk_site.co.uk/”
Case“DE”:Response.Redirect“http://de_site.co.de/”
Case“FR”:Response.Redirect“http://fr_site.co.fr/”
‘...ect.
CaseElse:Response.Redirect“http://us_site.com/”
EndSelect
3.读写二进制数据
有两个办法供应了对从扫瞄器发送到服务器的HTTP数据流和从服务器前往到扫瞄器的数据流的二进制数据会见。Request.BinaryRead办法可失掉指定要读取的字节数的参数,并前往变体范例的数组,个中包括从哀求的POST段中失掉的字节(比方在ASP的Form汇合中数据)。上面的程序读数据的头64个字节:
varContent=Request.BinaryRead(64)
假设利用了BinaryRead办法,今后就不克不及会见ASP的Request.Form汇合。一样,一旦我们接纳任何体例援用了Request.Form汇合,就不克不及利用BinaryRead办法。
把二进制数据写进ASP创立的呼应流中也是大概的,可接纳BinaryWrite办法。必要给其供应想写到客户的字节的变体范例数组:
Response.BinaryWrite(varContent)
这些办法都很少利用,除非从一个数据库创立非HTML源才用到这些办法。利用的一个实例就是从数据库读取构成图象的字节,并利用BinaryWrite办法把它发送到客户。
4.创立定制的日记动静
假设设置了服务器,以W3CExtendedLogFileFormat格局将哀求纪录到一个文本文件,可以使用Response.AppendToLog办法在日记文件条目标开头处增加一条动静字符串。若想为特定的网页存储一些值或动静,或在剧本中呈现了特定的情形时,这类体例长短常有效的。
比方,经由过程的Intranet的“stationaryorder”使用程序,能够纪录凌驾特定的条目数量的雇员的部门号码:
...
IfintItemCount>25Then
Response.AppendToLog“Largeorderfrom‘”&strDept&department.”
EndIf
...
设置扩大的日记
要利用AppendToLog办法,必需激活W3CExtendedLogFileFormat日记设置。该设置办法是,进进Properties对话框中的WebSite选项卡,选中EnableLogging复选框,选择W3CExtendedLogFileFormat并单击Properties按钮,以下图所示:
在呈现的ExtendedLoggingProperties对话框中,可选择想包含进日记文件的条目。确保选中URIStem,不然AppendToLog办法将失利,以下图所示:
我们供应了一个试图在日记文件中写进一个条目标复杂实例页面,可从RequestObject主页(show_request.asp)中的AppendToLog办法链接处翻开它。这一页面所做的全体事情就是创立一个包括以后日期和工夫的复杂字符串,然后实行AppendToLog办法:
strToAppend=“Pageexecutedon”&Now
Response.AppendToLogstrToAppend
了局以下图所示:
小结
本章已入手下手了对ASP3.0的研讨,并且我们也看到了ASP3.0怎样与InternetInformateionServer5.0配合事情,以供应一个易用的、高效的创立静态Web网页和Web使用程序的办法。固然,仍有一些中央必要往研讨,本章仅仅是进修了ASP内置的两个最基础的工具。
这两个最基础的工具是Request和Response工具,同意我们会见和利用作为客户机/服务器会话一部分的值,不管用户什么时候从Web网站哀求和载进一个网页或资本,这类会话就会举行,意味着Request工具可以供应对用户哀求的全体内容的会见,同时Response工具同意创立和修正服务器发还的呼应。
这些工具可以经由过程汇合和属性展现会话的各个部分,并供应了多个能用来检索和修正各段的办法。假设把它们看成分化用户哀求和利用响应的内容创立呼应的工具,这有助你了解事实产生了甚么。这也将有助于了解各类办法怎样影响客户、服务器和正在创立的网页。
强大的可扩展性。ASP具有强大的扩展性,可以实现与多种网络、硬件设备的连接:通过专用的通讯线路远程接入企业;通过远程拨号服务器为远程拨号客户提供服务;通过WAP为移动电话互联网客户服务。 虽然ASP也有很多网络教程。但是这些都不系统。都是半路出家,只是从一个例子告诉你怎么用。不会深入讨论,更不会将没有出现在例子里的方法都一一列举出来。 最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。 跟学别的语言一样,先掌握变量,流程控制语句(就是ifwhileselect)等,函数/过程,数组 多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。 先学习用frontpage熟悉html编辑然后学习asp和vbscript建议买书进行系统学习 ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。 因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。 接下来就不能纸上谈兵了,最好的方法其实是实践。实践,只能算是让你掌握语言特性用的。而提倡做实际的Project也不是太好,因为你还没有熟练的能力去综合各种技术,这样只能使你自己越来越迷糊。 没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。
页:
[1]