转发forward(常用)
流程:客户端浏览器发送http请求---->web服务器接收该请求并转发请求(在方法内转发到了另一个请求)---->web服务器实现请求的转发处理并执行结果(可能是另一个action,视图等)---->web服务器发送结果到浏览器。
特点:浏览器发出一次请求,客户端地址不变,只能转发到当前web下的请求,速度快。
代码实现:return "forward:hello.action";
response.sendRedirect(" ");
参数:由于是同一次的请求,参数通过model可以从一个请求,转发到web内的另一个请求中。
重定向redirect
流程:客户端浏览器发送http请求---->web服务器接收该请求并转发请求---->web服务器发送新的location以及302码到浏览器---->客户端浏览器检测到302码并发送请求到location地址---->location地址的服务器处理请求并返回结果---->客户端浏览器。
特点:浏览器发出2次请求,客户端地址变化,可到非当前web下的地址。
代码实现:可重定向到页面或者特定请求中,return "redirect:/interview.html";
request.getRequestDispatcher(" ").forward(request,response);
参数携带: return “redirect:/index?param1=value1″;
使用RedirectAttributes完成参数传递
使用场景:重定向到一个外部网站,避免用户刷新页面时导致的表单重复提交问题。
RedirectAttributes
Spring3.1版本添加的参数,用于action1中重定向到action2时的参数传递工作,使用时需添加配置<mvc:annotation-driven />。
redirectAttributes.addAttribute("param", "value");
相当于在重定向的url后拼接参数,action2.do?Param=value。即重定向之后的页面或者控制器获取参数即可。参数暴露,有风险。
redirectAttributes.addFlashAttribute("param", value);
通过该方式传递的参数,在action2中不能获取;但是在action2跳转到的视图view中,可以通过el表达式获取到action1中的参数。且只能一次获取,即刷新页面之后,参数获取不到。
Flash attributes对重定向之前的参数进行了临时存储(通常是在session)中,并且在重定向之后被立即移除。故在重定向只有的视图中参数可以显示,且刷新后丢失。