一、SpringMVC概述

1. 什么是SpringMVC?
  SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于 SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块,使用 Spring 可插入的 MVC 架构,从而在使用 Spring 进行 WEB 开发时,可以选择使用 Spring的 Spring MVC 框架或集成其他 MVC 开发框架,如 Struts2。SpringMVC 已经成为目前最主流的 MVC 框架之一,从 Spring3.0 的发布,就已全面超越 Struts2,成为最优秀的MVC 框架。它通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口,同时它还支持RESTful 编程风格的请求。

2. SpringMVC在三层架构中的位置

三层架构


二、SpringMVC的主要组件

1. DispatcherServlet
  DispatcherServlet是前端控制器,所有的请求都经过它来统一分发。在DispatcherServlet将请求分发给Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具体的Controller。前端控制器(DisatcherServlet)接收用户请求,响应结果,返回可以是json、String等数据类型,也可以是页面(Model)。DispatcherServlet 的存在降低了组件之间的耦合性。

2. HandlerMapping
  HandlerMapping是处理器映射器,负责根据用户请求(URL)找到 Handler 即处理器, SpringMVC 提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。HandlerMapping能够完成客户请求到Controller映射。

3. Handler
  Handler是处理器,即controller是开发中要编写的具体业务控制器。由 DispatcherServlet 把用户请求转发到 Handler,由Handler 对具体的用户请求进行处理。一旦Handler处理完用户请求,则返回ModelAndView对象给HandlAdapter处理器适配器,ModelAndView中包含了模型(Model)和视图(View)。

4. HandlAdapter
  HandlAdapter是处理器适配器,通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。处理器适配器可以将处理器包装成适配器,这样就可以支持多种类型的处理器。

5. ViewResolver
  ViewResolver是视图解析器,负责将处理结果生成 View 视图, View Resolver 首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。


三、Spring MVC的工作原理

Spring MVC核心流程

具体步骤:

  • 第一步:浏览器发起请求到前端控制器(DispatcherServlet);

  • 第二步:前端控制器请求处理器映射器(HandlerMapping)查找 处理器(Handler) ,可以根据xml配置、注解进行查找;

  • 第三步:找到以后HandlerMapping向前端控制器返回执行链(HandlerExecutionChain),HandlerExecutionChain对象包含一个Handler处理器(页面控制器)对象,多个HandlerInterceptor拦截器对象;

  • 第四步:前端控制器调用处理器适配器去执行Handler;

  • 第五步:处理器适配器HandlerAdapter将会根据适配的结果去执行Handler;

  • 第六步:Handler执行完成给适配器返回ModelAndView(ModelAndView是springmvc框架的一个底层对象,包括 Model和view);

  • 第七步:处理器适配器向前端控制器返回ModelAndView ;

  • 第八步:前端控制器请求视图解析器(ViewResolver)去进行视图解析 (根据逻辑视图名解析成真正的视图如:jsp),通过这种策略很容易更换其他视图技术,只需要更改视图解析器即可;

  • 第九步:视图解析器向前端控制器返回View;

  • 第十步:前端控制器进行视图渲染 (视图渲染将模型数据(在ModelAndView对象中)填充到request域);

  • 第十一步:前端控制器向用户响应结果。


四、SpringMVC总结

1、DispatcherServlet 在 web.xml 中的部署描述,从而拦截请求到 Spring Web MVC;

2、HandlerMapping 的配置,从而将请求映射到处理器;

3、HandlerAdapter 的配置,从而支持多种类型的处理器;

4、处理器(页面控制器)的配置,从而进行功能处理 ;

5、ViewResolver 的配置,从而将逻辑视图名解析为具体视图技术。


星河滚烫,你是人间理想