<返回更多

一篇文章搞懂SpringMVC核心执行原理

2020-10-14    
加入收藏

JAVA程序员来讲,做web开发最熟悉的框架莫过于SpringMVC了。之所以它能一统江湖,不是自己太优秀,而是对手太坑了,不知道大家还记不记得2017年左右Struts2爆出了一个大漏洞,自此之后,Web开发领域的就是SpringMVC的天下了。

 

但是鉴于这么优秀的框架,很多程序员还只是停留在会用的状态,对底层的原理却不甚了解,所以今天咱么就来聊聊SpringMVC的工作原理

 

三层架构

 

在开始介绍SpringMVC之前,咱么要先来了解一下web开发的历史。我们的开发架构一般都是基于两种形式一种是C/S架构,也就是客户端/服务器,另一种是B/S架构,也就是浏览器/服务器。而在JavaWeb开发中,几乎都是采用B/S架构的开发模式,在这种架构模式中,将整个业务应用划分为三层架构,分别是::表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL),核心的思想就是“高内聚,低耦合”。

一篇文章搞懂SpringMVC核心执行原理

 

 

一篇文章搞懂SpringMVC核心执行原理

 

MVC框架模式

 

MVC全称是【ModelView Controller】,模型(Model)是-视图(View)-控制器(Controller)的缩写,是一种软件设计模式,是一种架构思想,体现的是责任分离思想,各自做各自最擅长的事情。它是基于表现层把程序分为三大部分:模型、视图、控制器,每一部分又有其单独的意含义。

 

 

SpringMVC 的概念

 

SpringMVC 是一种基于Java 的实现 MVC 设计模型的请求驱动类型的轻量级Web 框架,是Spring 框架提供的构建Web 应用程序的全功能 MVC模块。目前SpringMVC 已经成为目前最优秀的MVC 框架之一。特别是支持RESTful编程风格,更是和微服架构的无缝契合。

一篇文章搞懂SpringMVC核心执行原理

 

SpringMVC的核心组件

 

1.DispatcherServlet【前端控制器】

相当于中央处理器,用来分发请求的不同的处理流程,如:分发到HandlerMApping、HandlerAdapter、View resolver等。

 

2.Controller【处理器】

处理不同类型的业务请求,如:增删改查的业务。

 

3.HandlerMapping【处理器映射器】

根据用户请求找到Handler即处理器,SpringMvc提供了不同的映射器实现不同的映射方式,如:配置文件方式,实现接口方式,注解方式。

 

4.HandlerAdapter【处理器适配器】

通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。

一篇文章搞懂SpringMVC核心执行原理

 

5.View resolver【视图解析器】

进行视图解析,根据逻辑视图名解析成真正的视图View视图,最终需要通过网页将数据模型展示给用户。

 

执行流程

 

下面我们来通过一张SpringMVC的流程图,来看一下它的每个组件都是用来的干啥的,有什么作用,明白了这些之后,以后开发的时候就可以很清楚的知道一个请求过来之后,都经过了哪些组件,每一个组件都发挥了什么样的作用。

 

根据这张流程图,我们再来分别解释一下每一步以及每一个组件的具体作用。

 

  1. 用户发送请求至前端控制器DispatcherServlet,进行分发处理。
  2. DispatcherServlet收到请求调用处理器映射器HandlerMapping。
  3. 处理器映射器根据请求url找到具体的处理器,生成处理器执行链HandlerExecutionChain(包括处理器对象和处理器拦截器)一并返回给DispatcherServlet。
  4. DispatcherServlet根据处理器Handler获取处理器适配器HandlerAdapter执行HandlerAdapter处理一系列的操作,如:参数封装,数据格式转换,数据验证等操作。
  5. 执行处理器Handler(Controller,也叫页面控制器)。
  6. Handler执行完成返回ModelAndView。
  7. HandlerAdapter将Handler执行结果ModelAndView返回到DispatcherServlet。
  8. DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
  9. ViewReslover解析后返回具体View。
  10. DispatcherServlet对View进行渲染视图(即将模型数据model填充至视图中)。
  11. 最终DispatcherServlet响应用户。

 

通过以上对每个组件的介绍,以及每个组件的作用,和各组件中的调用关系;明白了这些之后,我们使用SpringMVC的时候,在脑子里就会一张流程图,知道每一个请求来了之后,都做了哪些动作,如果后期我们想对一些请求进行干预的话,就可以方便的找到对应的组件,对应的位置来进行干预。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>