对JAVA程序员来讲,做web开发最熟悉的框架莫过于SpringMVC了。之所以它能一统江湖,不是自己太优秀,而是对手太坑了,不知道大家还记不记得2017年左右Struts2爆出了一个大漏洞,自此之后,Web开发领域的就是SpringMVC的天下了。
但是鉴于这么优秀的框架,很多程序员还只是停留在会用的状态,对底层的原理却不甚了解,所以今天咱么就来聊聊SpringMVC的工作原理。
三层架构
在开始介绍SpringMVC之前,咱么要先来了解一下web开发的历史。我们的开发架构一般都是基于两种形式,一种是C/S架构,也就是客户端/服务器,另一种是B/S架构,也就是浏览器/服务器。而在JavaWeb开发中,几乎都是采用B/S架构的开发模式,在这种架构模式中,将整个业务应用划分为三层架构,分别是::表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL),核心的思想就是“高内聚,低耦合”。
MVC框架模式
MVC全称是【ModelView Controller】,模型(Model)是-视图(View)-控制器(Controller)的缩写,是一种软件设计模式,是一种架构思想,体现的是责任分离思想,各自做各自最擅长的事情。它是基于表现层把程序分为三大部分:模型、视图、控制器,每一部分又有其单独的意含义。
SpringMVC 的概念
SpringMVC 是一种基于Java 的实现 MVC 设计模型的请求驱动类型的轻量级Web 框架,是Spring 框架提供的构建Web 应用程序的全功能 MVC模块。目前SpringMVC 已经成为目前最优秀的MVC 框架之一。特别是支持RESTful编程风格,更是和微服架构的无缝契合。
SpringMVC的核心组件
1.DispatcherServlet【前端控制器】
相当于中央处理器,用来分发请求的不同的处理流程,如:分发到HandlerMApping、HandlerAdapter、View resolver等。
2.Controller【处理器】
处理不同类型的业务请求,如:增删改查的业务。
3.HandlerMapping【处理器映射器】
根据用户请求找到Handler即处理器,SpringMvc提供了不同的映射器实现不同的映射方式,如:配置文件方式,实现接口方式,注解方式。
4.HandlerAdapter【处理器适配器】
通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
5.View resolver【视图解析器】
进行视图解析,根据逻辑视图名解析成真正的视图View视图,最终需要通过网页将数据模型展示给用户。
执行流程
下面我们来通过一张SpringMVC的流程图,来看一下它的每个组件都是用来的干啥的,有什么作用,明白了这些之后,以后开发的时候就可以很清楚的知道一个请求过来之后,都经过了哪些组件,每一个组件都发挥了什么样的作用。
根据这张流程图,我们再来分别解释一下每一步以及每一个组件的具体作用。
通过以上对每个组件的介绍,以及每个组件的作用,和各组件中的调用关系;明白了这些之后,我们使用SpringMVC的时候,在脑子里就会一张流程图,知道每一个请求来了之后,都做了哪些动作,如果后期我们想对一些请求进行干预的话,就可以方便的找到对应的组件,对应的位置来进行干预。