SpringMVC流程
简单来说就是一个请求到达前端控制器,先由处理器映射器处理请求获得chain执行链,这个执行链还包含了拦截器,这个执行链经过处理器适配器拿到合适的处理器适配器,去执行相应的处理器方法,最终返回ModelAndView,接着通过视图解析器获取逻辑视图结合数据渲染为物理视图最终返回给用户
前言
在参考一个开源项目的时候看到在其代码编写在Controller层使用Map来共享数据,因为以前一直都是使用ModelAndView或者Model共享数据,想当然的以为这是SpringMVC专门用来共享数据的组件,其他的不行,于是看到可以这样用时,便开始疑惑,在查阅了一些资料以及自己debug之后,写下这一篇小小的分析总结
- 罪魁祸首
@RequestMapping(value = "/detail",method = RequestMethod.GET)
//这里使用Map来共享数据
public String detail(Long id,Map map){
OrderInfo orderInfo = orderInfoService.getById(id);
UserInfo userInfo = userInfoService.getById(orderInfo.getUserId());
List<OrderAction> orderActionList = orderActionService.getOrderAction(id);
map.put("userInfo",userInfo);
map.put("orderInfo",orderInfo);
map.put("orderActionList",orderActionList);
return "order/order_detail";
}
这个map是一个BindingAwareModelMap,这个map是怎么来的,SpringMVC是怎么帮我们封装参数的
从DispatcherServlet开始
在配置好web.xml之后,一切能够到达服务的请求都会到达DispatcherServlet,在DispatcherServlet做分发,在Servlet中,获取到适配器中后,调用适配器的handle来执行
DispatcherServlet
protected void doDispatch