- 在Web容器第- -次用到DispatcherServlet的时候,会创建其对象并执行init方法init 方法内会创建Spring Web容器,并调用容器refresh方法refresh 过程中会创建并初始化SpringMVC中的重要组件,例如MultipartResolver, HandlerMapping,
HandlerAdapter, HandlerExceptionResolver.ViewResolver等容器初始化后, 会将上一步初始化好的重要组件,赋值给DispatcherServlet的成员变量,留待后用
1、HandlerMapping:做请求映射的,根据你的请求路径找到一个控制器和对应的方法。(将浏览器的请求映射到控制器的方法上)
2、HandlerAdapter:调用和真正执行控制器的方法。如果在处理的过程中出现了异常交给HandlerExceptionResolver来处理异常。
3、ViewResolver:控制器方法执行完毕会将其结果封装为ModelAndView对象,ViewResovler将视图的字符串解析为视图对象。
4、视图对象进行页面渲染的工作。
MultipartResolver:不是必须的,文件上传的时候需要
匹配阶段: 1.用户发送的请求统一 到达前端控制器 DispatcherServlet
- DispatcherServlet 遍历所有HandlerMapping ,找到与路径匹配的处理器
①HandlerMapping有多个,每个HandlerMapping会返回不同的处理器对象,谁先匹配,返回谁的处理器。其中能识别@RequestMapping的优先级最高
②对 应@RequestMapping的处理器是HandlerMethod,它包含了控制器对象和控制器方法信息
③其中路径 与处理器的映射关系在HandlerMapping初始化时就会建立好将 HandlerMethod连同匹配到的拦截器,生成调用链对象HandlerExecutionChain返回遍历HandlerAdapter 处理器适配器,找到能处理HandlerMethod的适配器对象,开始调用
- 执行拦截器preHandle由HandlerAdapter调用HandlerMethod
①调用 前处理不同类型的参数
②调用后处理不同类型的返回值第 2步没有异常
①返回 ModelAndView
②执行拦截 器postHandle方法
③解析视图, 得到View对象,进行视图渲染第2 步有异常,进入HandlerExceptionResolver异常处理流程最后都会执行拦截器的 afterCompletion方法如果控制器方法标注 了@ResponseBody注解,则在第2步,就会生成json结果,并标记ModelAndView已处理,这样就不会执行第3步的视图渲染
出现异常时,没有机会执行postHandle



