response.redirect,server.transfer和server.execute总结

来源:互联网 发布:阿里云激活邀请码 编辑:程序博客网 时间:2024/05/30 04:37

response.redirect:客户端动作
server.transfer:服务端动作,IE无法感知转向,可以传递当前页环境
server.execute:服务端动作,IE无法感知转向,可以传递当前页环境,执行后返回原页面,与调用外部函数有些相似。
Execute 可以直接执行代码,可以传递当前页环境

asp重定向-response.redirect和server.transfer
-response.redirect和server.transfer

1. 客户端重定向带来的问题
  ASP编程人员通常使用Response.Redirect语句把一个页面载入到当前正在执行的网页。然而,许多人没有意识到这条语句不会自动地使服务器立即装入和执行新的网页。其真正做的是把一个HTTP重定向报头(redirection header)增加到由Web服务器发送给客户的输出流中。这个报头如下:
HTTP/1.1 302 Object Moved
Location newpage.asp
在这个报头中的标准HTTP状态信息“302 Object Moved”,告知浏览器所要求的资源已经发生移动。Location报头提供相应的网页地址。当然这个地址不一定是真实的,现在正在做的事情就是“欺骗”浏览器,使浏览器认为可在另一个位置上找到所需要的网页。实际发生的是,服务器将执行所请求的网页,但是通知浏览器需要的网页已经发生移动。这就是在发送任何页面的内容到浏览器之前必须执行Redirect方法的原因。
当一个浏览器接受到“302 Object Moved”信息时,中断当前的请求并为Location值中指定的网页发送一个新的请求。这与在网页的<HEAD>段使用一个META HTTP-EQUIV标记时的工作方式相同,前面给出的HTTP报头还可写为:
<META HTTP-EQUIV=”REFRESH” CONTENT=”0;URL=newpage.asp”>
因此重定向实际上发生在客户机端,而不是在服务器上。如果在这个连接的客户端有一个代理服务器在使用的话,可能会引起显示虚假消息。这就是在使用Response.Redirect时,“The object you requested has been moved and can be found here”消息经常在客户机上显示的原因,正确地使用缓冲通常可以防止这个问题。
在IIS 4.0或更早的版本中使用Response.Redirect时,应该在ASP网页的开头打开缓冲,然后在执行Response.Redirect方法之前调用Response.Clear。当然,在ASP 3.0中网页缓冲的缺省状态为打开,因此这不成问题。只要在执行该语句之前使用Response.Clear,以前产生的输出将不会发送给客户。


2. 在ASP 3.0中服务器端的重定向
  在ASP 3.0和IIS 5.0中,在几乎所有情况下,通过使用两个新的Server对象方法Execute和Transfer,可以避免使用客户端重定向。这两个方法使控制立即转到另一个网页,该网页可以是一个ASP网页或者是任何其他的资源,例如一个HTTP网页、压缩文件或其他类型的文件。
  它们之间的不同之处是:Execute方法“调用”另一个的网页,与在脚本代码中调用一个子程序或函数非常相似。当另一个网页或资源已经执行完毕或传送到客户端时,控制返回到原网页中调用Execute方法的语句的下一条语句,并继续执行。而使用Transfer方法时,控制不再返回到原页面中,在控制传送到的网页或资源的末尾处,执行过程停止。
  当前网页的环境也传送给了目标网页或资源,因此这两个方法更有用。网页环境包含了原有的ASP对象中的所有变量的值,例如Request、Response和Session对象的集合以及它们的所有属性。即使该网页不在同一个虚拟应用程序中,也将传送Application对象的环境。
  结果是浏览器认为它仍在接收原先的页面,它并不了解服务器所做的事情。浏览器的地址栏一直显示相同的URL,并且Back、Forward和Refresh按钮正常地工作。在使用客户端重定向时,尤其是使用HTML META元素时,情况通常不是这样的。 asp重定向

=====================

The Execute method executes an ASP file from inside another ASP file. After executing the called .asp file, the control is returned to the original .asp file.
Excute方法能够在一个ASP文件内执行另外一个ASP文件.在执行外所调用的.asp文件后,控件会返回原.asp文件

Syntax 语法
Server.Execute(path)

Parameter Description
path Required. The location of the ASP file to execute
必须的.所要执行ASP文件的位置


Example 举例
File1.asp:

<%response.write('I am in File 1!<br />')Server.Execute('file2.asp')response.write('I am back in File 1!')%>
File2.asp:

<%response.write('I am in File 2!<br />')%>
Output,输出:

I am in File 1!I am in File 2!I am back in File 1!
Also look at the Server.Transfer method to see the difference between the Server.Execute and Server.Transfer methods.
可以观察下Server.Transfer方法与Server.Execute有什么不一样的地方

====================

EXECUTE的巧用

EXECUTE是vbscript5.0的新增功能,以下就此举一例:
如果我们有一个FORM,内有大批INPUT,RADIO,select等用户输入,我们在ASP处理文件中通常的取值方法是:
dim company,name,eMail,tel,fax,web '可能还有很多....
company=Request.Form("company")
.....
web=Request.Form("web")
然后进行入库或其他处理。
如果每个表单变量都要使用表单声明并取值,是件十分麻烦的事。有没有更好的办法呢?我们知道:
FOR each item in Request.form
Response.Write item &"="& Request.Form(item) & "<br>"
Next
可以显示出所有表单的值,但它们并不能产生多个变量并取得相应的值。如:company=Request.Form("company")
怎么办呢?利用EXECUTE:
FOR each item in Request.form
' Response.Write item &"="& Request.Form(item) & "<br>"
'注意下句:
Execute item &"="""& Request.Form(item) & """"
Next
上面的Execute的"="后面加了两个双引号("),最后又加了四个("),目的是将它们变成字符串,以便Execute执行,否则可能有意想不到的错误!
好了,下面你可以大胆引用相应的值以便进行入库或其他处理了。
例如:Response.Write company & "<br>"

1. Server.Transfer只能够转跳到本地虚拟目录指定的页面,而Response.Redirect则十分灵活;
2. Server.Transfer可以将页面参数方便传递到指定页面;
3. 使用时,Server.Transfer跳到别的页面后,浏览器显示的地址不会改变,有时反而会造成误会,当然也有些场合需要这样的效果;
4. Server.Transfer可以减少客户端对服务器的请求;

Server.Transfer(ASP 3.0 以上) 和 Response.Redirect 在以前的 ASP 中就存在了,Page.Navigate 是 ASP.NET Beta 1 提供的新功能,它们之间的区别在于:

1、Server.Transfer - 用于把处理的控制权从一个页面转移到另一个页面,在转移的过程中,没有离开服务器,内部控件(如:request, session 等)的保存的信息不变,因此,你能从页面 A 跳到页面 B 而不会丢失页面 A 中收集的用户提交信息。此外,在转移的过程中,浏览器的 URL 栏不变。

2、Response.Redirect - 发送一个 HTTP 响应到客户端,告诉客户端跳转到一个新的页面,客户端再发送跳转请求到服务器。使用此方法时,将无法保存所有的内部控件数据,页面 A 跳转到页面 B,页面 B 将无法访问页面 A 中 Form 提交的数据。

3、Page.Navigate - Page.Navigate 实现的功能和 Response.Redirect 差不多,它实际上包括三个步骤:首先调用 Response.Redirect,其次依次卸载所有的控件,最后调用 Response.End。

<b>特别要注意的是:</b>在 .NET Beta 2 中,Microsoft 将不再包括 Page.Navigate 这个功能,大家应该现在就用 Response.Redirect 来代替 Page.Navigate,以节省将来升级时的时间。

轉自:http://blog.ccidnet.com/blog-htm-do-showone-uid-62827-itemid-236942-type-blog.html

原创粉丝点击