【Spring MVC 4 教程 01】基础概念

Spring MVC 是一个基于 mvc 的 java web 框架,是 spring 框架的一个模块,所以 Spring MVC 和 spring 无需通过中间整合层进行整合。

从这张 spring 著名的架构模型图来看,Spring MVC 在 spring 框架中所处的位置也只是 spring 中 web 的一块:

从图中可以看出,Spring MVC 是 spring 的一个 web 框架,所以上图中描述的是 spring web mvc,它和 struts2 的功能差不多。

现在有很多分析 Spring MVC 源码的视频和文档教程,其实整个 Spring MVC 的类图架构还是清晰和明了的。

上图的数字标号代表了 Spring MVC 的执行流程和大致顺序,下面展开详细说明。

  1. 向服务器发送 Http request 请求,请求被前端控制器(DispatcherServlet)捕获。
  2. 前端控制器根据 xml 文件中的配置(或者注解)对请求的 URL 进行解析,得到请求资源标识符(URI)。然后根据该 URI,调用处理器映射器(HandlerMapping)获得处理该请求的 Handler 以及 Handler 对应的拦截器,最后以 HandlerExecutionChain 对象的形式返回。
  3. 前端控制器根据获得的 Handler,选择一个合适的处理器适配器(HandlerAdapter)去执行该 Handler。
  4. 处理器适配器提取 request 中的模型数据,填充 Handler 入参,执行处理器(Handler)(也称之为 Controller)。
  5. Handler(Controller) 执行完成后,向处理器适配器返回一个 ModelAndView 对象,处理器适配器再向前端控制器返回该 ModelAndView 对象(ModelAndView 只是一个逻辑视图)。
  6. 根据返回的 ModelAndView,前端控制器请求一个适合的视图解析器(ViewResolver)(必须是已经注册到 Spring 容器中的 ViewResolver)去进行视图解析,然后视图解析器向前端控制器返回一个真正的视图 View(jsp、freemarker等)。
  7. 前端控制器通过 Model 解析出 ModelAndView 中的参数进行解析,最终展现出完整的 View 并通过 Http response 返回给客户端。

如果看文字有些迷糊的话,我在网上找到的大神画的的流程图,可以帮助更好的理解。

对于 Spring MVC 流程中的几个模块,在开发中我们接触的程度也是不同的。

  • 前端控制器DispatcherServlet(一般不需要程序员开发):接收请求,响应结果,相当于转发器,中央处理器。有了 DispatcherServlet 减少了与其它组件之间的耦合度。

  • 处理器映射器 HandlerMapping(一般不需要程序员开发):根据请求的 url 查找 Handler。

  • 处理器适配器 HandlerAdapter(不需要程序员开发):按照特定规则(HandlerAdapter 要求的规则)去执行 Handler。

  • 处理器 Handler(需要程序员开发):编写 Handle 时按照 HandlerAdapter 的要求去做,这样适配器才可以去正确执行 Handler,其实这块就是 MVC 中的 C (Controller)了。

  • 视图解析器 ViewResolver(一般不需要程序员开发):进行视图解析,根据逻辑视图名解析成真正的视图(view)

  • 视图 View(需要程序员开发):View 是一个接口,实现类支持不同的 View 类型(jsp、freemarker 等)

注意:这里说的一般不需要程序开发,意思是一般的 web 等应用项目需求情况下,这些部分只需要按照文档做好合适的配置就可以了。但是对于框架的开发者或插件开发者就需要深入研究了,比如我现在需要开发一种新的后端模板视图(类似于 jsp、freemarker 等) freedom,那么就需要处理各个模块了,至少你应该知道要写一个 ViewResolver


教程目录:Spring MVC 4 教程

如果觉得这对你有用,请随意赞赏,给与作者支持
评论 0
最新评论