请求转发与重定向
最大区别请求转发是一次请求一次响应,重定向是两次请求两次响应
请求转发只能访问同一站点资源,然而重定向不仅可以访问同一站点资源还可以访问其他不同站点的资源(所以说要用哪一个去切换页面,访问范围也是很重要 的一个点)
重定向的第二次请求一定是 GET,第一次请求不确定,可以是 GET,也可以是 POST。
转发2次跳转之间传输的信息不会丢失,重定向2次跳转之间传输的信息会丢失(request范围)。
请求转发是服务器端行为,只需给出转发的 Servlet 路径,而重定向是客户端重新请求,需要给出 requestURI,即包含项目名!
请求转发与重定向相比,请求转发的效率高!因为是一个请求!
//获得转发对象getRequestDispatcher()
HttpServletRequest(httpServletRequest).getRequestDispatcher
ServletContext.getRequestDispatcher();
//获得重定向对象sendRedirect()
HttpServletResponse(httpServletResponse).sendRedirect();
使用重定向不太方便的地方是,使用它无法将值轻松地传递给目标页面。而采用转发,则可以简单地将属性添加到Model,使得目标视图可以轻松访问。由于重定向经过客户端,所以Model中的一切都会在重定向时丢失。但幸运的是,在Spring3.1版本以后,我们可以通过Flash属性,解决重定向时传值丢失的问题。
要使用Flash属性,必须在Spring MVC的配置文件中添加一个<annotation-driven/>。然后,还必须再方法上添加一个新的参数类型:org.springframework.web.servlet.mvc.support.RedirectAttributes。
如下所示:
@RequestMapping(value="saveProduct",method=RequestMethod.POST)
public String saveProduct(ProductForm productForm,RedirectAttributes redirectAttributes){
//执行产品保存的业务逻辑等
//传递参数
redirectAttributes.addFlashAttribute("message","The product is saved successfully");
//执行重定向
return "redirect:/……";
}

浙公网安备 33010602011771号