在项目开发中使用springMVC框架时,当Controller控制层对请求进行处理完成后,向其它资源进行跳转时,可以使用请求转发与重定向来实现,如果根据所要跳转的资源类型来分,可以跳转到页面与跳转到其它处理器。

在之前学习servlet开发中,转发和重定向是由request对象和response对象完成的。

那么在SpringMVC框架中是如何完成的呢?

一般情况下,在SpringMVC框架开发中Controller控制层的方法返回字符串类型时会被当成逻辑视图名,然后根据视图解析器设置的拼接路径来返回视图。而如果返回的字符串中带forward或redirect前缀时,SpringMVC框架会将其后的字符串作为 URL地址来处理。

注意:在使用SpringMvc框架的转发和重定向时,它会自动跳过视图解析器,直接从项目的根目录中开始查找指定页面来返回。

SpringMVC中实现转发和重定向操作可以通过两种方式实现,一种是在学习servlet开发中的传统方式,另一种是SpringMVC框架提供的。

(1).以传统方式进行转发和重定向

下面的代码以跳转到index.jsp页面为例来看看如何实现转发与重定向。

请求转发的实现:

如何给SpringMVC中MethodParameter某个参数重新赋值 springmvc如何实现重定向_MVC


在使用forward进行转发时请求的URL链接是不会改变的。下面是重定向操作,同样使用request对象向转发的路径传递参数时,无法获取参数值。

如何给SpringMVC中MethodParameter某个参数重新赋值 springmvc如何实现重定向_重定向_02


在使用redirect进行重定向时请求的URL链接地址发生了改变,并且在controller控制层中request对象传递的参数并不能成功传递到下一个请求地址。那么,如果想要在重定向时把请求参数也传递过去应该怎么做呢?方法一:重定向之前把参数放进Session对象中

如何给SpringMVC中MethodParameter某个参数重新赋值 springmvc如何实现重定向_前端_03


方法二:使用RedirectAttributes类

如何给SpringMVC中MethodParameter某个参数重新赋值 springmvc如何实现重定向_http_04


使用RedirectAttributes类来传递参数的话,需要在controller控制层的重定向的方法参数中添加RedirectAttributes类型的参数,然后把需要传递的参数放到RedirectAttributes类的addFlashAttribute方法中就可以。实际上RedirectAttributes本质上也是通过Session来实现的。

转发和重定向区别总结:
(1)相同点:都是web开发中资源跳转的方式。
(2)不同点:
转发是服务器内部行为,不会改变地址栏内容,可以使用request域来传递参数。
重定向是浏览器行为,会改变地址栏内容,不可以使用request作用域来传递参数,可以使用Session和RedirectAttributes来传递。