浅谈 SpringMVC 五大组件以及对执行原理的分析
Spring MVC 是包含在 spring 中的一个基于 MVC 设计思想的 Web 应用程序框架,目的是简化开发工作,提高开发效率。
优点
和 Spring 框架无缝集成,能直接使用 Spring 的 IoC 容器、AOP 支持;
提供了多种将请求 URL 映射到控制器的机制;并支持参数的类型转换,自动装载,校验等功能;
具有强大的扩展性,可根据需要方便的扩展框架的功能。
SpringMVC 五大组件
DispatcherServlet 负责分发请求(前端(核心)控制器)
HandlerMapping 负责根据请求 找到对应的控制器(处理器映射器)
Controller 处理请求的控制器
ModelAndView 封装数据信息以及视图信息
ViewResolver 通过处理找到对应的页面(视图解析器)
1、DispatcherServlet (前端(核心)控制器)
DispatcherServlet 是 SpringMVC 最核心的一个控件。它是前端核心控制器,在 web.xml 中进行相关的配置。它可以将发送过来的请求进行匹配操作,再进行拦截。将拦截下来的所有请求根据对应的规则发送到对应的 Controller 进行处理。它是前端控制器设计模式的实现,能够提供 Spring Web MVC 的集中节点,而且负责职责的分派,而且与 Spring IoC 容器无缝集成。
配置 DispatcherServlet :
DispatcherServlet 配置在 web.xml 文件中。init-param 为 Servlet 启动所需参数。DispatcherServlet 会读取初始 shucontextConfigLocation 参数里面的值从而获取 springmvc 的配置位置自启动容器
2、HandlerMapping (处理器映射器)
HandlerMapping 是处理器映射,它的关键作用是将请求进行派发,负责请将求与控制器建立互相对应的关系。它最终由 DispatcherServlet 调用,DispatcherServlet 会从容器中取出所有 HandlerMapping 实例并遍历,让 HandlerMapping 实例根据自己实现类的方式去尝试查找 Handler。它标明了路径与 Controller 的对应关系,不同的路径访问不同的 Controller
配置 HandlerMapping :
3、Controller (处理请求的控制器)
处理请求的控制器,负责处理由 DispatcherServlet 分发的请求,把用户请求的数据发送到业务处理层处理之后封装成一个 Model ,然后把该 Model 返回给对应的 View 进行展示。它实际上就是用来处理业务逻辑的 Java 类。
配置 Controller 类 :
4、ModelAndView (封装数据和视图信息)
ModelAndView 是进行封装数据信息和视图信息的模型。使用 ModelAndView 类用来存储处理完后的结果数据。ModelAndView 中的 Model 代表模型,View 代表视图,很好地解释了该类的作用。业务处理器调用模型层处理完用户请求后,把结果数据存储在该类的 model 属性中,把要返回的视图信息存储在该类的 view 属性中,然后返回给 SpringMVC 框架。框架通过调用配置文件中定义的视图解析器,对该对象进行解析,最后把结果数据显示在指定的页面上。
5、ViewResolver (视图解析器)
视图解析器 ViewResolver 的主要作用是把一个逻辑上的视图名称解析为一个视图。
配置 ViewResolver :
SpringMVC 执行原理
发起请求到前端控制器 DispatcherServlet
前端控制器调用处理器映射器 HandlerMapping 查找 Handler
处理器映射器向前端控制器返回找到的 Handler
前端控制器调用处理器适配器 HandlerAdapter 执行 Handler
处理器适配器去执行 Handler
Handler 执行完成给处理器适配器返回 ModelAndView
处理器适配器向前端控制器返回 ModelAndView
前端控制器请求视图解析器 ViewResolver 去进行视图解析
视图解析器向前端控制器返回视图 View
前端控制器进行视图渲染向用户响应结果
总结
DispatcherServlet(前端控制器)接收来自客户端的 URL 请求。请求分发器借助处理器映射器(HandlerMapping)来查找对应的处理器 Handler(控制器),分发本次请求。请求分发器利用处理器适配器(HandlerAdapter)来执行对应的处理器(控制器)。处理器调用方法处理本次请求,返回模型视图对象(ModelAndView)。请求分发器借助视图解析器(ViewResolver)解析模型视图,得到对应的视图(View)。请求分发器调用视图中的方法,同时将数据模型交给视图对象,完成给客户端的应答。
版权声明: 本文为 InfoQ 作者【百思不得小赵】的原创文章。
原文链接:【http://xie.infoq.cn/article/4ca0182de090a9f302fb62aa7】。文章转载请联系作者。
评论