以下内容基于书:《看透SpringMVC-源代码分析与实践》
基本照搬。。。用于自己查阅备忘。
加上外传关键字的是讨论一些SpringMVC的特定类的使用方法,
非外传的是对启动流程/请求处理流程,我们可以看作主线剧情。
什么是FlashMap?
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();