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();
     
  • 相关阅读:
    Codeforces Round #609 (Div. 2)---C. Long Beautiful Integer
    Codeforces Round #609 (Div. 2)--B.Modulo Equality
    J
    G
    Convoy
    Farming Mars
    Java indexOf() 方法
    request.getContextPath()得到的是什么路径?
    OLAP、OLTP的介绍和比较
    Book recommendation
  • 原文地址:https://www.cnblogs.com/fupengpeng/p/7382684.html
Copyright © 2011-2022 走看看