springmvc学习
SpringMvc初始化
Springmvc的入口是DispatcherServlet,先从这里看起DispatcherServlet的继承关系图
初始化
DispatchServlet中的static块
在static块中加载了一个与DispatcherServlet同包下的名为DispatcherServlet.properties的配置文件,使用配置文件中的配置作为DispatcherServlet运行时的默认策略组件
init方法
DispatcherServlet继承了HttpServlet,在web容器初始化后会调用Servlet#init(ServletConfig)方法进行初始化
初始化调用流程
- javax.servlet.GenericServlet#init(javax.servlet.ServletConfig)
 将ServletConfig赋值给自身的config属性,使子类可以通过- javax.servlet.GenericServlet#getServletConfig()获取
- org.springframework.web.servlet.HttpServletBean#init()
 将配置信息设置到- DispatcherServlet中- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10- //获得web.xml中的contextConfigLocation配置属性,就是spring MVC的配置文件 
 PropertyValues pvs = new ServletConfigPropertyValues(getServletConfig(), this.requiredProperties);
 BeanWrapper bw = PropertyAccessorFactory.forBeanPropertyAccess(this);
 //获取服务器的各种信息
 ResourceLoader resourceLoader = new ServletContextResourceLoader(getServletContext());
 bw.registerCustomEditor(Resource.class, new ResourceEditor(resourceLoader, getEnvironment()));
 //模板方法,可以在子类中调用(DispatcherServlet没有),做一些初始化工作,bw代表DispatcherServelt
 initBeanWrapper(bw);
 //将配置的初始化值设置到DispatcherServlet中
 bw.setPropertyValues(pvs, true);
- org.springframework.web.servlet.FrameworkServlet#initServletBean()
 初始化SpringMvc的Ioc容器
- org.springframework.web.servlet.DispatcherServlet#onRefresh()
 初始化- DispatcherServlet的各个组件- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20- protected void initStrategies(ApplicationContext context) { 
 // 文件上传请求的解析器
 initMultipartResolver(context);
 // 本地化解析器
 initLocaleResolver(context);
 // 主题解析器
 initThemeResolver(context);
 // 通过HandlerMapping,将请求映射到处理器
 initHandlerMappings(context);
 // 通过HandlerAdapter支持多种类型的处理器
 initHandlerAdapters(context);
 // 如果执行过程中遇到异常,将交给HandlerExceptionResolver来解析
 initHandlerExceptionResolvers(context);
 // 直接解析请求到视图名
 initRequestToViewNameTranslator(context);
 // 通过viewResolver解析逻辑视图到具体视图实现
 initViewResolvers(context);
 // FlashMapManager请求重定向数据管理器
 initFlashMapManager(context);
 }