forward和redirect的区别是什么 Forward和Redirect原理

大家都知道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是执行了跳转页面,下面的代码是不会在执行的。