NET网页编程之Response.Redirect和Server.Transfer详解
归根到底,Java跨平台可以,但是要重新编写代码,否则还分什么J2EE/J2SE/J2ME呢!实行道理:1、扫瞄器ASP文件哀求->服务器实行->碰到response.redirect语句->服务器发送response.redirect前面的地点给客户机真个扫瞄器->扫瞄器哀求实行新的地点。
2、扫瞄器ASP文件哀求->服务器实行->碰到Server.Transfer语句->服务器转向新的文件。
切换工具:
1、Response.Redirect能够切换就任何存在的网页。
2、Server.Transfer只能切换到同目次大概子目次的网页。
数据保密:
1、Response.Redirect后地点会酿成跳转后的页面地点。
2、Server.Transfer后地点稳定,埋没了新网页的地点及附带在地点后边的参数值。具无数据保密功效。
传送的数据量(网址后附带的参数):
1、Response.Redirect可以传送的数据以2KB为限。
2、传送的数据凌驾2KB时,务必利用Server.Transfer。
固然超等链接可以从一个页面导航到另外一个页面,但这类导航体例是完整由用户把持的。有些时分,我们大概要用代码来把持全部导航历程,包含什么时候转到另外一个页面。在这些场所,ASP.NET有三种分歧的体例能够到达类似的目标:挪用Response工具的Redirect办法,挪用Server工具的Transfer或Execute办法。这三种导航体例的举动基础类似,但也有区分。
2.1Response.Redirect
Response.Redirect办法招致扫瞄器链接到一个指定的URL。当Response.Redirect()办法被挪用时,它会创立一个应对,应对头中指出了形态代码302(暗示方针已改动)和新的方针URL。扫瞄器从服务器收到该应对,使用应对头中的信息收回一个对新URL的哀求。
这就是说,利用Response.Redirect办法时重定向操纵产生在客户端,统共触及到两次与服务器的通讯(两个往返):第一次是对原始页面的哀求,失掉一个302应对,第二次是哀求302应对中声明的新页面,失掉重定向以后的页面。
2.2Server.Transfer
Server.Transfer办法把实行流程从以后的ASPX文件转到统一服务器上的另外一个ASPX页面。挪用Server.Transfer时,以后的ASPX页面停止实行,实行流程转进另外一个ASPX页面,但新的ASPX页面仍利用前一ASPX页面创立的应对流。
假如用Server.Transfer办法完成页面之间的导航,扫瞄器中的URL不会改动,由于重定向完整在服务器端举行,扫瞄器基本不晓得服务器已实行了一次页面变更。
默许情形下,Server.Transfer办法不会把表双数据或查询字符串从一个页面传送到另外一个页面,但只需把该办法的第二个参数设置成True,就能够保存第一个页面的表双数据和查询字符串。
同时,利用Server.Transfer时应注重一点:方针页面将利用原始页面创立的应对流,这招致ASP.NET的呆板考证反省(MachineAuthenticationCheck,MAC)以为新页面的ViewState已被改动。因而,假如要保存原始页面的表双数据和查询字符串汇合,必需把方针页面Page指令的EnableViewStateMac属性设置成False。
2.3Server.Execute
Server.Execute办法同意以后的ASPX页面实行一个统一Web服务器上的指定ASPX页面,当指定的ASPX页面实行终了,把持流程从头前往原页面收回Server.Execute挪用的地位。
这类页面导航体例相似于针对ASPX页面的一次函数挪用,被挪用的页面可以会见收回挪用页面的表双数据和查询字符串汇合,以是要把被挪用页面Page指令的EnableViewStateMac属性设置成False。
默许情形下,被挪用页面的输入追加到以后应对流。可是,Server.Execute办法有一个重载的办法,同意经由过程一个TextWriter工具(大概它的子工具,比方StringWriter工具)猎取被挪用页面的输入,而不是间接追加到输入流,如许,在原始页面中能够便利地调剂被挪用页面输入了局的地位。
为申明其事情历程,上面我们创立一个Web表单,放进一个按钮控件(Button1)和一个文本控件(Literal1),在计划界面直达进代码视图,到场一个System.IO称号空间的Imports语句,然后到场用户点击按钮时实行的代码:
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
DimswAsStringWriter=NewStringWriter()
Server.Execute("WebForm2.aspx",sw)
Literal1.Text=sw.ToString()
EndSub
然后为统一个Web使用创立第二个页面WebForm2.aspx。转进该页面的HTML视图,修正其Page指令克制ViewState反省:
<%@PageLanguage="vb"AutoEventWireup="false"Codebehind="WebForm2.aspx.vb"
Inherits="Navigate.WebForm2"EnableViewStateMac="false"%>
再转到计划视图,为第二个页面增添一些控件。接上去,把第一个页面设置成默许页面,启动使用。点击按钮,WebForm2的控件将显现在WebForm1中安排Literal按钮的中央,
用Server.Execute兼并两个源文件的页面:
用Server.Transfer或Server.Execute办法完成导航时,还要注重一点:最初失掉的页面大概不是正当的HTML页面,由于终极前往给客户真个页面大概包括多个<HTML>和<BODY>等标志。IE扫瞄器看来可以容忍并准确处置这类情况,但假如用户要用到其他的扫瞄器,最好细心测试一下。
3、对照与选择
既然从一个页面导航到另外一个页面的举措有这么多,应当怎样选择最好的导航体例呢?上面是一些必要思索的要素:
·假如要让用户来决意什么时候转换页面和转到哪个页面,超等链接最合适。
·假如要用程序来把持转换的方针,但转换的机会由用户决意,利用Web服务器的HyperLink控件,静态设置其NavigateUrl属性。
·假如要把用户毗连到另外一台服务器上的资本,利用Response.Redirect。
·用Response.Redirect把用户毗连到非ASPX的资本,比方HTML页面。
·假如要将查询字符串作为URL的一部分保存,利用Response.Redirect。
·假如要将实行流程转进统一Web服务器的另外一个ASPX页面,应该利用Server.Transfer而不是Response.Redirect,由于Server.Transfer可以制止不用要的收集通讯,从而取得更好的功能和扫瞄效果。
·假如要捕捉一个ASPX页面的输入了局,然后将了局拔出另外一个ASPX页面的特定地位,则利用Server.Execute。
·假如要确保HTML输入正当,请利用Response.Redirect,不要利用Server.Transfer或Server.Execute办法。你所列的那些其实差不多都可以称为应用服务器(servlet应该说是一种语言更合适)java是开放的,相同的工具就会有很多公司在做,加上java已经发展了很多年了,因此这些工具就很多了。他们很多都是类似的。 我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。 那么,ASP.Net有哪些改进呢? ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。 这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。 ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。 业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。 业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。 代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
页:
[1]