javaEE进阶——SpringBoot与SpringMVC第一讲
文章目录
- 什么是springMVC
- SpringMVC
- 什么是模型、视图、控制器
- MVC和SpringMVC的关系
- SpringMVC的使用
- 第一个SpringMVC程序
- @RestController
- 什么是注解
- 那么@RestController到底是干嘛的呢?
- @RequestMapping
- 如何接收来自请求中的querystrying
- @RequestParam
- @RequestMapping("/m9/{userId}/{name}")
什么是springMVC
SpringMVC
首先想要知道什么是SpringMVC我们就要先知道它的意思,首先什么是MVC呢?MVC即
模型,视图,控制器
其实SpringMVC全名应该叫做SpringWebMVC,它其实是基于servlet来构建的一个原始web框架从一开始就包含在了spring框架中。
那么通过上面的介绍我们知道SpringMVC的两个基本信息
第一个:它是一个web矿建
第二个:它是基于servlet的api构建出的一个框架
什么是模型、视图、控制器
模型视图控制器其实是我们软件架构模式中的一种,它把软件系统分为了这三个部分我们来分别进行解析一下

Model(模型):是应用程序中负责存取程序和数据逻辑的部分,一般是在数据库中负责数据的存取
Controller(控制器):是应用程序中负责用户交互的部分通常控制器负责从视图中读取,用户需要的数据并返回给用户。
View(视图):是应用程序中用来显示出数据的部分通常视图是依据模型数据创建的。
MVC和SpringMVC的关系
我们上面说到MVC其实是实现一个应用的一种架构,那么SpringMVC呢?其实就是对这种架构的具体实现,也就是说MVC是一种思想,SpringMVC是实现这种思想的其中一种方式,
SpringMVC的使用
那么我们说了既然SpringMVC是一个web框架,并且还是MVC架构的一种实现,并且还是基于servlet的API创造出的,那么我们代入一下,学习Servlet的过程,我们可以推测出他肯定也是获取连接,并且根据连接请求,建立与数据库的交互并且返回数据,那么Servlet是根据@WebServlet(“/xxx”)来进行解析连接的,那么SpringMVC是怎么使用的呢?我们来看一下。
第一个SpringMVC程序
首先我们先写一个类
@RestController
public class hello {}
我们来看一下映入眼帘中的第一个让我们懵逼的东西那就是这个类上的注解@RestController,我们接下来就来解释一下这个注解
@RestController
什么是@RestController呢?他是一个注解,或者说叫做组合注解,那么我们先搞懂一个概念,什么是注解?
什么是注解
我们可以类比于注释的概念去理解,这两者最大的区别就是注释主要是给人看的,而注解是给机器看的,比如说我们在学习多态那里的时候如果细心的同学应该在重写了父类的方法子类方法中见到过@Override这个注解,这个注解的作用就是告诉编译器我的 这个方法是重写了父类的方法,那么当编译器看到这个注解的时候他会多做一些事情,首先要做的就是要先看看你到底有没有重写父类的方法你要是没有写那你就是欺骗我的感情,是渣男,渣女人渣,这时候编译器直接不留情面的给你来个报错。那么专业些的说法是什么呢?
注解是提供一种为程序元素设置元数据的方法,理解起来还是一样的,程序元素就是指接口、类、属性、方法,这些都是属于程序的元素,那啥叫元数据呢?就是描述数据的数据(data about data),举个简单的例子,系统上有一个sm.png文件,这个文件才是我们真正需要的数据本身,而这个文件的属性则可以称之为sm.png的元数据,是用来描述png文件的创建时间、修改时间、分辨率等信息的,这些信息无论是有还是没有都不影响它作为图片的性质,都可以使用图片软件打开。
那么@RestController到底是干嘛的呢?
我们有了上面概念的基础我们再来说一下,到底@RestController是干嘛的,他想告诉编译器什么?大家不要急要想知道这个问题我们要先搞明白,为什么说他是组合注解它组合了谁,它组合 的就是@Controller和@ResponseBody两个注解的功能。那么组合之后有什么功能呢?@RestController注解的类接下来类中的方法返回的数据都是json数据,也就是说当我们使用了@RestController这个注解之后我们就不需要在要返回json数据的方法中添加@ResponseBody注解了。
那么接下来我们就要继续写代码了。
package com.example.test_spring2.controller;import org.springframework.boot.SpringApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class hello {@RequestMapping("sayHi")public String hello(){return "hello Spring MVC";}
}
这一次我们加入了新的方法和注解那就是@RequestMapping那么接下来我们再次来学习一下这个注解
@RequestMapping
这个注解的作用是什么呢?这个注解的作用我们可以参考一下@WebServlet这个注解,我们知道@WebServlet这个注解是为了映射连接的说白了我们想要访问被这个注解修饰的方法就必须要输入这个注解中的值作为url,那么@RequestMapping也一样也是为了去进行地址映射的,那么这个注解除了修饰方法之外还能修饰类吗?答案是可以的。那么我们来写一个代码试试把
package com.example.test_spring2.controller;import org.springframework.boot.SpringApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/sayicll")
public class hello {@RequestMapping("sayHiIicll")public String hello(){return "hello Spring MVC";}
}
那么如果代码这样写的话我们的url该怎么写呢?如下
http://127.0.0.1:8080/sayicll/sayHiIicll
也就是说我们需要先将描述类的那层@RequestMapping写在前面然后写描述方法的@RequestMapping,此时可能就会用同学有疑问,既然这样子的话那我发送什么请求可以被接收呢?我们来测试一下就可以了这里我们使用的软件是postman


这里我们发现无论是get还是post请求我们都能发送别接受其返回,那么这时候可能会用同学有疑问那么如果我就是想要让他特定的接收其中一个请求怎么办呢?当然也可以,这就需要用到method了如下
@RestController
@RequestMapping("/sayicll")
public class hello {@RequestMapping(value = "sayHiIicll",method = RequestMethod.POST)public String hello(){return "hello Spring MVC";}
}
这就表示他只能使用post进行那么还有别的形式吗?也是有的如下代码我们来构建一下请求
@RestController
@RequestMapping("/sayicll")
public class hello {@PostMapping("helloIicll")public String hello(){return "hello Spring MVC";}@PostMapping("hiIicll")public String hi(){return "hi I i cll";}
}

那么如上这个注解就可以帮助我们这个方法只能,接收post请求那么我们按照相同的思路就能猜测到肯定有个注解叫做@GetMapping,那么这个注解肯定就是帮助我们的方法只能接收Get请求了。
如何接收来自请求中的querystrying
首先我们来看一下我们的后端代码
@RequestMapping("/h1")public String h1(String name){return "name="+name;}
有了上面的基础我们来尝试一下接收来自请求中querystring中的参数,这里的参数如何获取呢?其实也很简单就是保证我们这个方法中的参数和我们querystring中的参数一致这样spring可以帮助我们自动匹配,那么我们来看一下结果验证一下吧。

这里我们发现我们只需要做到前端的querystring和后端方法中设置的参数名一致就可以保证我们的请求序列中的参数被准确的接收到了。那么假如说我不希望和前端的保持一致呢?也就是我如何才能跟前端发给我的参数名称进行重命名呢?这时候就需要学习到一个新的注解了。
@RequestParam
我们来解释一下@RequestParam这个注解,这个注解的作用就是重命名前端传来的参数,用法是如何呢?我们来看一下代码
@RequestMapping("/h1")public String h1(@RequestParam("name") String username){return "name="+username;}
我们来看一下结果如下图

那么这时候我们来思考一个问题那就是这里有什么不同呢?其实很明显的一个就是我们的代码中原来返回的是name现在返回的参数是username了,其实这就是因为name是前端发送给我们的数据参数,username才是我们后端自己命名的参数那么你想在后端代码中使用这个值你肯定用的是自己定义的参数才对嘛。此外我们需要注意的是这样写的话这个name就是一个必传参数,也就是说必须要有这个name值才可以那么如果我不想设置这个参数呢?
@RequestMapping("/h1")public String h1(@RequestParam(value = "name",required = false) String username){return "name="+username;}

这里我们只需要设置一下request=false就可以了。
@RequestMapping(“/m9/{userId}/{name}”)
这里我们想一下一些url的一些我们需要的属性可能即不在query string中也不在body中而是在url中那么这时候我们该怎么办呢?这里 @RequestMapping给我们提供了更多的用法也就是上面的那种我们只需要将我们需要的参数提前在 @RequestMapping中设置好就可以了,此外我们还需要搭配着另外的一个属性,@PathVariable 进行使用那么代码如下
@RequestMapping("/m9/{userId}/{name}")public String m9(@PathVariable Integer userId,@PathVariable("name") String userame){return "userId:"+userId + ",userame:"+userame;}
相关文章:
javaEE进阶——SpringBoot与SpringMVC第一讲
文章目录 什么是springMVCSpringMVC什么是模型、视图、控制器MVC和SpringMVC的关系SpringMVC的使用第一个SpringMVC程序RestController什么是注解 那么RestController到底是干嘛的呢?RequestMapping 如何接收来自请求中的querystryingRequestParamRequestMapping(&q…...
LabVIEW和usrp连接实现ofdm通信系统 如何实现
1. 硬件准备 USRP设备:选择合适的USRP硬件(如USRP B210或N210),并确保其与计算机连接(通常通过USB或以太网)。天线:根据频段需求选择合适的天线。 2. 软件安装 LabVIEW:安装LabVI…...
NGINX SPRING HTTPS证书
服务器:xxx.xxx.xxx.56 客户端器:xxx.xxx.xxx.94##生成服务器证书和密钥容器 keytool -genkey -alias tas-server -keypass 250250 -keyalg RSA -keysize 2048 -validity 3650 -keystore D:\https证书\tas-server.jks -storepass 250250 -dname "C…...
WordPress插件Plus WebP,可将jpg、png、bmp、gif图片转为WebP
现在很多浏览器和CDN都支持WebP格式的图片了,不过我们以前的WordPress网站使用的图片都是jpg、png、bmp、gif,那么应该如何将它们转换为WebP格式的图片呢?推荐安装这款Plus WebP插件,可以将上传到媒体库的图片转为WebP格式图片&am…...
GitLab CI/CD的原理及应用详解(五)
本系列文章简介: 在当今快速变化的软件开发环境中,持续集成(Continuous Integration, CI)和持续交付(Continuous Delivery, CD)已经成为提高软件开发效率、确保代码质量以及快速响应市场需求的重要手段。Gi…...
连锁收银系统如何助力实体门店私域运营
作为实体门店,私域运营是提升客户黏性和增加复购率的重要策略之一。而连锁收银系统在私域运营中扮演了关键的角色,它不仅可以帮助门店管理客户信息和消费记录,还能够通过数据分析和营销功能提供个性化的服务和推广活动。下面看看连锁收银系统…...
JETBRAINS IDES 分享一个2099通用试用码!PhpStorm 2024 版 ,支持一键升级
文章目录 废话不多说上教程:(动画教程 图文教程)一、动画教程激活 与 升级(至最新版本) 二、图文教程 (推荐)Stage 1.下载安装 toolbox-app(全家桶管理工具)Stage 2 : 下…...
超级好用的C++实用库之MD5信息摘要算法
💡 需要该C实用库源码的大佬们,可搜索微信公众号“希望睿智”。添加关注后,输入消息“超级好用的C实用库”,即可获得源码的下载链接。 概述 MD5信息摘要算法是一种广泛使用的密码散列函数,由Ronald L. Rivest在1991年设…...
ssm132医院住院综合服务管理系统设计与开发+vue
医院住院综合服务管理系统的设计与实现 摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对医院住院信息管理混乱&…...
在Linux上安装并启动Redis
目录 安装gcc环境 上传redis文件 启动redis-server 后台启动redis-server 查看redis启动状态 参考文章:Linux 安装 Redis 及踩坑 - 敲代码的阿磊 - 博客园 (cnblogs.com) 准备:打开VMware Workstation,创建一个虚拟机,进入管…...
vue3.0+antdv的admin管理系统vue-admin-beautiful推荐
前言 几年前,笔者自学了vue这一优秀的前端框架,但苦于没项目练手,无意间发现了vue-admin-beautiful这一优秀的前端集成框架。当时就使用它做了一很有意思的小项目---终端监控云平台,实现了前端和后台的整体功能。整体方案介绍参见…...
C# WinForm —— 20 RichTextBox 介绍
1. 简介 富文本框,拥有TextBox的所有功能,,但还有更多高级的文本输入和编辑功能,比如设置字体颜色、样式、段落、图片、超链接等 2. 常用属性 属性解释(Name)控件ID,在代码里引用的时候会用到,一般以 rtxt 开头Acce…...
springmvc数据绑定
数据绑定 数据绑定流程 springmvc框架将ServletRequest对象及目标方法的入参实例传递给WebDataBinderFactory实例,以创建DataBinder实例对象 DataBinder调用装配在springmvc上下文中的ConversionService组件进行数据类型转换、数据格式化工作。将Servlet中的请求信息…...
Milvus的存储/计算分离
前言 根据数据面与控制面相隔离的原则,从可扩展性和灾难恢复来看,Milvus由4个相互独立的层组成 访问层 由一系列无状态的代理组成,访问层是系统和用户之间的第一层,它主要是验证客户端请求和规整返回的结果 代理是无状态的&am…...
SHAP值是个什么值?
SHAP 值是个什么值? 起初,我们知道SHAP值代表了变量对于结局变量的贡献程度,然而,在做了一些SHAP分析之后,感觉有一些SHAP值还是有一些难以理解的地方,比如,为什么有负值?SHAP值为0…...
Django接口卡死一直没有返回响应
当Django接口出现卡死且没有返回响应时,可能是由于多种原因导致的。以下是一些排查和解决问题的步骤: 查看日志: 首先检查Django的日志,看看是否有任何错误或异常被记录。这可以帮助你确定问题的根源。 检查数据库连接࿱…...
7-139 有趣的括号
括号()的组合千奇百怪,Drizzle 想知道各种组合的括号可以是否合法 合法要求:每个同类型的左括号必须有与之对应的同类的右括号以正确的顺序闭合 要求: 输入:输入一个括号字符串 输出:输出是否合法,是则True,否则False 示例: 输入: (){}[]输出: True范围: 对于 1…...
解决qt5.12.12编译源码没有libqxcb的问题
最近要研究一下qt源码,因为设计到要修改源码,所以需要编译源码并替换修改的库文件运行验证。 我这里使用的是qt5.12.12版本,去官网上下载对应版本的安装包,安装时勾选上源码即可。 后面编译完发现,plugins/platforms/目录下没有生成库文件libqxcb.so,造成了一点麻烦。 设置 e…...
在kubernetes中配置Ingress
目录 1. 安装Nginx Ingress Controller2. 准备TLS证书3. 编写Ingress资源定义4. 应用Ingress配置5. 验证配置 1. 安装Nginx Ingress Controller 首先,确保你的Kubernetes集群已经准备好。你可以使用Helm或者直接通过yaml文件来安装Nginx Ingress Controller。这里给…...
HarmonyOS ArkTS 实现类似Android中RadioButton得效果
在Android中如实现下图可以用radioGroup和RadioButton实现,但在ArkTs中radio不能实现自定义样式,所以用Tabs来实现这种效果,效果图如下: 一、效果图 二、实现横向布局的三个TabContent,代码如下 State currentIndex: n…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块࿰…...
从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
深入解析 ReentrantLock:原理、公平锁与非公平锁的较量
ReentrantLock 是 Java 中 java.util.concurrent.locks 包下的一个重要类,用于实现线程同步,支持可重入性,并且可以选择公平锁或非公平锁的实现方式。下面将详细介绍 ReentrantLock 的实现原理以及公平锁和非公平锁的区别。 ReentrantLock 实现原理 基本架构 ReentrantLo…...
STL 2迭代器
文章目录 1.迭代器2.输入迭代器3.输出迭代器1.插入迭代器 4.前向迭代器5.双向迭代器6.随机访问迭代器7.不同容器返回的迭代器类型1.输入 / 输出迭代器2.前向迭代器3.双向迭代器4.随机访问迭代器5.特殊迭代器适配器6.为什么 unordered_set 只提供前向迭代器? 1.迭代器…...
ABAP设计模式之---“Tell, Don’t Ask原则”
“Tell, Don’t Ask”是一种重要的面向对象编程设计原则,它强调的是对象之间如何有效地交流和协作。 1. 什么是 Tell, Don’t Ask 原则? 这个原则的核心思想是: “告诉一个对象该做什么,而不是询问一个对象的状态再对它作出决策。…...
