参考博客地址

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。 forward与redirect的区别(SpringMVC ) 

相关文章:

  • 2021-10-17
  • 2021-10-17
  • 2021-10-17
  • 2021-10-17
  • 2021-10-17
  • 2021-10-17
  • 2019-02-21
  • 2021-10-17
猜你喜欢
  • 2021-10-17
  • 2021-10-17
  • 2021-10-17
  • 2021-10-17
  • 2018-03-06
  • 2021-10-17
  • 2021-10-17
  • 2021-10-17
相关资源
相似解决方案