标签:
以下内容基于书:《看透SpringMVC-源代码分析与实践》
基本照搬。。。用于自己查阅备忘。
加上外传关键字的是讨论一些SpringMVC的特定类的使用方法,
非外传的是对启动流程/请求处理流程,我们可以看作主线剧情。
flashmap的作用是在redirect中传递参数。大家都知道转发 request是不变的,重定向会生成新的request,那传递参数就不能直接用request进行传递。
spring提供了相应的方法解决这个问题,两种方法:
//1.得到一个FlashMap,然后直接调用put方法,如:
flashmap.put("name","xialu");
//2.在handler的方法参数中传入RedirectAttributes类型的变量,这个用起来简便,但是有局限性。如:
@RequestMapping("test")
public String test(RedirectAttributes attr){
attr.addAttribute("name","xialu"); //这里传入的参数会出现在重定向后的url中,相当于get方式。
attr.addFlashAttribute("name","xialu"); //这里传入的参数会用flashmap保存
return "redirect:index.do";
}
获得flashmap的三种方式,这里引用的request是该次请求的HttpServletRequest:
//1.RequestContextUtils是spring提供的类,其实做法和第二条一模一样了。
FlashMap flashmap = RequestContextUtils.getOutputFlashMap(request);
//2.
FlashMap flashmap = ((FlashMap)(request.getAttribute(DispatcherServlet.OUTPUT_FLASH_MAP_ATTRIBUTE)));
获得HttpServletRequest的两种方法:
//1.直接从Controller的方法参数中获取
@RequestMapping("test")
public void test(HttpServletRequest request){
}
//2.通用的方法,在哪里都可以调用
HttpServletRequest request = ((ServletRequestAttributes)(RequestContextHolder.getRequestAttributes())).getRequest();
SpringMVC源代码学习外传(二)如何在重定向时传递参数&FlashMap
标签:
原文地址:http://blog.csdn.net/xia4820723/article/details/51345559