SpringMVC 学习(一)之 SpringMVC 介绍

目录

1 MVC 介绍

2 SpringMVC 介绍

2.1 SpringMVC 特点

2.2 SpringMVC 的核心组件

2.3 SpringMVC 执行流程

3 参考文档


1 MVC 介绍

        MVC (Model View Controller) 是一种设计思想,它将应用程序分为三大组件:模型 (Model)、视图 (View)、控制器 (Controller)。

  • 模型 (Model):模型是应用程序的数据和业务逻辑部分。它负责处理和管理应用程序的数据,并执行与数据相关的操作,例如读取、写入、修改和删除数据

  • 视图 (View):视图是应用程序的用户界面部分。它负责呈现模型中的数据给用户,并接受用户的输入。视图通常使用 HTML、CSS 和 JavaScript 等前端技术来构建

  • 控制器 (Controller):控制器是应用程序的控制逻辑部分。它负责处理用户的请求和操作,并协调模型和视图之间的交互。它接收从视图层传来的数据,然后选择 Model 层中的某个业务来处理,之后接收 Model 层返回的结果并选择视图层中的某个视图来显示结果

        在实际的开发中,我们会把它们拆分的更细,从而形成 Entity+DTO+DAO+Service+Controller+HTML 结构,其中 Entity+DTO+DAO+Service 为模型层,Controller 为控制器层,HTML 为视图层。

类型名称作用
Entity实体类通常与数据库的表对应,封装 DAO 层取出来的数据为一个对象,也就是我们常说的POJO,一般只在 DAO 层与 Service 层之间传输
DAO数据访问层作用是与数据打交道,可以是数据库操作,也可以是文件读写操作,甚至是 Redis 缓存操作,总之与数据操作有关的都放在这里
DTO数据传输层主要用于远程调用等需要大量传输对象的地方
Service业务逻辑层业务逻辑层用于调用 DAO 层进行数据操作,并处理业务逻辑,如拼接 SQL,处理事务等
Controller控制器层接收从视图层传过来的数据,然后选择 Service 层中的某个业务来处理,接收 Service 层返回的结果并选择视图层中的某个视图来显示结果

2 SpringMVC 介绍

        SpringMVC 是 Spring 的一个后续产品,是 Spring 为表述层开发提供的一整套完备的解决方案。SpringMVC 是 Spring + MVC,即 SpringMVC 是实现了 MVC 设计模式的 Spring 框架。

2.1 SpringMVC 特点

  1. 轻量级,简单易学,简洁灵活
  2. 高效,基于请求响应的 MVC 框架,底层封装了 Servlet
  3. 进行更简洁的 Web 层的开发
  4. 能简单的进行 Web 层的单元测试
  5. 与 Spring 兼容性好,天生与 Spring 框架集成(如 IoC 容器、AOP 等)
  6. 提供强大的约定大于配置的契约式编程支持
  7. 功能强大:支持 RESTful 风格、灵活的数据验证、灵活的本地化、格式化和数据绑定机制等
  8. 能使用任何对象进行数据绑定,不必实现特定框架的 API
  9. 对静态资源的支持
  10. 更加简单的异常处理
  11. 支持灵活的 URL 到页面控制器的映射
  12. 非常容易与其他视图技术集成,如 Thymeleaf、FreeMarker 等等,因为模型数据不放在特定的 API 里,而是放在一个 Model 里(Map 数据结构实现,因此很容易被其他框架使用)

2.2 SpringMVC 的核心组件

  • DispatcherServlet:中央调度器,也称前端控制器,在 MVC 设计模式中相当于 Controller,即控制层。它是整个流程的控制中心,由它调用其它组件处理用户的请求。中央调度器的存在降低了组件之间的耦合性,提高了系统的可扩展性
  • HandlerMapping:处理器映射器,负责根据用户请求 URL 找到要执行的 Handler,SpringMVC 提供了不同的映射器实现不同的映射方式
  • Handler:处理器,也称后端控制器,它负责处理具体的请求并返回相应的响应
  • HandlerAdapter:处理器适配器,通过 HandlerAdapter 对处理器进行执行,它是对适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行
  • ViewResolver:视图解析器,View Resolver 负责将处理结果生成 View 视图。ViewResolver 首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染并将处理结果通过页面展示给用户
  • View:视图,SpringMVC 框架提供了很多的 View 视图类型的支持,包括:JSP、JSTLView、FreeMarkerView 和 PDFView 等。一般需要我们根据业务需求开发具体的页面

2.3 SpringMVC 执行流程

具体的执行流程如下:

  1. 用户在浏览器提交请求给前端控制器 DispatcherServlet 进行处理
  2. 前端控制器 DispatcherServlet 收到请求后,将请求转给处理器映射器 HandlerMapping
  3. 处理器映射器 HandlerMapping 根据 request 请求的 URL 等信息查找能够进行处理的处理器 Handler,以及相关拦截器 Interceptor,并构造 HandlerExecutionChain 处理器执行链,然后将构造好的 HandlerExecutionChain 处理器执行链对象返回给前端控制器 DispatcherServlet,执行链包含一个处理器对象和一或多个拦截器
  4. 前端控制器 DispatcherServlet 根据处理器执行链,找到其对应的处理器适配器 HandlerAdapter
  5. 处理器适配器 HandlerAdapter 调用相应的处理器 Handler
  6. 处理器 Handler 处理完后返回 ModelAndView 给 HandlerAdapter(ModelAndView 表示 SpringMVC 的封装对象,将 Model 和 View 封装在一起)
  7. 处理器适配器 HandlerAdapter处理器 Handler 执行结果 ModelAndView 返回给前端控制器 DispatcherServlet
  8. 前端控制器 DispatcherServlet 调用视图解析器 ViewReslover 处理 ModelAndView 
  9. 视图解析器 ViewReslover 将逻辑视图名解析成物理视图名,即具体的页面地址,生成并返回具体对象 View(SpringMVC 封装对象,是一个接口)
  10. 前端控制器 DispatcherServlet 根据对象 View 进行视图渲染(即将模型数据 Model 填充至视图中)
  11. 最后,前端控制器 DispatcherServlet 向用户返回响应,至此就全部完成了

SpringMVC 学习(二)之第一个 SpringMVC 案例-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zjs246813/article/details/136259136?spm=1001.2014.3001.5501

3 参考文档

SpringMVC入门学习(一)----Spring MVC的介绍与执行流程 - 唐浩荣 - 博客园 (cnblogs.com)

SpringMVC执行流程及源码分析 - 二七零零 - 博客园 (cnblogs.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/700225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在openEuler中通过KVM可视化安装华为FusionCompute的VRM节点

一、说明 本文是华为FusionCompute云平台配置的延续,是在CNA(ComputingNode Agent,计算节点代理)主机安装配置完成后,详细安装VRM(Virtual Resource Manager,虚拟资源管理器)节点的…

「JavaSE」String类3:字符串常量池

🎇个人主页:Ice_Sugar_7 🎇所属专栏:快来卷Java啦 🎇欢迎点赞收藏加关注哦! 字符串常量池 🍉常量池🍉字符串常量池🍉intern 方法 🍉常量池 在Java程序中&…

微服务-Alibaba微服务nacos实战

1. Nacos配置中心 1.1 微服务为什么需要配置中心 在微服务架构中,当系统从一个单体应用,被拆分成分布式系统上一个个服务节点后,配置文件也必须跟着迁移(分割),这样配置就分散了,不仅如此&…

*MYSQL--索引--内部原理

MYSQL的索引根据功能,主要有三大类型: 1.HASH索引 2.二叉树 3.BTREE索引 一:HASH索引 1.内部原理: 在设置了某列为索引列之后,并且开始或者将要在相应索引列创建数据的时候,系统通过某种算法 F(X) 自动计算出来一个十六进制的哈希值,这个哈希值能够对应相应的字段值 所以…

数据之巅:揭秘企业数据分析师如何成为企业的决策智囊

引言 在数字化浪潮中,企业数据分析师已成为企业决策的重要支撑。他们如同探险家,在数据的丛林中寻找着能够指引企业前行的宝贵信息。本文将深入剖析企业数据分析师的角色、挑战与成就,带你领略这个充满智慧与激情的职业风采。 一、从数字到智…

28-k8s集群中-StatefulSets控制器(进阶知识)

一、statefullsets控制器概述 1,举例 假如,我们有一个deployment资源,创建了3个nginx的副本,对于nginx来讲,它是不区分启动或者关闭的先后顺序的,也就是“没有特殊状态”的一个服务,也成“无状…

十四届蓝桥杯国赛考试计算思维 U10 组真题和答案

答案在底部 第一题 恐龙乐园的规划图中有 n 个小岛,m 座小桥,每座桥连接两个小岛。 下图是 n=5,m=8 的一个例子: 希希发现,如果拆除一些桥,仍然能使任何两个小岛都互通。最多可以拆除( )座 桥。 A. n-m B. m-n C. m-m-1 D. m-n+1 第二题

探索设计模式的魅力:状态模式揭秘-如何优雅地处理复杂状态转换

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,并且坚持默默的做事。 探索设计模式的魅力:状态模式揭秘-如何优雅地处理复杂状态转换 文章目录 一、案例…

VUE3使用three.js显示3D模型

使用3D模型作为自动化系统的界面已经成为潮流。尽管在AutomationML 中推荐COLLADA作为 3D 模型的标准。但是COLLADA的开发者khronos 集团却已经开发了COLLADA的后继者glTF 。glTF 2.0已经成为国际标准ISO/IEC 12113:2022。 Khronos声称-‘glTF是3D里的JPEG’。目前看来glTF 更加…

问题慢慢解决-通过android emulator调试android kernel-内核条件断点遇到的问题和临时解决方案

起因 在摸索到这个方案之后,mac m1调试aarch64 android kernel最终方案,就准备调试内核了,预备下断点的地方是 b binder_poll b ep_ptable_queue_proc b remove_wait_queue但是由于是android系统,上面三个函数会被频繁的触发&am…

ElementUI table表格组件实现双击编辑单元格失去焦点还原,支持多单元格

在使用ElementUI table表格组件时有时需要双击单元格显示编辑状态,失去焦点时还原表格显示。 实现思路: 在数据中增加isFocus:false.控制是否显示在table中用cell-dblclick双击方法 先看效果: 上源码:在表格模板中用scope.row…

springboot集成mqtt

文章目录 前言一、MQTT是什么?二、继承步骤1.安装MQTT2.创建项目,引入依赖3. 对应步骤2的代码3 测试 总结mqtt 启动后访问地址 前言 随着物联网的火热,MQTT的应用逐渐增多 曾经也有幸使用过mqtt,今天正好总结下MQTT的使用; 一、MQTT是什么?…

从扩散模型基础到DIT

Diffusion model 扩散模型如何工作? 输入随机噪声和文本内容,通过多次预测并去除图片中的噪声后,最终生成清晰的图像。 以上左边这张图,刚开始是随机噪声,999为时间序列。 为什么不直接预测下一张图片呢?…

springboot+vue的宠物咖啡馆平台(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

【深度学习笔记】3_4 逻辑回归之softmax-regression

3.4 softmax回归 Softmax回归(Softmax Regression),也称为多类逻辑回归(Multinomial Logistic Regression),是一种用于多分类问题的分类算法。虽然名字里面带回归,实际上是分类。 前几节介绍的…

Rust之构建命令行程序(四):用TDD(测试-驱动-开发)模式来开发库的功能

开发环境 Windows 11Rust 1.75.0 VS Code 1.86.2 项目工程 这次创建了新的工程minigrep. 用测试-驱动模式来开发库的功能 既然我们已经将逻辑提取到src/lib.rs中,并将参数收集和错误处理留在src/main.rs中,那么为代码的核心功能编写测试就容易多了。我…

【MATLAB源码-第146期】基于matlab的信源编码仿真GUI,对比霍夫曼编码,算术编码和LZ编码。

操作环境: MATLAB 2022a 1、算法描述 霍夫曼编码、算术编码和LZ编码是三种广泛应用于数据压缩领域的编码技术。它们各自拥有独特的设计哲学、实现方式和适用场景,因此在压缩效率、编解码速度和内存使用等方面表现出不同的特点。接下来详细描述这三种编…

【大厂AI课学习笔记】【2.2机器学习开发任务实例】(7)特征构造

特征分析之后,就是特征构造。 特征构造第一步 特征构造往往要进行数据的归一化。 在本案例中,我们将所有的数据,将所有特征区间调整为0~1之间。 如上图。 那么,为什么要进行归一化,又如何将数据,调整为…

QtCreator“设计”按钮灰色无法点击,如何解决

Mac中安装QML Designer插件: 首选项-> 关于插件 -> 勾选QT Quick下的QML Designer 点击确定安装插件,重启Qt Creator后生效

【Langchain多Agent实践】一个有推销功能的旅游聊天机器人

【LangchainStreamlit】旅游聊天机器人_langchain streamlit-CSDN博客 视频讲解地址:【Langchain Agent】带推销功能的旅游聊天机器人_哔哩哔哩_bilibili 体验地址: http://101.33.225.241:8503/ github地址:GitHub - jerry1900/langcha…