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.mfbz.cn/a/404985.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

素数筛法详解:埃氏筛和欧拉筛

主要讲解怎么判断一个数字是否是素数&#xff1a; 埃式筛 学习埃氏筛之前&#xff0c;我们先看一下暴力筛法&#xff0c;即对每个数都用试除法判断其是不是质数&#xff1a; 暴力筛法&#xff1a; # include <stdio.h>int main() {int st[N]; // 初始化为0&#xff0…

rider 缺少iisexpress

File C:/Program Files (x86)/IIS Express/iisexpress.exe doesn’t exist iisexpress下载 64位系统只能安装64位&#xff0c;32位系统安装32位 安装完成之后就有了

MacBook的nginx出现13: Permission denied 的问题分析和解决办法

同样的项目代码&#xff0c;电脑从Windows更换到了MacBook&#xff0c;发现网站的样式都没有了&#xff0c;直接访问CSS文件 http://crm.ms-test.cc/toolstatic/css/bootstrap.min.css 发现无法访问。查看Nginx错误日志&#xff1a; 说明是nginx没有权限访问这个CSS文件&#…

NDK的log.h使用__android_log_print报错app:buildCMakeDebug[x86_64]

org.gradle.api.tasks.TaskExecutionException: Execution failed for task :app:buildCMakeDebug[x86_64] 重点是 Execution failed for task :app:buildCMakeDebug[x86_64]. 我的代码&#xff1a; #include <android/log.h> #define LOG_TAG "MyJNI" #d…

20240113----重返学习-`nginx/conf/nginx.conf`的https证书配置说明

20240113----重返学习-nginx/conf/nginx.conf的https证书配置说明 文件说明 不同域名的多虚拟主机配置 server {listen 443 ssl;#在443端口上监听SSL/TLS流量;server_name localhost;#指定服务器名称&#xff0c;应该与域名匹配;ssl_certificate fangchaoduan.com.pem;#指定SS…

Linux之ACL权限管理

文章目录 1.ACL权限介绍二、操作步骤1. 添加测试目录、用户、组&#xff0c;并将用户添加到组2. 修改目录的所有者和所属组3. 设定权限4. 为临时用户分配权限5. 验证acl权限6. 控制组的acl权限 1.ACL权限介绍 每个项目成员有一个自己的项目目录&#xff0c;对自己的目录有完全…

DSL Query基本语法

DSL Query基本语法 查询的基本语法如下&#xff1a; GET /indexName/_search {"query":{"查询类型":{"查询条件":"条件值"}} }查询所有 GET /indexName/_search {"query":{"match_all":{}} }match查询&#xf…

【高德地图】Android高德地图绘制标记点Marker

&#x1f4d6;第4章 Android高德地图绘制标记点Marker ✅绘制默认 Marker✅绘制多个Marker✅绘制自定义 Marker✅Marker点击事件✅Marker动画效果✅Marker拖拽事件✅绘制默认 Infowindow&#x1f6a9;隐藏InfoWindow 弹框 ✅绘制自定义 InfoWindow&#x1f6a9;实现 InfoWindow…

MyBatis之Mapper.xml文件中parameterType,resultType,resultMap的用法

MyBatis之自定义数据类型转换器 前言1.parameterType2.resultType3.resultMap实例代码总结 前言 今天我们来学习Mapper.xml&#xff08;编写SQL的&#xff09;文件中&#xff0c;增删改查标签中&#xff0c;使用parameterType属性指定传递参数类型&#xff0c;resultType属性指…

人工智能_CPU微调ChatGLM大模型_使用P-Tuning v2进行大模型微调_007_微调_002---人工智能工作笔记0102

这里我们先试着训练一下,我们用官方提供的训练数据进行训练. 也没有说使用CPU可以进行微调,但是我们先执行一下试试: https://www.heywhale.com/mw/project/6436d82948f7da1fee2be59e 可以看到说INT4量化级别最低需要7GB显存可以启动微调,但是 并没有说CPU可以进行微调.我们…

日本极致产品力 | 如何在三得利等巨头压制下,打造出1秒麦1瓶的矿泉水品牌?

《极致产品力》日本深度研学,可以帮企业找产品、找方向、找方法,在日本终端市场考察中洞悉热销产品背后的成功逻辑,了解最新最前沿的产品趋势和机会。结合日本消费趋势中国转化的众多经验从品牌、包装、卖点、技术和生产工艺等多方面寻找中国市场的解决方案。 Nomusilica(又称诺…

springboot214基于springboot的多媒体素材库的开发与应用

多媒体素材库的设计与实现 摘要 近年来&#xff0c;信息化管理行业的不断兴起&#xff0c;使得人们的日常生活越来越离不开计算机和互联网技术。首先&#xff0c;根据收集到的用户需求分析&#xff0c;对设计系统有一个初步的认识与了解&#xff0c;确定多媒体素材库的总体功…

Unity之PUN2插件实现多人联机射击游戏

目录 &#x1f4d6;一、准备工作 &#x1f4fa;二、UI界面处理 &#x1f4f1;2.1 登录UI并连接PUN2服务器 &#x1f4f1;2.2 游戏大厅界面UI &#x1f4f1;2.3 创建房间UI &#x1f4f1;2.4 进入房间UI &#x1f4f1;2.5 玩家准备状态 &#x1f4f1;2.6 加载战斗场景…

PBM模型学习

本专栏着重讲解PBM学习所得&#xff0c;学习笔记、心得&#xff0c;并附有视频素材资料&#xff0c;视频详细目录如下&#xff1a; PBM相关参数解释1 PBM相关参数解释2 PBM相关案例实践1 PBM相关案例实践2 PBM相关案例实践2 PBM相关案例实践3 PBM多相流中次相界面设置1 PBM多相…

高级语言期末2012级B卷

1.编写函数&#xff0c;输出任意正整数n的位数&#xff08;n默认为存储十进制的整形变量&#xff09; 例如&#xff1a;正整数13&#xff0c;则输出2,&#xff1b;正整数3088&#xff0c;则输出4 #include <stdio.h>int func(int n) {int count0;while(n>0) {n/10;co…

区块链与Solidity详细介绍及基本语法使用

一、区块链简介 区块链是一种分布式数据库技术&#xff0c;它以块的形式存储数据&#xff0c;并通过加密算法确保数据的安全性。每个块包含一系列交易&#xff0c;并通过哈希值与前一个块相连接&#xff0c;形成一个链式结构。这种结构使得数据难以被篡改&#xff0c;因为任何对…

js设计模式:组合模式

作用: 可以用来将数据组合成树形的数据,可以像操作单独的对象一样去操作整个树形结构 树是相对复杂的数据,使用组合模式去封装树形的组件,是很重要的,可以对外暴露很多树的操作方法 示例: //一个树型的对象数据class Organ {constructor(label, value, parentName) {this.la…

【MySQL】数据库概述

目录 一、为什么使用数据库&#xff1f; 二、数据库与数据库管理系统 2.1 相关概念 2.2 两者关系 三、 MySQL介绍 四、 RDBMS和非RDBMS 4.1 关系型数据库&#xff08;RDBMS&#xff09; 4.2 非关系型数据库&#xff08;非RDBMS&#xff09; 五、关系型数据库设计规则 …

OCPP 1.6 接入实现文档

一、简介 OCPP&#xff08;Open Charge Point Protocol&#xff09;是一个开放的通信协议&#xff0c;用于充电站&#xff08;Charge Point&#xff09;与中央系统&#xff08;Central System&#xff0c;如充电站管理系统或服务提供商平台&#xff09;之间的通讯。本篇文档将…

Matlab论文插图绘制模板第137期—极坐标分组气泡图

在之前的文章中&#xff0c;分享了Matlab极坐标气泡图的绘制模板&#xff1a; 进一步&#xff0c;再来分享一下极坐标分组气泡图。 先来看一下成品效果&#xff1a; ​ 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自行下载。有需要的朋…
最新文章