六、Spring MVC
1、SpringMVC 工作原理?
客户端发送请求到 DispatcherServlet DispatcherServlet 查询 handlerMapping 找到处理请求的 Controller Controller 调用业务逻辑后,返回 ModelAndView DispatcherServlet 查询 ModelAndView,找到指定视图 视图将结果返回到客户端
2、SpringMVC 流程?
用户发送请求至前端控制器 DispatcherServlet。 DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。 处理器映射器找到具体的处理器(可以根据 xml 配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet。 DispatcherServlet 调用 HandlerAdapter 处理器适配器。 HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器)。 Controller 执行完成返回 ModelAndView。 HandlerAdapter 将 controller 执行结果 ModelAndView 返回给 DispatcherServlet。 DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器。 ViewReslover 解析后返回具体 View。 DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中)。 DispatcherServlet 响应用户。
3、 Spring MVC 执行流程详述
概要
我把整个流程分成三个阶段
准备阶段 匹配阶段 执行阶段
准备阶段
在 Web 容器第一次用到 DispatcherServlet 的时候,会创建其对象并执行 init 方法 init 方法内会创建 Spring Web 容器,并调用容器 refresh 方法 refresh 过程中会创建并初始化 SpringMVC 中的重要组件, 例如 MultipartResolver,HandlerMapping,HandlerAdapter,HandlerExceptionResolver、ViewResolver 等 容器初始化后,会将上一步初始化好的重要组件,赋值给 DispatcherServlet 的成员变量,留待后用

匹配阶段
用户发送的请求统一到达前端控制器 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 步的视图渲染
文章转载自小薛博客,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




