zoukankan      html  css  js  c++  java
  • SpringMVC源代码学习外传(二)如何在重定向时传递参数&FlashMap

    以下内容基于书:《看透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();
     
  • 相关阅读:
    BZOJ 2212/BZOJ 3702
    BZOJ 4761 Cow Navigation
    BZOJ 3209 花神的数论题
    BZOJ 4760 Hoof, Paper, Scissors
    BZOJ 3620 似乎在梦中见过的样子
    BZOJ 3940 Censoring
    BZOJ 3942 Censoring
    BZOJ 3571 画框
    BZOJ 1937 最小生成树
    BZOJ 1058 报表统计
  • 原文地址:https://www.cnblogs.com/fupengpeng/p/7382684.html
Copyright © 2011-2022 走看看