当前位置: 首页 > news >正文

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的日志,看看是否有任何错误或异常被记录。这可以帮助你确定问题的根源。 检查数据库连接&#xff1…...

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…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色&#xf…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

Java 加密常用的各种算法及其选择

在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...