SpringMVC简介

226 阅读5分钟

1、什么是MVC

MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分
M:Model,模型层,指工程中的JavaBean,作用是处理数据 JavaBean分为两类:

  • 一类称为实体类Bean:专门存储业务数据的,如Student、User等
  • 一类称为业务处理Bean:指Service或者Dao对象,专门用于处理业务逻辑和数据访问。 V:View,视图层,指工程中的html或者jsp页面,作用是与用户进行交互,展示数据 C:Controller,控制层,指工程中的servlet,作用是接收请求和响应浏览器。

MVC的工作流程:
用户通过视图层发送请求到服务器,在服务器中被controller接收,Controller调用相应的Model层处理请求,处理完毕将结果返回到Controller,Controller再根据请求找到相应的view视图,渲染数据后最终响应给浏览器。

2、什么是SpringMVC

是Spring的一个后续产品,是Spring的一个子项目 SpringMVC是Spring为表述层开发提供的一套完备的解决方案,在表述层框架经历Strust、WebWork、Strust2等诸多产品的历代更迭之后,目前业界普遍选择SpringMVC作为JavaEE是项目表述层开发的首选方案。 注:三层架构分为表述层、业务逻辑层、数据访问层,表述层表示前台页面和后台servlet

3、SpringMVC的特点

  • Spring家族原生产品,与IOC容器等基础设施无缝对接
  • 基于原生的Servlet,通过功能强大的前端控制器DispatcherServlet,对请求和响应进行统一处理。
  • 表述层各细分领域需要解决问题的全方位覆盖,提供全面解决方案
  • 代码清新简洁,大幅提升开发效率
  • 内部组件化程度高,可插拔式组件即插即用,想要什么功能配置相应组件即可
  • 性能卓著,尤其适合现代大型、超大型互联网项目需求

4、SpringMVC的中心控制器

Spring的web框架围绕DispatcherServlet设计。DispatcherServlet的作用是将请求分发到不同的处理器。从Spring 2.5开始,使用Java 5或者以上版本的用户可以采用基于注解的controller声明方式。

Spring MVC框架像许多其他MVC框架一样, 以请求为驱动 , 围绕一个中心Servlet分派请求及提供其他功能DispatcherServlet是一个实际的Servlet (它继承自HttpServlet 基类)

image.png SpringMVC的原理如下图所示:

当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。

image.png

5、SpringMVC的执行原理

image.png 图为SpringMVC的一个较完整的流程图,实线表示SpringMVC框架提供的技术,不需要开发者实现,虚线表示需要开发者实现。 简要分析执行流程

  1. DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。

    我们假设请求的url为 : http://localhost:8080/SpringMVC/hello

    如上url拆分成三部分:

    http://localhost:8080服务器域名

    SpringMVC部署在服务器上的web站点

    hello表示控制器

    通过分析,如上url表示为:请求位于服务器localhost:8080上的SpringMVC站点的hello控制器。

  2. HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url查找Handler。

  3. HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为:hello。

  4. HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。

  5. HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。

  6. Handler让具体的Controller执行。

  7. Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。

  8. HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。

  9. DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。

  10. 视图解析器将解析的逻辑视图名传给DispatcherServlet。

  11. DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。

  12. 最终视图呈现给用户。

5、流程总结

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

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

第三步:处理器映射器(HandlerMapping)向前端控制器返回Handler

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

第五步:处理器适配器去执行Handler

第六步:Handler执行完成给适配器返回ModelAndView

第七步:处理器适配器向前端控制器返回ModelAndView ModelAndView是springmvc框架的一个底层对象,包括 Model和view

第八步:前端控制器请求视图解析器去进行视图解析

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

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

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