springMVC学习笔记(五)DispatchServlet与九大组件
springmvc源码分析
DispatchServlet
DispatchServlet的父级为FrameworkServlet,FrameworkServlet的父级为HttpServletBean,HttpServletBean的父级为HttpServlet,DispatchServlet其实本质是一个HttpServlet。
1、当一个请求进入时,会执行doGet/doPost方法,
2、HttpServletBean中没有doGet/doPost方法,
3、执行FrameworkServlet中的doGet/doPost
4、FrameworkServlet中的doGet/doPost方法调用了processRequest(request, response),processRequest中真正执行逻辑的是doService方法,而doService是一个抽象方法,需要子类继承
5、从而执行DispatchServlet中的doService。
6、doService方法中执行逻辑doDispatch方法。最终在doDispatch中完成请求调用的处理。
doDispatch()
1、调用getHandler()获取到能够处理当前请求的执行链HandlerExecutionChain
2、调用getHandlerAdapter(),获取能够执行handler的适配器
3、适配器调用handler执行ha.handle,返回一个ModeAndView对象
4、调用processDispatchResult方法完成视图渲染跳转
getHandler方法
1、遍历handlerMappings
2、
getHandlerAdapter方法
1、遍历handlerAdapters
2、
ha.handle
handle方法中调用invokeHandlerMethod对handlerMehod进行适配
invokeHandlerMethod中调用invokeForRequest ,在invokeForRequest中进行了参数数组化,并进行反射方法调用
springmvc九大组件
1、multipartResolver多部件解析器
2、localeResolver 国际化解析器
3、themeResolver 主题解析器
4、handlerMapping 处理器映射器
5、handlerAdapter 处理器适配器
6、handlerExceptionResolvers 异常解析器
7、viewNameTranslator 默认视图名转换器
8、flashMapManager flash属性管理
9、viewResolvers 视图解析器
上述九大组件都是定义了接口,接口其实是定义了规范。
九大组件初始化细节
spring容器启动时,在AbstractApplicationContext中的refresh方法中onReFresh子类DispatchServlet实现该方法,进行九大组件初始化。