SpringMVC控制器设值原理分析(ModelAndView的值通过HttpServletRequest直接取到的原因)

@RequestMapping("/userlist.do")
    public String getUserList(Model model){
        
        HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();  
        model.addAttribute("userList", sysUserService.findAll());
        
        return "user_list";
    }

通常在编码时,只需要往model中addAttribute()值后,就可以在JSP中通过EL表表达式,或者JSTL标签直接取到值了:

 

SpringMVC控制器设值原理分析(ModelAndView的值通过HttpServletRequest直接取到的原因)

常规的理解是,EL和JSTL只是取Request、Session等作用域中的数据的,那么SpringMVC何时将代码中的model中的“userList”集合数据转存到了request作用域中的呢?

DEBUG SpringMVC源码之DispatchServlet的1208行----->AbstractView第367行才明了:

SpringMVC控制器设值原理分析(ModelAndView的值通过HttpServletRequest直接取到的原因)