forward与redirect的区别(SpringMVC )

参考博客地址:

https://www.cnblogs.com/lexiaofei/p/7044429.html?utm_source=itdadao&utm_medium=referral

参考博客地址: 

https://blog.csdn.net/senmon2004/article/details/654049


下面是关于forwardredirect方式的区别(SpringMVC中):

1  forward

 forward方式相当于request.getRequestDispatcher().forward(request,response)。 

 外部特征:浏览器地址显示的路径是转发前的路径。 


工作方式是这样: 

forward 发生在服务器内部,在前一个控制器处理完毕后,直接进入下一个控制器处理, 并将最后的response发给浏览器. 


这种方式的特点: 

A.转发前后是同一个request,后一个控制器可共享前一个控制器的参数与属性; 

B.因为是同一个request,拦截器只会拦截前一个url,如果前一个url在映射时未配置到拦截器拦截,则拦截后一个

   url,即只拦截一次; 

C.最后返回到浏览器后,因为地址栏显示的是转发前的url,所以刷新页面时会依次执行前后两个控制器.


2 redirect


redirect方式相当于”response.sendRedirect()”,就是服端根据逻辑,送一个状态码,诉浏览器重新去求那个地址

外部特征:浏览器地址显示的路径是转发后的路径。 


工作方式是这样的 

redirect就是服端根据逻辑,送一个状态码,诉浏览器重新去求那个地址(服务器端会首先发一个response给浏览器, 然后浏览器收到这个response后再发一个requeset给服务器),然后服务器发新的response给浏览器. 这时页面收到的request对象是重新从浏览器发来的,一般来说浏览器会用求的所有参数重新求,所以session,request参数都可以


这种方式的特点 

A.在转发前后有两个不同的request对象,转发前后的两个控制器在request上的参数(request.getParameter())

   和 request属性(request.getAttribute())不能共享; 

B.如果转发前后的两个控制器都配置在spring 拦截器范围内,这样拦截器会拦截前后两个request,即会拦截两次; 

C.最后返回到浏览器后,因为地址栏显示的是转发后的url,所以刷新页面时只会执行后面的url映射的控制器. 


  • 举例如下:

a-------->b(-->代表两方法的一)

a 面里有一个 作: request.setAttribute("temp",object);
 
Response.forward()---->用 个方法到达 b,可以在b里通 request.getAttribute("temp")得到存 object 象, 个方法 大了 request里保存的 的作用范
Response.redirect()---->用 个方法到达 b,object 象将 失。
 
如果想到达b 面(无 是哪个方法)而有想得到 object 象, 最好将 object 象保存在 request.getSession()里,也就是Session


3. forwardredirect的区

forward是容器中控制向,在客浏览器地址中不会示出向后的地址;

redirect是完全的跳浏览器将会得到跳的地址,并重新接。这样,从浏览器的地址中可以看到跳后的接地址。

所以,forward更加高效,在forward可以足需要,尽量使用forward()方法,并且,这样也有助于实际接。

在有些情况下,比如,需要跳到一个其它服器上的源,使用sendRedirect()方法。


4. 小提示

  •  如果逻辑视图名为 hello,框架通过 forward 的方式转发到了 /WEB-INF/jsp/hello.jsp。
  • 如果逻辑视图名是 /hello,框架还是转发到了 /WEB-INF/jsp/hello.jsp,即 /WEB-INF/jsp//hello.jsp 等同于 /WEB-INF/jsp/hello.jsp。  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值