先说一下SpringMVC的九大核心组件
/这九大组件都是接口,每个接口都有非常多的实现类,所以这就是面向接口编程的好处,如果某个组件的功能不够用了,就可以实现接口,完成功能/
1:
/* 支持文件上传功能*/
private MultipartResolver multipartResolver;
2:
/区域解析器,支持国际化功能/
private LocaleResolver localeResolver;
3:
/支持主题功能,但是很少用/
private ThemeResolver themeResolver;
4:
/Handler映射,保存ruquest请求的映射信息/
private List handlerMappings;
5:
/Handler适配器,找到能处理目标类方法的适配器(适配器模式)/
private List handlerAdapters;
6:
/异常解析器,支持强大的异常解析功能/
private List handlerExceptionResolvers;
7:
/请求视图转换器,将用户的请求转成视图(jsp,html)/
private RequestToViewNameTranslator viewNameTranslator;
8:
/支持重定向携带数据功能/
private FlashMapManager flashMapManager;
9:
/视图解析器/
private List viewResolvers;
这九大组件在服务器启动的时候就初始化了,SpringMVC先去ioc容器里去找
这些组件,会根据组件的类型或id寻找。如果没有找到组件,就使用每个组件默认的配置。
执行流程:(围绕着九大组件展开而来)
前端控制器DispatcherServlet拦截客户端的reqeust请求,并解析请求的资源表示符也就是URL,然后
根据URL获取HandlerMapping,HandlerMapping就是request请求的目标Controller的映射,根据这个
HandlerMapping,调用HandlerAdapter(Handler适配器)获取能处理目标类(Controller)方法
的适配器,然后这个适配器就会调用它自己的handle方法执行目标方法,当执行完handle方法后,就
会返回ModelAndView对象,这个ModelAndView就是模型视图,它的内部就是一个ModelMap(map)
和View(一个View,Object),存储了转向地址(view存储转向地址)和用户要转递的值(map存储要传
递的值),而viewResolvers就负责解析这个ModelAndView对象,然后前端控制器转发到解析的view视图对象。
最终就是这里解析的: