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://xiahunao.cn/news/2806632.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

恒峰|高压森林应急消防泵|守护森林安全

森林是地球的肺腑,是人类赖以生存的重要资源。然而,随着人类活动的增加,森林火灾频发,给生态环境和人类生活带来严重威胁。为了保护森林资源,我们必须采取有效的措施进行消防。高压森林应急消防泵作为一种高效、环保的…

【复现】用友U8 oa协同工作系统 文件上传漏洞_57

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一: 四.修复建议: 五. 搜索语法: 六.免责声明 一.概述 用友U8 -OA 协同办公管理系统,可把日常业务、事物、协作等信息在企业的各分子公司、部门、群组、个人之间…

python获取某天气网站公开天气数据

注意:代码仅用于学习 相关网址:https://tianqi.2345.com/wea_history/57687/htm 查找url : 查找城市ID: 城市ID文件demo.js(JavaScript): function get_city(){var provqxnew Array();provqx[10][58321-H 合肥-58321|71873-B 包河-58321|58…

2023年12月CCF-GESP编程能力等级认证C++编程七级真题解析

一、单选题(共15题,共30分) 第1题 定义变量 double x ,如果下面代码输入为 100 ,输出最接近( )。 A:0 B:-5 C:-8 D:8 答案:B 第2题 对于下面动态规划方法实现的函数,以下选项中最适合表达其状态转移函数的为( )。 A: B: C: D:

【Spring】 AOP面向切面编程

文章目录 AOP是什么?一、AOP术语名词介绍二、Spring AOP框架介绍和关系梳理三、Spring AOP基于注解方式实现和细节3.1 Spring AOP底层技术组成3.2 初步实现3.3 获取通知细节信息3.4 切点表达式语法3.5 重用(提取)切点表达式3.6 环绕通知3.7 切…

一分钟 由浅入深 学会Navigation

目录 1.官网正式概念 1.1 初认知 2.导入依赖 2.1 使用navigation 2.2 safe Args插件-> 传递数据时用 3.使用Navigation 3.1 搭建初始框架 3.2 确定action箭头的属性 3.3 为Activity添加NavHostFragment控件 3.4 NavController 管理应用导航的对象 3.5 数据传递(单…

给定一个边与边可能相交的多边形,求它的轮廓线

大家好,我是前端西瓜哥。 最近遇到一个需求,给定一个多边形(边与边可能相交),求这个多边形的轮廓线。 需要注意的是,轮廓线多边形内不能有空洞,使用的不是常见的非零绕数规则(nonze…

SpringBoot3+Vue3 基础知识(持续更新中~)

bean 把方法的返回结果注入到ioc中 1: 2: 3: 组合注解封装 实战篇: 解析token: 统一携带token: 驼峰命名与下划线命名转换: NotEmpty!!! mybatis: PageHelper设置后,会将pageNum,和pageSize自己拼接…

代码随想录算法训练营第四一天 | 背包问题

目录 背包问题01背包二维dp数组01背包一维 dp 数组(滚动数组)分割等和子集 LeetCode 背包问题 01背包 有n件物品和一个最多能背重量为 w 的背包,第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次&#x…

Python urllib、requests、HTMLParser

HTTP协议 HTTP 协议:一般指HTTP(超文本传输)协议。 HTTP是为Web浏览器和Web服务器之间的通信而设计的,基于TCP/IP通信协议嘞传递数据。 HTTP消息结构 客户端请求消息 客户端发送一个HTTP请求到服务器的请求消息包括以下格式 请求行(request line)请求…

【前端素材】推荐优质后台管理系统Start Admin平台模板(附源码)

一、需求分析 后台管理系统是一种用于管理网站、应用程序或系统的工具,它通常作为一个独立的后台界面存在,供管理员或特定用户使用。下面详细分析后台管理系统的定义和功能: 1. 定义 后台管理系统是一个用于管理和控制网站、应用程序或系统…

Linux——静态库

Linux——静态库 静态库分析一下 ar指令生成静态库静态库的使用第三方库优化一下 gcc -I(大写的i) -L -l(小写的l),头文件搜索路径,库文件搜索路径,连接库 今天我们来学习静态库的基本知识。 静态库 在了解静态库之前,我们首先来…

复旦大学MBA聚劲联合会:洞见智慧,拓宽思维格局及国际化视野

12月2日,“焕拥时代 俱创未来”聚劲联合会俱创会年度盛典暨俱乐部募新仪式圆满收官。16家复旦MBA俱乐部、200余名同学、校友、各界同仁齐聚复旦管院,一起在精彩纷呈的圆桌论坛里激荡思想,在活力四射的俱乐部风采展示中凝聚力量。      以…

CSS 的圆角矩形

CSS 的圆角矩形 通过 border-radius 属性使矩形边框带圆角效果成为圆角矩形 语法:border-radius: length; length 是内切圆的半径,其数值越大, 弧线越明显 border-radius 属性值描述length定义圆角的形状%以百分比定义圆角的形状 生成圆形 让 border-…

高和汽车停工停产,创始人丁磊终于发话了!2024的冷门项目,投入小,但是真的很赚钱!

高和创始人丁磊站在停产停工的工厂呢, 环顾冷清❄️的四周,眉头紧锁😣, 停顿片刻后对旁边同样愁眉苦脸的员工说道: 非常抱歉,因为经营的失误,面临了停产停工的窘境。 在互联网🔗、物…

C/C++的内存管理(2)——new与delete的内核与本质

内存管理 operator new 与 operator delete函数回看new与delete的实现内置类型自定义类型 常见面试题 我们已经知道了new与delete的用法及其好处,发现它似乎与C语言中的动态内存开辟的函数(malloc/calloc/realloc)不同 在这里我们特别指出&am…

二进制部署k8s集群之cni网络插件

目录 k8s的三种网络模式 pod内容器之间的通信 同一个node节点中pod之间通信 不同的node节点的pod之间通信 flannel网络插件 flannel的三种工作方式 VxLAN host-GW UDP Flannel udp 模式 Flannel VXLAN 模式 flannel插件的三大模式的总结 calico网络插件 k8s 组网…

命令绕过 [安洵杯 2019]easy_web1

打开题目 打开题目在URL处看到cmd,本能的直接用系统命令ls 发现被过滤了。又注意到imgTXpVek5UTTFNbVUzTURabE5qYz0似乎是一串base64 拿去base64解码 再hex解码一次得到555.png 再将其hex加密 base64加密 反向推出index.php的payload:?imgTmprMlJUWTBOalUzT0RK…

通过Colab部署Google最新发布的Gemma模型

Gemma的简单介绍 Gemma 是一系列轻量级、最先进的开放式模型,采用与创建 Gemini 模型相同的研究和技术而构建。 Gemma 由 Google DeepMind 和 Google 的其他团队开发,其灵感来自 Gemini,其名称反映了拉丁语 gemma,意思是“宝石”…

Promise相关理解记录

一、Promise基础定义相关 Promise是一个构造函数,调用时需要使用new关键字 Promise是解决回调地狱的一种异步解决方式 Promise有三个状态:pending(进行中)、fulfilled(成功)、rejected(失败) Promise的状态只会从 pending→fulfilled 或者 pending→…