【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 的执行流程和大致顺序,下面展开详细说明。
- 向服务器发送 Http request 请求,请求被前端控制器(
DispatcherServlet
)捕获。 - 前端控制器根据 xml 文件中的配置(或者注解)对请求的 URL 进行解析,得到请求资源标识符(URI)。然后根据该 URI,调用处理器映射器(
HandlerMapping
)获得处理该请求的Handler
以及 Handler 对应的拦截器,最后以HandlerExecutionChain
对象的形式返回。 - 前端控制器根据获得的 Handler,选择一个合适的处理器适配器(
HandlerAdapter
)去执行该 Handler。 - 处理器适配器提取 request 中的模型数据,填充 Handler 入参,执行处理器(
Handler
)(也称之为Controller
)。 - Handler(Controller) 执行完成后,向处理器适配器返回一个
ModelAndView
对象,处理器适配器再向前端控制器返回该 ModelAndView 对象(ModelAndView 只是一个逻辑视图)。 - 根据返回的 ModelAndView,前端控制器请求一个适合的视图解析器(
ViewResolver
)(必须是已经注册到 Spring 容器中的 ViewResolver)去进行视图解析,然后视图解析器向前端控制器返回一个真正的视图 View(jsp、freemarker等)。 - 前端控制器通过 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 教程