您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

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

时间:2020-10-14 10:29:09  来源:  作者:

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

 

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

 

三层架构

 

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

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

 

  • 表现层(UI)也就是我们常说的web层,展现给用户的界面,即用户在使用一个系统的时候的所见所得。讲人话就是我们看到的网页。
  • 业务逻辑层(BLL)也就是我们常说的 service 层。主要对业务业务逻辑处理。
  • 数据访问层(DAL)也就是我们是常说的DAO 层。就是直接操作数据库,针对数据的增添、删除、修改、更新、查找等。

 

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

 

MVC框架模式

 

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

 

  • 模型(Model ):数据模型,Model是数据模型,其实就是JavaBean对象,细分可以表示为业务组件(service)、领域模型组件(domain)等,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的时候,在脑子里就会一张流程图,知道每一个请求来了之后,都做了哪些动作,如果后期我们想对一些请求进行干预的话,就可以方便的找到对应的组件,对应的位置来进行干预。



Tags:SpringMVC   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
本篇文章我们来学习一下SpringMVC中是如何处理请求中的参数的。回想一下原生Servlet是如何处理请求参数的?我们需要使用HttpServletRequest调用getParameter方法进行获取,就像...【详细内容】
2021-08-16  Tags: SpringMVC  点击:(70)  评论:(0)  加入收藏
背景:项目是老项目,而且比较旧为springmvc项目。项目使用的框架为公司内部自己开发,目前已经没有框架的源码可供修改,配置文件写在底层框架内,可以看到但修改不到。目的是为了实...【详细内容】
2021-08-11  Tags: SpringMVC  点击:(70)  评论:(0)  加入收藏
一、什么是springmvc?我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻地理解这个思想,struts2在web层,spring在中间控制,hibernate在dao层与数据库打交道,而前面刚写...【详细内容】
2021-07-14  Tags: SpringMVC  点击:(93)  评论:(0)  加入收藏
前言学了一遍SpringMVC以后,想着做一个总结,复习一下。复习写下面的总结的时候才发现,其实自己学得并不彻底、牢固、也没有学全,视频跟书本是要结合起来一起,每一位老师的视频可...【详细内容】
2021-03-08  Tags: SpringMVC  点击:(193)  评论:(0)  加入收藏
对Java程序员来讲,做web开发最熟悉的框架莫过于SpringMVC了。之所以它能一统江湖,不是自己太优秀,而是对手太坑了,不知道大家还记不记得2017年左右Struts2爆出了一个大漏洞,自此...【详细内容】
2020-10-14  Tags: SpringMVC  点击:(66)  评论:(0)  加入收藏
Ajax 异步交互SpringMVC 默认用 MappingJackson2HttpMessageConverter 对 JSON 数据进行转换,需要加入 Jackson 的包;同时在 spring-mvc.xml 使用 <mvc:annotation-driven />....【详细内容】
2020-09-14  Tags: SpringMVC  点击:(75)  评论:(0)  加入收藏
MVC是英文Modle View Controller的简称,是一种软件设计典范,目的是将业务逻辑、数据、页面视图代码分离,达到增加开发效率、降低耦合度、代码更利于维护的目的。 Spring MVC是...【详细内容】
2020-08-06  Tags: SpringMVC  点击:(53)  评论:(0)  加入收藏
前言大家好,我是bigsai,今天我们学习SpringMVC的文件上传下载。文件上传和下载是互联网web应用非常重要的组成部分,它是信息交互传输的重要渠道之一。你可能经常在网页上传下...【详细内容】
2020-07-30  Tags: SpringMVC  点击:(57)  评论:(0)  加入收藏
今天就由本大佬(请原谅我使用了略微夸张的修辞手法)亲自带队,来为大家导游,带领大家探秘神奇的SpringMVC世界,重走一次HTTP请求处理之路,本次行程共计7站,约用时10分钟。 来来来,上...【详细内容】
2020-03-24  Tags: SpringMVC  点击:(110)  评论:(0)  加入收藏
这节介绍SpringMVC,SpringMVC是一种基于Java的实现MVC设计模式的请求驱动类型的轻量级Web框架。本章会介绍相关概念,流程,再从源码进行讲解。1. MVC&emsp;MVC(Model View Contr...【详细内容】
2020-01-07  Tags: SpringMVC  点击:(50)  评论:(0)  加入收藏
▌简易百科推荐
近日只是为了想尽办法为 Flask 实现 Swagger UI 文档功能,基本上要让 Flask 配合 Flasgger, 所以写了篇 Flask 应用集成 Swagger UI 。然而不断的 Google 过程中偶然间发现了...【详细内容】
2021-12-23  Python阿杰    Tags:FastAPI   点击:(6)  评论:(0)  加入收藏
文章目录1、Quartz1.1 引入依赖<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version></dependency>...【详细内容】
2021-12-22  java老人头    Tags:框架   点击:(11)  评论:(0)  加入收藏
今天来梳理下 Spring 的整体脉络啦,为后面的文章做个铺垫~后面几篇文章应该会讲讲这些内容啦 Spring AOP 插件 (了好久都忘了 ) 分享下 4ye 在项目中利用 AOP + MybatisPlus 对...【详细内容】
2021-12-07  Java4ye    Tags:Spring   点击:(14)  评论:(0)  加入收藏
&emsp;前面通过入门案例介绍,我们发现在SpringSecurity中如果我们没有使用自定义的登录界面,那么SpringSecurity会给我们提供一个系统登录界面。但真实项目中我们一般都会使用...【详细内容】
2021-12-06  波哥带你学Java    Tags:SpringSecurity   点击:(18)  评论:(0)  加入收藏
React 简介 React 基本使用<div id="test"></div><script type="text/javascript" src="../js/react.development.js"></script><script type="text/javascript" src="../js...【详细内容】
2021-11-30  清闲的帆船先生    Tags:框架   点击:(19)  评论:(0)  加入收藏
流水线(Pipeline)是把一个重复的过程分解为若干个子过程,使每个子过程与其他子过程并行进行的技术。本文主要介绍了诞生于云原生时代的流水线框架 Argo。 什么是流水线?在计算机...【详细内容】
2021-11-30  叼着猫的鱼    Tags:框架   点击:(21)  评论:(0)  加入收藏
TKinterThinter 是标准的python包,你可以在linx,macos,windows上使用它,你不需要安装它,因为它是python自带的扩展包。 它采用TCL的控制接口,你可以非常方便地写出图形界面,如...【详细内容】
2021-11-30    梦回故里归来  Tags:框架   点击:(26)  评论:(0)  加入收藏
前言项目中的配置文件会有密码的存在,例如数据库的密码、邮箱的密码、FTP的密码等。配置的密码以明文的方式暴露,并不是一种安全的方式,特别是大型项目的生产环境中,因为配置文...【详细内容】
2021-11-17  充满元气的java爱好者  博客园  Tags:SpringBoot   点击:(25)  评论:(0)  加入收藏
一、搭建环境1、创建数据库表和表结构create table account(id INT identity(1,1) primary key,name varchar(20),[money] DECIMAL2、创建maven的工程SSM,在pom.xml文件引入...【详细内容】
2021-11-11  AT小白在线中  搜狐号  Tags:开发框架   点击:(29)  评论:(0)  加入收藏
SpringBoot开发的物联网通信平台系统项目功能模块 功能 说明 MQTT 1.SSL支持 2.集群化部署时暂不支持retain&will类型消 UDP ...【详细内容】
2021-11-05  小程序建站    Tags:SpringBoot   点击:(55)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条