javaEE进阶——SpringBoot与SpringMVC第一讲

news2025/1/23 12:54:24

文章目录

  • 什么是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;
    }

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

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

相关文章

使用Xterm实现终端构建

————html篇———— // 需要使用Xterm Xterm的官网&#xff1a; Xterm.js 新建项目 增加基本文件 下载 框架 npm init -y Xterm依赖 npm install xterm/xterm 参考文档写的代码 贴入代码 <html><head><link rel"stylesheet" href"nod…

[Algorithm][回溯][字母大小写全排列][优美的排列][N皇后]详细讲解

目录 1.字母大小写全排列1.题目链接2.算法原理详解3.代码实现 2.优美的排列1.题目链接2.算法原理详解3.代码实现 3.N 皇后1.题目链接2.算法原理详解3.代码实现 1.字母大小写全排列 1.题目链接 字母大小写全排列 2.算法原理详解 本题逻辑与子集大致相同 思路一&#xff1a;每…

Verdaccio私服搭建

前言 Verdaccio是一个轻量级的私有npm注册表&#xff0c;由Node.js创建&#xff0c;并且是sinopia1.4.0的衍生版本&#xff0c;与其100%向后兼容。Verdaccio的名称来源于意大利中世纪晚期fresco绘画中流行的一种绿色。 Verdaccio的主要功能是在本地环境中管理和共享npm软件包。…

基于区块链的Web 3.0关键技术研讨会顺利召开

基于区块链的Web3.0关键技术研讨会 2024年4月23日&#xff0c;由国家区块链技术创新中心主办的“基于区块链的web3.0关键技术研讨会”召开。Web3.0被用来描述一个运行在“区块链”技术之上的“去中心化”的互联网&#xff0c;该网络上的主体掌握自己数据所有权和使用权&#xf…

减肥健身个人总结

个人一直没有健身运动的习惯&#xff0c;工作久了体重超标&#xff0c;体检报告各种指标也不太“美丽”&#xff0c;开始学习一些减肥健身知识&#xff0c;持续更新。目标是每周减1~2斤&#xff0c;用几个月时间持续到体重恢复正常。 文章目录 一、减脂原理---制造热量缺口控制…

位拆分与运算

描述 题目描述&#xff1a; 现在输入了一个压缩的16位数据&#xff0c;其实际上包含了四个数据[3:0][7:4][11:8][15:12], 现在请按照sel选择输出四个数据的相加结果,并输出valid_out信号&#xff08;在不输出时候拉低&#xff09; 0: 不输出且只有此时的输入有…

LeetCode-2589. 完成所有任务的最少时间【栈 贪心 数组 二分查找 排序】

LeetCode-2589. 完成所有任务的最少时间【栈 贪心 数组 二分查找 排序】 题目描述&#xff1a;解题思路一&#xff1a;贪心暴力解题思路二&#xff1a;栈二分查找解题思路三&#xff1a;简化版 题目描述&#xff1a; 你有一台电脑&#xff0c;它可以 同时 运行无数个任务。给你…

Java面试八股之Collection和Collections的区别

Java中Collection和Collections的区别 Collection 是一个接口&#xff0c;位于 java.util 包中&#xff0c;它是 Java 集合框架的顶层接口之一&#xff0c;代表了一组对象的集合。Collection 接口定义了所有集合类型&#xff08;如 List、Set、Queue 等&#xff09;所共有的基…

electron的Remote模块

03 【electron的Remote模块】 在渲染进程里&#xff08;比如index.html里面加载了一些js文件&#xff0c;那里面的js如果要使用到 BrowserWindow 这些属性的话就必须使用 remote&#xff09; 使用 remote 模块, 你可以调用 main 进程对象的方法 1.electron14.0之前版本使用 …

2024年NOC大赛创客智慧(西瓜创客)图形化复赛编程真题模拟试卷包含答案

NOC 复赛图形化模拟题 【题目要求】 1、添加角色小猫和“Balloon1”角色气球(大小 70) 2、添加背景“Boardwalk” 3、点击绿旗,角色初始位置如图,小猫从舞台左侧出发,向舞台右 侧移动,移动过程中不断切换造型 4、当小猫碰到气球角色,小猫停止移动,气球逐渐向舞台上方…

redis7基础篇2 redis的3种模式(主从,哨兵,集群)模式

一 主从复制模式 1.1 主从模式 主从模式&#xff1a; 主机可以读&#xff0c;写&#xff0c;重机只能写操作。 主机shutdown后&#xff0c;从机上位还是原地待命&#xff1a;从机不动&#xff0c;原地待命&#xff0c;数据正常使用&#xff0c;等待主机重启归来。 主机shu…

华为OD机试 - 山峰个数(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

指标体系建设方案(36页PPT)

一、资料介绍 《指标体系建设方案》这份36页的PPT资料包&#xff0c;是针对当前组织发展需求而精心设计的一套全面、系统的指标构建方案。本资料包从理论到实践&#xff0c;深入浅出地阐述了指标体系建设的必要性、原则、步骤及实施要点&#xff0c;旨在帮助组织建立起科学、合…

【案例】根据商品的颜色进行分组,同一种颜色的商品可以对应多种尺寸、价格以及库存

效果展示 效果说明 输入商品的颜色、尺寸后点击添加按钮&#xff0c;即可将对应的商品信息添加到下方的表格当中&#xff0c;表格中除了会显示商品的颜色和尺寸之外&#xff0c;还会显示商品的价格和库存&#xff0c;并且可以对商品的价格和库存进行修改&#xff0c;并且根据颜…

外贸客户采集软件有哪些?

外贸客户采集软件可以帮助企业收集潜在客户的信息&#xff0c;以便进行市场分析和客户开发。以下是一些常用的外贸客户采集软件&#xff1a; 易谷歌地图数据采集大师&#xff1a;基于谷歌地图数据采集的软件&#xff0c;能够采集任意国家、地区的企业地址、电话号码、邮件地址等…

Visual Studio Code 扩展程序Text Edits

需求 比如把Scarzombie_Monster全部转换为大写或者小写 安装 Text Edits 直接搜索安装即可 使用 假如要把Scarzombie_Monster全部转为大写&#xff0c;选中右键选中 To Upper Case或者直接快捷键shiftAltU即可

2A 150KHz 40V Buck DC to DC 转换器XL1509

前言&#xff1a; 该器件仅做介绍&#xff0c;不推荐在新设计中使用。 新设计应尽量使用MHZ开关频率&#xff0c;以降低电感量&#xff0c;从而降低成本。 新设计应使用同步DCDC降压转换器。 XL1509丝印和封装 引脚定义 XL1509管脚描述 管脚编号 管脚名称 管脚描述 1 电压输入…

未授权访问:Rsync 未授权访问漏洞

目录 1、漏洞原理 2、环境搭建 3、未授权访问 4、利用rsync下载任意文件 5、利用rsync反弹shell 防御手段 今天继续学习各种未授权访问的知识和相关的实操实验&#xff0c;一共有好多篇&#xff0c;内容主要是参考先知社区的一位大佬的关于未授权访问的好文章&#xff0c…

linux系统查看服务器硬件信息

1、查看服务器型号、序列号 # dmidecode|grep "System Information" -A9 | egrep "Manufacturer|Product|Serial" 2、查看主板型号 # dmidecode |grep -A16 "System Information$" 或 dmidecode -t1 3、查看BIOS信息 # dmidecode -t bios 4、…

服务器防火墙有什么用防护策略

随着互联网的飞速发展&#xff0c;服务器的安全问题日益凸显。为了保护服务器免受网络攻击和恶意入侵的威胁&#xff0c;人们引入了防火墙的概念。服务器防火墙作为保护服务器的第一道防线&#xff0c;具有重要的作用。那么服务器防火墙有什么用&#xff1f; 首先&#xff0c;服…