|
在处理ASP脚本时,任何没有包含在ASP定界符或 <SCRIPT> 标记中的文本或图形都将被简单地返回给浏览器。可以通过使用Response对象显示地把内容发送给浏览器。 发送内容 要将内容从ASP定界符内部或过程发送给浏览器,可以使用Response对象的Write方。例如,下面的语句可以根据用户是否访问过此页而发送不同的问候语: <% If FirstTime = True Then Response.Write\"<H3 ALIGN=CENTER>Welcome to the Overview Page</H3>\" Else Response.Write\"<H3 ALIGN=CENTER>Welcome Back to the Overview Page</H3>\" End If %> 在过程外部,不必使用Response.Write将内容送回用户。不在脚本定界符内部的内容被直接发送给浏览器,浏览器将其格式化和显示。例如,下面的脚本过程与上面的脚本输出相同: <H3 ALIGN=CENTER> <% If FirstTime Then %> Welcome to the Overview Page. <% Else %> Welcome Back to the Overview Page. <% End If %> </H3> 当您只需要将输出返回一次或很方便地向现有HTML文本中加入语句时,可使用混合脚本命令和HTML。当您不想用定界符分隔一条语句或当您想创建返回给浏览器的字符串时,可使用 Response.Write。例如,可构建一个文本的字符串,用从一个HTML表送回的值创建表格的一行: Response.Write\"<TR><TD>\" & Request.Form(\"FirstName\") _ & \"</TD><TD>\" & Request.Form(\"LastName\") & \"</TD></TR>\" Request.Form返回从HTML表格(参阅 使用HTML表格)发送的值。(&)字符是VBScript字符串连接字符。
设置内容的类型 当Web服务器将文件返回给浏览器时,会同时告诉浏览器文件中包含的内容的类型。这使浏览器能够决定是否它能自己显示文件或必须调用另一个应用程序。例如,如果网络服务器返回Microsoft Excel表格,则浏览器必须调用Microsoft Excel的副本显示此页。Web服务器通过将文件的扩展名映射到 MIME 类型表来识别文件类型。 可以使用Response对象的ContentType属性为发送给用户的内容设置HTTP内容类型字符串。例如,下面的命令为通道定义设置内容类型: <%Response.ContentType = \"application/x-cdf\" %> 有关通道的详细信息,请参阅本主题中的“创建动态通道”。 其他的通用内容类型是text/plain(用于作为文本内容返回而不是已解释的HTML语句)、text/gif(用于GIF图像)和 video/quicktime(用于Apple QuickTime格式的电影)。一套标准的MIME类型已经定义,另外,Web服务器或 Web浏览器都支持 MIME 类型。要想查看您的 MicrosoftWeb服务器支持哪些内容类型,可使用 Internet 服务管理器打开您的Web站点的属性页,单击"HTTP标题"选项卡,然后单击"文件类型"选项卡。 重定向浏览器 用Redirect方法可将浏览器重定向到另一个URL,而不是将内容发送给用户。例如,如果您想确认用户是否已从主页进入了您的应用程序,以便能收到一个客户ID,则可以检验他们是否有客户ID号;如果没有,就可以将其重定向到主页。 <% If Session(\"CustomerID\") = 0 Then Response.Redirect\"homepage.asp\" End If %> 除非缓冲区已经打开,否则,在任何内容或标题返回给浏览器之前,您必须重定向浏览器。将Response.Redirect语句放在页的顶部和<HTML>标记之前可确保没有任何内容返回给浏览器。如果在返回给浏览器的内容或标题后使用Response.Redirect,将看到一个错误信息。 如果在页的中间使用Response.Redirect,请将其与Response.Buffer属性一起使用,下面的部分将进行解释。
缓冲内容 默认情况下,Web服务器返回HTML和在处理ASP页时的脚本处理结果。但是,您可以设置Response对象的Buffer属性以便在向用户发送任何内容之前,先处理页上的所有的服务器脚本命令。 可以使用缓冲技术来确定在页处理过程中的某个点,而您并不想将该点之前的内容发送给用户。也可以用Response对象的Redirect方法将用户重定向到另一页,或者用Response对象的Clear方法清除缓冲区并将不同的内容发送给用户。下面的例子使用了以上两种方法。 <% \'Turn on buffering. This statement must appear before the <HTML> tag. Response.Buffer = True %> <html> <body> %> If Request(\"FName\") = \"\" Then Response.Clear Response.Redirect\"/samples/test.html\" Else Response.WriteRequest(\"FName\") End If %> </body> </html> 也可以使用Response.Buffer避免Web服务器在脚本修改HTTP标题之前将其返回。有些属性和方法,例如Response.Expires和Response.Redirect可修改HTTP标题。 当在脚本中设置Buffer属性并且没有调用Flush方法时,服务器将保持用户发出的Keep-Alive请求。养成这样的脚本编写习惯有益于提高服务器的性能,因为,服务器不必为每一个用户请求创建新的连接(假定服务器、用户和任何代理服务器都支持Keep-Alive要求)。但是,这种方法的一个潜在的不利因素是:在用户处理完当前的ASP文件的所有的脚本之前,缓冲区不显示任何响应给用户。对于较长的和较复杂的脚本,用户可能要被迫等待很长一段时间才能看到这一页。 默认情况下,缓冲区对于ASP应用程序是关闭的。可以使用Internet服务管理器为整个ASP应用程序打开缓冲区。详细信息,请参阅配置ASP应用程序。
允许代理服务器缓存页 通过代理服务器,应用程序可以发送页给用户。代理服务器代替用户浏览器从Web站点请求网页。代理服务器缓存HTML页以便相同页的重复请求能够快速有效地返回给浏览器。代理服务器执行请求并缓存网页,并减轻网络和 Web服务器的负荷。 尽管缓存对HTML页都能很好运行,但对包含动态生成信息的ASP页则不尽人意。例如,报告股市行情或显示大量业务的存货清单需要提供即时信息。一小时前的信息对目前来讲是很不准确的。如果应用程序返回个人的信息,例如,自定义的主页,希望用户不能看到另一个用户的个人信息。 默认情况下,ASP命令代理服务器自己不能缓存ASP页(尽管缓存图像、位图、小型应用程序,和其他缓存页上的参考项)。可以使用Response.CacheControl属性设置缓存控制HTTP标题字段允许缓存某一页。Response.CacheControl的默认值是字符串"Private\",它避免代理服务器缓存此页。要允许缓存,可将缓存控制标题字段设置为Public: <%Response.CacheControl = \"Public\" %> 因为在任何页的内容被发送之前,HTTP标题必须被送给浏览器或代理服务器,所以,可在任何HTML标记之前设置Response.CacheControl属性或使用Response.Buffer缓存此页。 缓存控制标题字段是HTTP1.1规格的一部分。在只支持HTTP1.0的代理服务器上不能缓存ASP页,因为没有到期的标题字段发送。
避免浏览器缓存页 每一个浏览器版本都有它自己的规格来规定是否缓存页。要避免浏览器缓存ASP页,可使用Response.Expires设置到期标题: <%Response.Expires = 0 %> 值为0强迫缓存页到期。因为在任何页被发送之前,HTTP标题必须被送给浏览器,所以可通过将Response.Expires属性放在HTML标记之前或使用Response.Buffer缓存该页。
创建动态通道 Internet Explorer 4.0有一个新的特性,Web规划人员可以使用该属性将带有公用主题的Web页并入一个通道。在浏览器中,通道被显示在通道标题栏上;用户通过单击图标访问通道。通道在后台自动更新;用户不必访问站点就可以在自己的浏览器上下载最新的页。通道为用户提供了一条浏览一组相关的Web页的快速而直接的通路,并且这些Web页是自动更新的。 使用ASP,可以编写脚本来收集用户的首选项,然后动态地创建通道。通道定义文件(.cdf)建立了通道内容的组织和顺序。在.cdf文件中的命令使用与HTML标记相同的语法,以便于掌握和从脚本中生成。在编写ASP脚本来创建通道定义文件时,脚本用.cdx扩展名。当ASP读取一个以.cdx为扩展名的文件时,将自动发送application/x-cdf内容类型,它告诉浏览器用通道定义来解释字节。如果不使用.cdx作扩展名,则脚本必须用Response.ContentType手工将内容类型设置为application/x-cdf。 下面是一个有关如何使用通道的示例。下面的HTML表格要求用户选择通道。提交时,该表格调用.cdx文件的脚本去创建通道的定义。 <P> Choose the channels you want. </P> <FORM METHOD=\"POST\" ACTION=\"chan.cdx\"> <P><INPUT TYPE=CHECKBOX NAME=Movies> Movies <P><INPUT TYPE=CHECKBOX NAME=Sports> Sports <P><INPUT TYPE=\"SUBMIT\" VALUE=\"SUBMIT\"> </FORM> Chan.cdx中的脚本根据与请求一起提交的表格的值创建通道定义。 <% If Request.Form(\"Movies\") <> \"\" Then %> <CHANNEL> channel definition statements for the movie pages </CHANNEL> <% End If %> <% If Request.Form(\"Sports\") <> \"\" Then %> <CHANNEL> channel definition statements for the sports pages </CHANNEL> <% End If %> 有关通道和通道定义文件的信息,请参阅Exploration Air范例站点。
向服务器发送文件 浏览器可以使用Posting Acceptor应用程序将文件发送给Web服务器。当Posting Acceptor上载文件时,将发送列出每一个收到的文件名称和位置的URL-encoded表格字段。可以将邮递处理的URL添加到脚本中,此脚本上载文件去调用 ASP脚本来处理这些字段名。例如,可以编写一个脚本,自动地通过文件的名称和位置发送e-mail给系统管理员。有关Posting Acceptor的详细信息,包括ASP脚本示例,请参阅Posting Acceptor。
向浏览器传送脚本 尽管ASP主要用来创建和处理服务器端脚本,还是可以使用它生成由客户浏览器处理的客户端脚本来扩展其效用。通过组合传送到浏览器的脚本命令可以编写服务器端脚本。 通过组合由HTML注释括起来的客户端脚本和由定界符括起来的服务器端脚本可以做到这一点: <SCRIPT LANGUAGE=\"VBScript\"> <!-- client script <% server script %> client script <% server script %> client script -> </SCRIPT> 使用脚本语言的这个功能,您能够创建令人兴奋的应用程序。举例来说,下面的脚本将生成在用户的Web浏览器上运行的客户脚本的子程序。 <% ServerTime = Time ServerDate = Date For i = 1 to 4 Randomize GreetCondition = int(rnd * 3) %> <SCRIPT LANGUAGE=\"VBScript\"> <!-- Sub ServeInfo<%= i %>() Select Case <%= GreetCondition%> Case 0 Msg = \"Hello, the time is <%= ServerTime %>.\" Case 1 Msg = \"Welcome! Today\'s date is <%= ServerDate %>.\" Case 2 Msg = \"Hi, the time is <%= ServerTime %> and the date is <%= ServerDate %>. End Select Document.WriteMsg End Sub ServeInfo<%= i %>() //--> </SCRIPT> <br> <% Next %> 在以上的脚本中,ASP在服务器上检索时间和日期信息,然后通过几次循环生成在用户的Web服务器上运行的子程序。每个客户端子程序提出随机选择的问候,显示时间和日期信息。 这种脚本可扩展,例如,将配置信息检索并提交到指定的客户端脚本或组件,如ActiveX控件。灵活地使用这种脚本的编写技巧,同样可以加快Web服务器处理和返回用户信息请求的速度。
|