nullITeye - 威尼斯人

nullITeye

2019年03月07日14时30分11秒 | 作者: 昊磊 | 标签: | 浏览: 702

1.从地址栏显现来说 
forward是服务器恳求资源,服务器直接拜访方针地址的URL,把那个URL的呼应内容读取过来,然后把这些内容再发给阅读器.阅读器底子不知道服务器发送的内容从哪里来的,所以它的地址栏仍是本来的地址.
redirect是服务端依据逻辑,发送一个状况码,通知阅读器从头去恳求那个地址.所以地址栏显现的是新的URL.

2.从数据同享来说 
forward:转发页面和转发到的页面能够同享request里边的数据.
redirect:不能同享数据.

3.从运用当地来说 
forward:一般用于用户登陆的时分,依据人物转发到相应的模块.
redirect:一般用于用户刊出登陆时回来主页面和跳转到其它的网站等.

4.从功率来说 
forward:高.
redirect:低.

本质差异


解说一  

一句话,转发是服务器行为,重定向是客户端行为。为什么这样说呢,这就要看两个动作的作业流程: 

转发进程:客户阅读器发送http恳求》web服务器承受此恳求》调用内部的一个办法在容器内部完结恳求处理和转发动作》将方针资源 发送给客户;在这里,转发的途径有必要是同一个web容器下的url,其不能转向到其他的web途径上去,中心传递的是自己的容器内的request。在客 户阅读器途径栏显现的仍然是其第一次拜访的途径,也就是说客户是感觉不到服务器做了转发的。转发行为是阅读器只做了一次拜访恳求。 

重定向进程:客户阅读器发送http恳求》web服务器承受后发送302状况码呼应及对应新的location给客户阅读器》客户阅读器发现 是302呼应,则主动再发送一个新的http恳求,恳求url是新的location地址》服务器依据此恳求寻觅资源并发送给客户。在这里 location能够重定向到恣意URL,既然是阅读器从头宣布了恳求,则就没有什么request传递的概念了。在客户阅读器途径栏显现的是其重定向的 途径,客户能够观察到地址的改动的。重定向行为是阅读器做了至少两次的拜访恳求的。 

解说二 

重定向,其实是两次request, 
第一次,客户端request A,服务器呼应,并response回来,通知阅读器,你应该去B。这个时分IE能够看到地址变了,并且前史的回退按钮也亮了。重定向能够拜访自己web运用以外的资源。在重定向的进程中,传输的信息会被丢掉。 

比如: 


恳求转发是服务器内部把对一个request/response的处理权,移交给别的一个 
关于客户端而言,它只知道自己最早恳求的那个A,而不知道中心的B,乃至C、D。 传输的信息不会丢掉。 

比如: 

解说三


假定你去处理某个执照, 

重定向:你先去了A局,A局的人说:“这个工作不归咱们管,去B局”,然后,你就从A退了出来,自己搭车去了B局。 

转发:你先去了A局,A局看了今后,知道这个工作其实应该B局来管,可是他没有把你退回来,而是让你坐一瞬间,自己到后边办公室联系了B的人,让他们办妥后,送了过来。 

三、恳求重定向与恳求转发的比较 

虽然HttpServletResponse.sendRedirect办法和RequestDispatcher.forward办法都能够让阅读器获 得别的一个URL所指向的资源,但两者的内部运行机制有着很大的差异。下面是HttpServletResponse.sendRedirect办法完成 的恳求重定向与RequestDispatcher.forward办法完成的恳求转发的总结比较: 

(1)RequestDispatcher.forward办法只能将恳求转发给同一个WEB运用中的组件;而 HttpServletResponse.sendRedirect 办法不只能够重定向到当时运用程序中的其他资源,还能够重定向到同一个站点上的其他运用程序中的资源,乃至是运用肯定URL重定向到其他站点的资源。假如 传递给HttpServletResponse.sendRedirect 办法的相对URL以“/”最初,它是相关于整个WEB站点的根目录;假如创立RequestDispatcher方针时指定的相对URL以“/”最初,它 是相关于当时WEB运用程序的根目录。 

(2)调用HttpServletResponse.sendRedirect办法重定向的拜访进程完毕后,阅读器地址栏中显现的URL会发作改动,由初 始的URL地址变成重定向的方针URL;而调用RequestDispatcher.forward 办法的恳求转发进程完毕后,阅读器地址栏坚持初始的URL地址不变。 

(3)HttpServletResponse.sendRedirect办法对阅读器的恳求直接作出呼应,呼应的成果就是通知阅读器去从头宣布对别的一 个URL的 拜访恳求,这个进程比如有个绰叫喊“阅读器”的人写信找张三借钱,张三回信说没有钱,让“阅读器”去找李四借,并将李四现在的通信地址通知给了“阅读 器”。所以,“阅读器”又按张三供给通信地址给李四写信借钱,李四收到信后就把钱汇给了“阅读器”。可见,“阅读器”总共宣布了两封信和收到了两次回复, “阅读器”也知道他借到的钱出自李四之手。RequestDispatcher.forward方 法在服务器端内部将恳求转发给别的一个资源,阅读器只知道宣布了恳求并得到了呼应成果,并不知道在服务器程序内部发作了转发行为。这个进程比如绰叫喊“浏 览器”的人写信找张三借钱,张三没有钱,所以张三找李四借了一些钱,乃至还能够加上自己的一些钱,然后再将这些钱汇给了“阅读器”。可见,“阅读器”只发 出了一封信和收到了一次回复,他只知道从张三那里借到了钱,并不知道有一部分钱出自李四之手。 

(4)RequestDispatcher.forward办法的调用者与被调用者之间同享相同的request方针和response方针,它们归于同 一个拜访恳求和呼应进程;而HttpServletResponse.sendRedirect办法调用者与被调用者运用各自的request方针和 response方针,它们归于两个独立的拜访恳求和呼应进程。关于同一个WEB运用程序的内部资源之间的跳转,特别是跳转之前要对恳求进行一些前期预处 理,并要运用HttpServletRequest.setAttribute办法传递预处理成果,那就应该运用 RequestDispatcher.forward办法。不同WEB运用程序之间的重定向,特别是要重定向到别的一个WEB站点上的资源的状况,都应该 运用HttpServletResponse.sendRedirect办法。 

(5)无论是RequestDispatcher.forward办法,仍是HttpServletResponse.sendRedirect办法,在调用它们之前,都不能有内容现已被实践输出到了客户端。假如缓冲区中现已有了一些内容,这些内容将被从缓冲区中铲除。

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表威尼斯人立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1
  • 2

    Java多线程编程ITeye

    线程,音讯,出产
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

    FileDowloadITeye

    途径,获取,绝对
  • 10

    java FTPClient的运用ITeye

    服务器,文件,运用