SpringMVC学习笔记(一)

news2025/1/24 15:00:17

目录

一、什么是SpringMVC ?

 二、Spring MVC项目的连接(用户 和 程序 的 映射)

三、获取参数的功能的实现

传递较少数量的参数:

 通过对象传递大量参数:

获取表单参数: 

获取Json对象

上传文件:

🔔一点补充


一、什么是SpringMVC ?

官⽅对于 Spring MVC 的描述是这样的:

Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web MVC,” comes from the name of its source module (spring-webmvc), but it is more commonly known as “Spring MVC”.

翻译为中⽂:

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为“Spring MVC”。

题外话:
1、因为 Spring Web MVC 是基于 Servlet API,所以 Servlet 是 Spring MVC 的 “父亲”。
因此,Servlet 那一套编程方法,在 Spring MVC 中,也是可以使用的!!!
但是,一般不推荐使用 servlet 的编程方式。

因为,Spring MVC 更简单!

2、Spring Web MVC,从⼀开始就包含在 Spring 框架中。
即:Spring 是一个很大体系(框架),Spring MVC 只是属于 Spring 体系中的一个 Web 模块。
这也是为什么在学习 Spring 的时候,我们都都是通过 main 方法去访问bean方法的原因。因为我们没有引入 web 模块,因此想要通过 浏览器输入 URL 来访问 方法,是不行的
————————————————
 

 接下来我们就在IDEA社区版中创建一个我们第一个SpringMVC项目(基于SpringBoot)

在创建 Spring Boot 项⽬时,我们勾选的 Spring Web 框架其实就是 Spring MVC 框架,如下图所示

其实:Spring MVC 项⽬创建和 上篇博客我所讲的Spring Boot 创建项⽬相同(Spring MVC 使⽤ Spring Boot 的⽅式创建),在创建的时候选择 Spring Web 就相当于创建了 Spring MVC 的项⽬

简言之就是:

1、删除不必要的文件

2、通过Maven包管理添加项目所依赖的包和库

详见SpringBoot项目创建,哈哈,我们这个SpringMVC项目本来就是基于SpringBoot来创建的呀!


 总述:


学习 Spring MVC 我们只需要掌握以下 3 个功能:

  • 1、 连接的功能:将⽤户(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调⽤到我们的Spring 程序。
  • 2、 获取参数的功能:⽤户访问的时候会带⼀些参数,在程序中要想办法获取到参数。
  • 3、输出数据的功能:执⾏了业务逻辑之后,要把程序执⾏的结果返回给⽤户。

对于 Spring MVC 来说,掌握了以上 3 个功能就相当于掌握了 Spring MVC 

 二、Spring MVC项目的连接(用户 和 程序 的 映射)

通过@RequestMapping注解进行路由配置(即可以修饰类也可以修饰方法,放在类上是一级目录,放在方法上是二级目录)

当然其他的像:@GetMapping和@PostMapping也可以进行路由配置  

关于Spring MVC项目的连接的一点补充,如图所示:

要注意我们这里的SpringMVC还是和之前我们说的Spring Core还是有些不一样的。

Spring MVC 是基于 Servlet API 构建的。
然⽽要真正的理解什么是 Spring MVC?我们⾸先要搞清楚什么是 MVC?

MVC 是 Model View Controller (模型视图控制器)的缩写,它是软件⼯程中的⼀种软件架构模式,它把软件系统分为模型、视图和控制器三个基本部分。


  • Model(模型) 是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
  • View(视图) 是应用程序中处理数据显示的部分,通常视图是依据模型数据创建的。
  • Controller(控制器) 是应⽤程序中处理⽤户交互的部分。通常控制器负责从视图读取数据,控制⽤户输⼊,并向模型发送数据。

下面我们来进一步分析 四者之间的关系。
 当然了,其实上面分析的是传统的MVC模式是前后端不分离的,可以说服务器的视图和客户端的视图是杂糅在一起的。

我们要讲的SpringMVC其实是前后端分离开来的

前端发送的请求数据,会先给 controller。
controller 验证完数据之后,就会将其给 Model。
Model 在和 数据库交互之后,将其得到的结果返回给 controller。
此时 controller 收到的数据,还不能直接返回给前端。
controller 需要将数据 交给 服务器的视图(View),进行处理和渲染。
最终,将渲染得到的结果,返回给前端。
此时,用户就看到的源码 就是 html标签 的内容。(浏览器的开发者工具可以查看)
看到的页面,就是浏览器对 HTML标签内容的解析。
 

 所以说SpringMVC,叫spring web更合适。


三、获取参数的功能的实现

传统的获取前端传来参数的方式:因为我们的SpingMVC其实底层还是基于servlet,所以我们可以通过HtttpServlet来获取前端传来的参数

当然这个传统的servlet传递参数的形式,我们SpringMVC有更简单的方式:

传递较少数量的参数:

 当然了,也可以通过postman以post的形式传递参数

用Fiddler抓取此次的包: 

 

 通过对象传递大量参数:

既然要传递对象,就要用对应的实例对象取接收这些参数。

我们通过postman传参如下: 

 

获取表单参数: 

 用Fiddler抓包结果如下:


获取Json对象

  用Fiddler抓包结果如下:

上传文件:

在网站中,我们不可避免要上传一些东西——比如用户头像的上传

那么一起看看,SpringMVC怎么实现上传文件吧!

  用Fiddler抓包结果如下:

🔔一点补充

http的请求体body的几种数据格式

表单提交只是POST请求的一种方式,表单提交有好几种提交的数据格式:

Form表单提交的四种数据格式

🌰栗子一:multipart/form-data

 🌰 栗子二:application/x-www-form-urlencoded

🌰栗子三 注意接收Json对象和用对象接收from表单提交的键值对数据的不同

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

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

相关文章

家用 NAS 服务器搭建 | 前篇

1、前言 最近一段时间都在折腾家用 NAS 服务器,NAS 系统从最开始选择安装开源的 OMV(OpenMediaVault)、万由U-NAS,最终决定使用黑群晖。硬件也是一步步从旧笔记本、拆旧笔记本改nas样式、最终也是到万由410机箱。 家庭nas服务器可…

unity rtsp 视频渲染(一)

unity unity 可以说是一个不错的工具,建立三维的场景非常方便,下面我们建立一个三维的场景,并且在三维的场景中和场景外分别建立系统去播放视频。所谓场景内就是在三维中播放视频,场景外就是在三维场景前表面的二维平面中播放视频…

Go-Excelize API源码阅读(三十六)——SetSheetRow、InsertPageBreak

Go-Excelize API源码阅读(三十六)——SetSheetRow、InsertPageBreak 开源摘星计划(WeOpen Star) 是由腾源会 2022 年推出的全新项目,旨在为开源人提供成长激励,为开源项目提供成长支持,助力开发…

公司信息系统架构建设规划

企业的信息化建设的基础是构建企业的信息系统架构(也可称之为信息化架构),信息系统架构又由应用架构、数据架构、技术架构和治理架构4部分组成,本建议书主要以技术架构、应用架构以及技术架构为对象加以说明。 4.1公司信息系统架…

《MongoDB》Mongo Shell中基本操作-ObjectId和文档创建详解

前端博主,热衷各种前端向的骚操作,经常想到哪就写到哪,如果有感兴趣的技术和前端效果可以留言~博主看到后会去代替大家踩坑的~ 主页: oliver尹的主页 格言: 跌倒了爬起来就好~ 来个关注吧,点个赞…

R语言对用电负荷时间序列数据进行K-medoids聚类建模和GAM回归

通过对用电负荷的消费者进行聚类,我们可以提取典型的负荷曲线,提高后续用电量预测的准确性,检测异常或监控整个智能电网(Laurinec等人(2016),Laurinec和Luck( 2016)&…

JavaScript正则表达式加密

正则表达式可以加密吗? 是的,可以。起码可以确定的是在JavaScript编程中是可以的。 正则表达式加密有什么用? 可以隐藏一些重要的、私密的字符串内容,使代码的逻辑、秘密不容易被人窥探。 正则表达式加密示例 例如&#xff1…

1536_AURIX_TriCore内核架构_Trap

全部学习汇总: GreyZhang/g_tricore_architecture: some learning note about tricore architecture. (github.com) 近段时间一直在跟trap打交道,但是处理得毫无头绪,因此找出来了这一章节看一下。暂时,这方面稍微有了一点框架感&…

观世界赛事,品足球人生--2022世界杯

观世界赛事,品足球人生 – 2022世界杯 1.卡塔尔世界杯百科 2022年卡塔尔世界杯(英语:FIFA World Cup Qatar 2022)是第二十二届世界杯足球赛,是历史上首次在卡塔尔和中东国家境内举行、也是第二次在亚洲举行的世界杯足…

iwebsec靶场 SQL注入漏洞通关笔记7- 空格过滤绕过

系列文章目录 iwebsec靶场 SQL注入漏洞通关笔记1- 数字型注入_mooyuan的博客-CSDN博客 iwebsec靶场 SQL注入漏洞通关笔记2- 字符型注入(宽字节注入)_mooyuan的博客-CSDN博客 iwebsec靶场 SQL注入漏洞通关笔记3- bool注入(布尔型盲注&#…

关于mac上如何U盘

关于mac上如何U盘 背景 使用macbook的大概都会遇到 “如何连接U盘” 的问题,网上会搜到很多教程,我觉得很多都不太实用。 首先这个需求是有的,但是对很多人来说很低频几个月用不到一次,所以得找个顺手靠谱的方法。下面是我经历…

【机器学习入门项目10例】(十):PCA降维:简易人脸识别模型

🌠 『精品学习专栏导航帖』 🐳最适合入门的100个深度学习实战项目🐳🐙【PyTorch深度学习项目实战100例目录】项目详解 + 数据集 + 完整源码🐙🐶【机器学习入门项目10例目录】项目详解 + 数据集 + 完整源码🐶🦜【机器学习项目实战10例目录】项目详解 + 数据集 +

C++——电话号码的字母组合问题

文章目录电话号码的字母组合题目链接思路:代码:调试演示电话号码的字母组合 题目链接 思路: 首先使用string类的数组存储每个数字对应的所有可能的字母,然后进行回溯操作。 string arr[] { "","","…

分享88个NET源码,总有一款适合您

链接:https://pan.baidu.com/s/1dPlj8w-rvVQXuJOHPO6tBA?pwddj0d 提取码:dj0d 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...,大家下载后可以看到。 启明星Appform员工请假系统 25175云酒店管…

微模块化炙手可热,数据中心走向智能化取胜

近年来,“微模块化”成为数据中心领域炙手可热的话题。 Gartner《企业数据中心未来趋势报告》预测,AI、5G、新型电池、模块化设计思想等将改变数据中心的未来,数据中心将走向分散化,并且预计到2025年,微数据中心的数量…

(附源码)python电影院信息管理系统 毕业设计 021844

电影院信息管理系统的设计与实现 摘 要 在信息飞速发展的今天,网络已成为人们重要的信息交流平台。电影院每天都有大量的信息需要通过网络发布,为此,本人开发了一个基于B/S(浏览器/服务器)模式的电影院信息管理系统。 …

你的NET程序需要保护吗?Agile.net 6.6.X 注入式Crack

Agile.net 使用专利技术将 MSIL 代码转换为虚拟操作码,只有安全的虚拟机才能理解。虚拟机直接处理虚拟操作码,模拟原始代码行为而不将代码转换回其原始形式。破坏保护成为NP完全问题,从而使Agile.net成为唯一保证您的代码不会被破坏的混淆器&…

【保姆级】手把手Debug循环依赖的整体流程

我们先看一下循环依赖,这样看、 或者这样看、 一提到循环依赖基本必提三级缓存,本篇又是篇保姆级的Debug教程,详解出现循环依赖Spring处理的全过程,之前也介绍过一些与本篇相关的内容: 想瞅瞅三级缓存的庐山真面目可以…

2022/11/27[指针] 指针与函数基础

程序&#xff1a;求10个数的最大数 1、定义指向函数的指针变量调用函数的方法 一般定义形式为&#xff1a;类型名 &#xff08;*指针变量名)()&#xff1b; #include<stdio.h> int main() {int i, m, a[10], max(int* p);int (*f)();for (i 0; i < 10; i)scanf_s(&q…

牛客网基础知识强化巩固-周结03

数组强化训练篇 2022-11-21 打卡 知识点总结 什么是渐进时间复杂度 渐进时间复杂度是指n趋于无穷时的复杂度。向有序表中任意一个位置插入元素&#xff0c;插入位置之后的元素依次挪动一个位置&#xff0c;假设元素插入的位置坐标为k&#xff0c;则时间复杂度为O(k)&#xf…