一、重定向
1.方法一:再返回结果前加一个前缀 “ redirct”;
可以重定向到一个指定的页面,也可以是另一个页面。
例: return “redirect:action2”;
2. 为了实现重定向时传递复杂数据,可以使你用Flash属性
@RequestMapping("/action3")
public String action3(Model model, RedirectAttributes redirectAttributes) {
Product product = new Product(2, “iPhone7 Plus”, 6989.5);
redirectAttributes.addFlashAttribute(“product”, product);
return “redirect:action2”;
}
二、转发
- str = forword : 路径
- str = forword : controller 的映射 请求转发到一个 controller 方法中
@RequestMapping("/act12")
public String act12(Model model){
model.addAttribute("msg","act12");
return "forward:act11";
}
三、
(一). forward与redirect的区别?
a、转发在服务端完成,重定向在客户端完成
b、转发的速度快,重定向速度慢
c、转发是同一次请求,重定向是两次不同的请求
d、转发不会执行转发后的代码,重定向会执行重定向之后的代码
e、转发地址栏没变化,重定向有变化
f、转发必须是在同一台服务器完成,重定向可以在不同的服务器下完成
注:1.转发,可以传递request的值;重定向是重新发送请求,原来的请求参数值没有了。
2.重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域,浏览器中所显示的URL会变成新页面的URL, 重定向的速度比转发慢,因为浏览器还得发出一个新的请求。
(二)Flash属性
1.使用重定向之后,在reqeust之中的属性将会丢失,但是可以在控制器方法中指定@RedirectAttributes传递参数,然后通过其的addAttribute进行参数的指定即可
2.使用@RedirectAttributes指定属性之后经过重定向可以使用reqeust.getParameter进行获取
(三)返回值是String的时候,重定向是通过在返回地址前加上"redirect:"