学习
实践
活动
工具
TVP
写文章

你知道Forward和Redirect的原理和区别吗

大家都知道Forward和Redirect都是处理客户端请求并负责转发的,那么他们的原理与区别又是什么呢?

原理示意图:

如上图所示为直接转发(Forward)和间接转发(Redirect)的工作原理示意图。很明显,当用户发出请求的时候,对于Forward(直接转发)是服务器直接请求资源,把内容响应给用户,这个过程只有一次请求,即只有一个request对象。而对于Redirect(间接转发),是服务器反馈给浏览器让它重新再发起一次请求,这个过程中有两次请求,即有两个request对象。我们可以说Forward是一种服务器行为,而Redirect是一种客户端行为。

那么他们有什么区别呢?

源代码方法不同:Forward对应的是RequestDispatcher类的forward()方法,而Redirect对应的是HttpServletRequest类的sendRedirect()方法。

浏览器的地址栏显示不同:当用户发起请求服务器响应回来之后,Forward的地址栏的URL是不变的,而Redirect的地址栏会发生改变。

数据共享不同:对于Forward,转发到的页面是可以共享request里面的数据,因为调用者和被调用者之间共享相同的request对象和response对象;而Redirect则不可以,因为调用者和被调用者属于两个独立的请求-响应过程。

内部机制不同:Forward只能将请求转发给同一个Web应用中的组件,而Redirect可以重新定向到同一站点不同应用程序中的资源,甚至可以定向到一绝对的URL。

处理效率不同:Forward的效率比Redirect高。

还有大家在书写代码的时候,要记住Redirect跳转后必须加上return,不然页面虽然跳转了,但是还会执行跳转后面的语句,forward是执行了跳转页面,下面的代码是不会在执行的。

关注小编,每天学习一点点;不积跬步,无以至千里;不积小流,无以成江海。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180210A099ZE00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券