美文网首页
SpringMVC中的FlashMap

SpringMVC中的FlashMap

作者: SouthLight_Lin | 来源:发表于2019-01-17 19:38 被阅读0次

    我们都知道,重定向时一般都是不传数据的,如果一定要传数据,只能在URL中拼接字符串来传递,但是通过拼接字符串有缺点,比如长度问题,安全问题

    那有没有什么方法能做到隐藏传送呢?
    答案就是SpringMVC中的FlashMap!

    在SpringMVC中,每次请求都会走到DispatcherServlet的service方法中(因为重写了HttpServlet的service方法)
    当进入service方法后,有趣的事情来了:
    Spring会先判断目前这个请求request中的FlashMap会不会等于null

    // 每次处理请求时,都会先判断一下FlashMap中是否有数据
    // 如果有就先设置到 inputFlashMap里面,也就是保存上次转发过来的属性
    // 再设置到Model里面
    FlashMap inputFlashMap = this.flashMapManager.retrieveAndUpdate(request, response);
    if (inputFlashMap != null) {
       request.setAttribute(INPUT_FLASH_MAP_ATTRIBUTE, Collections.unmodifiableMap(inputFlashMap));
    }
    

    如果不为空,就代表前一次请求(一般是重定向)中有设置参数,就把这些参数存进现在的FlashMap中

    request.setAttribute(INPUT_FLASH_MAP_ATTRIBUTE, Collections.unmodifiableMap(inputFlashMap));
    

    这样的话请求中就带有上一个重定向传过来的参数了!!

    SpringMVC中使用redirect传递参数的三种方法:

    public String test(RedirectAttributes attr){
            //第一种,使用RequestContextHolder获得FlashMap
    //        ((FlashMap)((ServletRequestAttributes)(RequestContextHolder.getRequestAttributes())
    //                .getAttribute(DispatcherServlet.OUTPUT_FLASH_MAP_ATTRIBUTE)
        // emm..第一种忘了怎么写了
            // 第二种
            attr.addFlashAttribute("userName", "SouthLight-Lin");
            
            // 第三种,直接拼接在URL中,不会被隐藏
            attr.addAttribute("local", "zh-cn");
            
            
            return null;
        }
    

    相关文章

      网友评论

          本文标题:SpringMVC中的FlashMap

          本文链接:https://www.haomeiwen.com/subject/vpkwdqtx.html