【SpringBoot】从零开始全面解析Spring MVC (一)
本篇博客给大家带来的是SpringBoot的知识点, 本篇是SpringBoot入门, 介绍Spring MVC相关知识.
🐎文章专栏: JavaEE初阶
🚀若有问题 评论区见
❤ 欢迎大家点赞 评论 收藏 分享
如果你不知道分享给谁,那就分享给薯条.
你们的支持是我不断创作的动力 .
王子,公主请阅🚀
- 要开心
- 要快乐
- 顺便进步
- 1. 什么是Spring Web MVC?
- 1.1 什么是MVC ?
- 1.2 什么是Spring MVC?
- 2. Spring MVC
- 2.1 项目准备
- 2.2 建立连接
- 2.2.1 @RequestMapping 注解介绍
- 2.2.2 @RequestMapping 使用
- 2.2.3 @RequestMapping 是 GET 还是 POST 请求?
- 2.4 请求
- 2.4.1 传递单个参数
- 2.4.2 传递多个参数
- 2.4.3 传递对象
- 2.4.4 后端参数重命名
- 2.4.5 传递数组
- 2.4.6 传递集合
要开心
要快乐
顺便进步
1. 什么是Spring Web MVC?
官方对于 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".
详细见: Spring官网
什么是Servlet 呢?
Servlet 是一种实现动态页面的技术. 准确来讲Servlet是一套 Java Web 开发的规范,或者说是一套Java Web 开发的技术标准. 只有规范并不能做任何事情,必须要有人去实现它. 所谓实现 Servlet 规范,就是真正编写代码去实现 Servlet 规范提到的各种功能,包括类、方法、属性等.
Servlet 规范是开放的,除了 Sun 公司,其它公司也可以实现 Servlet 规范,目前常见的实现了Servlet 规范的产品包括 Tomcat、Weblogic、Jetty、Jboss、WebSphere 等,它们都被称为"Servlet 容器". Servlet 容器用来管理程序员编写的 Servlet 类.
先来搞清楚MVC, 方便我们理解Spring MVC.
1.1 什么是MVC ?
MVC 是 Model View Controller 的缩写,它是软件工程中的一种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分
View(视图): 指在应用程序中专门用来与浏览器进行交互,展示数据的资源.
Model(模型): 是应用程序的主体部分,用来处理程序中数据逻辑的部分.
Controller(控制器 ): 可以理解为一个分发器,用来决定对于视图发来的请求,需要用哪一个模型来处理,以及处理完后需要跳回到哪一个视图。即用来连接视图和模型.
比如去公司面试 :
我们到了公司之后, HR会给我们安排会议室, 根据候选人去通知不同的部门来安排面试, 面试结束后, 由HR来告诉我们面试结果.
在这个过程中
HR就是View(视图), 负责接待候选人, 并告知候选人面试结果.
不同的部门, 就是Controller(控制器), HR根据候选人来选择对应的部门来进行面试.
面试官 就是Model层, 来处理面试这个事情.
1.2 什么是Spring MVC?
MVC 是一种架构设计模式, 也一种思想, 而 Spring MVC 是对 MVC 思想的具体实现. 除此之外, Spring MVC还是一个Web框架.
总结来说,Spring MVC 是一个实现了 MVC 模式的 Web 框架.
Spring MVC主要关注有两个点: MVC 和 Web 框架.
实际上, 我们在上篇文章已经用过Spring MVC了, 在创建Spring Boot 项目时, 我们 勾选的 Spring Web 框架其实就是 Spring MVC 框架:
前面创建的不是SpringBoot项目吗? 怎么又变成了Spring MVC项目? 它们之间到底有着什么样的关系?
Spring Boot 是实现Spring MVC的其中一种方式.
Spring Boot 可以添加很多依赖, 借助这些依赖实现不同的功能. Spring Boot 通过添加Spring Web MVC框架, 来实现web功能.
2. Spring MVC
既然是 Web 框架, 那么当用户在浏览器中输入了 url 之后,我们的 Spring MVC 项目就可以感知到用户的请求, 并给予响应. 学习Spring MVC, 重点也就是学习如何通过浏览器和用户程序进行交互.
分以下三个方面:
1. 建立连接: 将用户(浏览器)和 Java 程序连接起来,也就是访问一个地址能够调用到我们的 Spring 程序.
2. 请求: 用户请求的时候会带一些参数,在程序中要想办法获取到参数, 所以请求这块主要是 获取参数 的功能.
3. 响应: 执行了业务逻辑之后,要把程序执行的结果返回给用户, 也就是响应.
2.1 项目准备
Spring MVC 项目创建和 Spring Boot 创建项目相同,在创建的时候选择 Spring Web 就相当于创建了Spring MVC 的项目.
2.2 建立连接
在 Spring MVC 中使用 @RequestMapping 来实现 URL 路由映射 ,也就是浏览器连接程序的作用
我们先来看看代码怎么写.
创建一个 UserController 类,实现用户通过浏览器和程序的交互,具体实现代码如下:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/user")
@RestController
public class UserController {@RequestMapping("/hello")public String sayHello() {return "hello, SpringMVC!";}
}
启动程序, 浏览器访问: http://127.0.0.1:8080/user/hello .就可以看到程序返回的结果了.
2.2.1 @RequestMapping 注解介绍
@RequestMapping 是 Spring Web MVC 应用程序中最常被用到的注解之一,它是用来注册接口的路由映射的.
表示服务收到请求时, 路径为 /hello 的请求就会调用 hello 这个方法的代码.
路由映射: 当用户访问一个 URL 时, 将用户的请求对应到程序中某个类的某个方法的过程就叫路由映射.
既然 @RequestMapping 已经可以达到路由映射了, 我们为什么还要加 @RestController
呢?
我们把 @RestController 去掉, 再来访问一次:
可以看到, 程序报了404, 找不到该页面.
这就是 @RestController 起到的作用.
一个项目中, 会有很多类, 每个类可能有很多的方法, Spring程序怎么知道要执行哪个方法呢?
Spring会对所有的类进行扫描, 如果类加了注解@RestController , Spring才会去看这个类里面的方法
有没有加 @RequestMapping 这个注解, 当然他的作用不止这一点, 后面再详讲.
2.2.2 @RequestMapping 使用
@RequestMapping 即可修饰类,也可以修饰方法 ,当修饰类和方法时,访问的地址是类路径 + 方法路径.
@RequestMapping 标识一个类:设置映射请求的 路径初始信息.
@RequestMapping 标识一个方法:设置映射请求的 路径具体信息 .
@RequestMapping 的URL 路径最前面加不加 / (斜杠)都可以, Spring程序启动时, 会进行判断, 如果前面没有加 / , Spring会拼接上一个 / 。本文都要求加 /
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/user")//可以不加/, 但建议加
@RestController
public class UserController {@RequestMapping("/hello")//可以不加/, 但建议加public String sayHello() {return "hello, SpringMVC!";}
}
2.2.3 @RequestMapping 是 GET 还是 POST 请求?
Ⅰ GET请求
利用 Fiddler来查一下上面写的请求是GET 还是 POST.
可以看到是GET请求.
Ⅱ POST请求
测试一下 @RequestMapping 能否发送POST请求.
通过form 表单来构造请求: 在 resources/static 路径目录下创建test.html, 代码如下:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><form action="/user/hello" method="post"><input type="submit" value="提交"></form>
</body>
</html>
同样用Fiddler抓包,如下:
不难发现, @RequestMapping 既支持Get请求, 又支持POST请求.
Ⅲ 指定POST请求
既然 @RequestMapping 支持POST请求. 那要怎么设置某个请求为 POST请求呢?
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;//@RequestMapping("/user")//可以不加/, 但建议加
@RestController
public class UserController {@RequestMapping(value="/hello",method= RequestMethod.POST)//可以不加/, 但建议加public String sayHello() {return "hello, SpringMVC!";}
}
2.4 请求
访问不同的路径, 就是发送不同的请求. 在发送请求时, 可能会带一些参数, 所以学习Spring的请求, 主要是学习如何传递参数到后端以及后端如何接收.
传递参数, 咱们主要是使用浏览器和 Postman 来模拟. Postman下载链接
2.4.1 传递单个参数
接收单个参数, 在 Spring MVC 中直接用方法中的参数就可以,比如以下代码:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/req")
@RestController
public class RequestController {@RequestMapping("/r1")public String r1(String name) {return "接到参数,name: " + name;}
}
① 使用浏览器发送请求并传参
② 使用Postman 发送请求并传参.
Ⅲ 不传参的时候发送请求会怎么样?
请求还是发送成功了, name默认为 null.
注意事项 : 使用基本类型来接收参数时, 参数必须传(除boolean类型), 否则会报500错误.
@RequestMapping("/r2")public String r2(int age) {return "接到参数,age:"+age;}
正常传参:
不传参:
总结:
对于包装类型, 如果不传对应参数,Spring 接收到的数据则为null。
所以实际开发中,对于参数可能为空的数据,建议使用包装类型.
2.4.2 传递多个参数
和接收单个参数一样, 直接使用方法的参数接收即可. 使用多个形参.
当有多个参数时,前后端进行参数匹配时,是以参数的名称进行匹配的,因此参数的位置是不影响后端获取参数的结果.
2.4.3 传递对象
如果参数比较多时, 方法声明就需要有很多形参. 并且后续每次新增一个参数, 也需要修改方法声明.
我们不妨把这些参数封装为一个对象.
Spring MVC 也可以自动实现对象参数的赋值,比如 Student 对象:
在当前目录下,创建一个新的类 Student 并写上一些属性.
package com.fhao.mvc;public class Student {private String name;private Integer id;private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", id=" + id +", age=" + age +'}';}
}
传递对象代码实现:
@RequestMapping("/r4")public String r4(Student student) {return student.toString();}
使用Postman 发送请求并传参. 结果如下图所示:
前面说过, 基本数据类型必须传(boolean除外), 那么把Student 对象中的 age 改成 int 类型并且在发送请求的时候不给传参, 这种情况会发生什么?
可以看到请求发送成功, age默认为0.
总结:
Spring 会根据参数名称自动绑定到对象的各个属性上, 如果某个属性未传递, 则赋值为 null。
基本类型则赋值为默认初识值, 比如 int类型的属性, 会被赋值为0。
所以实际开发中, 也建议使用对象来传参.
2.4.4 后端参数重命名
某些特殊的情况下,前端传递的参数 key 和我们后端接收的 key 可以不一致,比如前端传递了一个 time 给后端,而后端是使用 createtime 字段来接收的,这样就会出现参数接收不到的情况,如果出现这种情况,我们就可以使用 @RequestParam 来重命名前后端的参数值.
具体示例如下,后端实现代码:
@RequestMapping("/r5")public String r5(@RequestParam("time") String createtime) {return "接收参数createtime:"+createtime;}
直接看截图结果:👇
可以看到, Spring可以正确的把客户端传递的参数 time 绑定到了后端参数 caretetime 参数上
此时, 如果浏览器使用 createtime 进行参数传递呢?
错误日志信息为: 请求参数 ‘time’ 不存在
可以得出结论:
1. 使用@RequestParam 进行参数重命名时, 请求参数只能和 @RequestParam 声明的名称一致, 才能进行参数绑定和赋值.
2. 使用 @RequestParam 进行参数重命名时, 参数就变成了必传参数.
想要把上述必传参数设置为非必传该怎么办呢?
查看 @RequestParam 注解的实现细节就可以发现端倪,注解实现如下:
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {@AliasFor("name")String value() default "";@AliasFor("value")String name() default "";boolean required() default true;String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";
}
可以看到 required 的默认值为true, 表示含义就是: 该注解修饰的参数默认为必传
既然如此, 我们可以通过设置 @RequestParam 中的 required = false 来避免不传递时报错,具体实现如下:
@RequestMapping("/r5")public String r5(@RequestParam(value = "time",required = false) String createtime) {return "接收参数createtime:"+createtime;}
2.4.5 传递数组
@RequestMapping("/r6")public String r6(String[] array) {return "接收数组array: "+Arrays.toString(array);}
使用Postman发送请求并传参:
2.4.6 传递集合
集合参数:和数组类似, 同一个请求参数名有多个, 且需要使用 @RequestParam 绑定参数关系.
默认情况下,请求中参数名相同的多个值,是封装到数组. 如果要封装到集合,要使用 @RequestParam 绑定参数关系.
后端接收代码如下:
@RequestMapping("/r7")public String r7(@RequestParam List<String> list) {return "size:"+list.size()+" ,list:"+list;}
Postman传参测试如下:
本篇博客到这里就结束啦, 感谢观看 ❤❤❤
🐎期待与你的下一次相遇😊😊😊
相关文章:
【SpringBoot】从零开始全面解析Spring MVC (一)
本篇博客给大家带来的是SpringBoot的知识点, 本篇是SpringBoot入门, 介绍Spring MVC相关知识. 🐎文章专栏: JavaEE初阶 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子…...
C++—特殊类设计设计模式
目录 C—特殊类设计&设计模式1.设计模式2.特殊类设计2.1设计一个无法被拷贝的类2.2设计一个只能在堆上创建对象的类2.3设计一个只能在栈上创建对象的类2.4设计一个类,无法被继承2.5设计一个类。这个类只能创建一个对象【单例模式】2.5.1懒汉模式实现2.5.2饿汉模…...
初入OpenCV
OpenCV简介 OpenCV是一个开源的跨平台计算机视觉库,它实现了图像处理和计算机视觉方面的很多通用算法。 应用场景: 目标识别:人脸、车辆、车牌、动物; 自动驾驶;医学影像分析; 视频内容理解分析ÿ…...
霍夫圆变换全面解析(OpenCV)
文章目录 一、霍夫圆变换基础1.1 霍夫圆变换概述1.2 圆的数学表达与参数化 二、霍夫圆变换算法实现2.1 标准霍夫圆变换算法流程2.2 参数空间的表示与优化 三、关键参数解析3.1 OpenCV中的HoughCircles参数3.2 参数调优策略 四、Python与OpenCV实现参考4.1 基本实现代码4.2 改进…...
互联网大厂Java求职面试:优惠券服务架构设计与AI增强实践-4
互联网大厂Java求职面试:优惠券服务架构设计与AI增强实践-4 场景设定 面试官:某互联网大厂技术总监,拥有超过10年大型互联网企业一线技术管理经验,擅长分布式架构、微服务治理、云原生等领域。 候选人:郑薪苦&#…...
项目中会出现的css样式
1.重复渐变边框 思路: 主要是用重复的背景渐变实现的 如图: <div class"card"><div class"container">全面收集中医癌毒临床医案,建立医案共享机制,构建癌毒病机知识图谱,便于医疗人…...
LeetCode[101]对称二叉树
思路: 对称二叉树是左右子树对称,而不是左右子树相等,所以假设一个树只有3个节点,那么判断这个数是否是对称二叉树,肯定是先判断左右两个树,然后再看根节点,这样递归顺序我们就确认了࿰…...
黑马k8s(四)
1.资源管理介绍 本章节主要介绍yaml语法和kubernetes的资源管理方式 2.YAML语言介绍 3.资源管理方式 命令式对象管理 dev下删除了pod,之后发现还有pod,把原来的pod删除了,重新启动了一个 命令式对象配置 声明式对象配置 命令式对象配置&…...
华为ensp实现跨vlan通信
要在网络拓扑中实现主机192.168.1.1、192.168.1.2和192.168.2.1之间的互相通信,需要正确配置交换机(S5700)和路由器(AR3260),以确保不同网段之间的通信(即VLAN间路由)。 网络拓扑分析…...
TCPIP详解 卷1协议 十 用户数据报协议和IP分片
10.1——用户数据报协议和 IP 分片 UDP是一种保留消息边界的简单的面向数据报的传输层协议。它不提供差错纠正、队列管理、重复消除、流量控制和拥塞控制。它提供差错检测,包含我们在传输层中碰到的第一个真实的端到端(end-to-end)校验和。这…...
Java笔记4
第一章 static关键字 2.1 概述 以前我们定义过如下类: public class Student {// 成员变量public String name;public char sex; // 男 女public int age;// 无参数构造方法public Student() {}// 有参数构造方法public Student(String a) {} }我们已经知道面向…...
Matlab 垂向七自由度轨道车辆开关型半主动控制
1、内容简介 Matlab 229-垂向七自由度轨道车辆开关型半主动控制 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...
Matlab 短时交通流预测AR模型
1、内容简介 Matlab 230-短时交通流预测AR模型 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略城市道路短时交通流预测.pdf...
MYSQL之表的约束
表中真正约束字段的是数据类型, 但是只有数据类型约束就很单一, 也需要有一些额外的约束, 从而更好的保证数据的合法性, 从业务逻辑角度保证数据的正确性. 比如有一个字段是email, 要求是唯一的. 为什么要有表的约束? 表的约束: 表中一定要有各种约束, 通过约束, 让我们未来…...
使用ACE-Step在本地生成AI音乐
使用ACE-Step v1-3.5B开源模型从文本提示、标签和歌词创建完整的AI生成歌曲 — 无需云服务,无需API,仅需您的GPU。 这是由ACE Studio和StepFun开发的开源音乐生成模型。 在对数据隐私和云服务依赖性日益增长的担忧时代,ACE-Step将强大的文本转音乐生成完全离线,使其成为A…...
web 自动化之 Unittest 四大组件
文章目录 一、如何开展自动化测试1、项目需求分析,了解业务需求 web 功能纳入自动化测试2、选择何种方式实现自动化测试 二、Unittest 框架三、TestCase 测试用例四、TestFixture 测试夹具 执行测试用例前的前置操作及后置操作五、TestSuite 测试套件 & TestLoa…...
2025年渗透测试面试题总结-渗透测试红队面试七(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 渗透测试红队面试七 一百八十一、Shiro漏洞类型,721原理,721利用要注意什么&am…...
Mysql的索引,慢查询和数据库表的设计以及乐观锁和悲观锁
设计高性能数据表的原则 数据库设计经验和技巧 单张数据表的字段不宜过多(20个),如果确实存在大量field,考虑拆成多张表或json text存储 数据表字段都是not null的,即使没有数据,最好也使用无意义的值填充,…...
day012-软件包管理专题
文章目录 1. 生成随机密码2. 软件包管理2.1 类红帽系统2.1.1 安装软件包2.1.2 查找软件包2.1.3 查看软件包内容2.1.4 查看命令或文件属于哪个软件包2.1.5 重新安装软件包2.1.6 删除软件包2.1.7 升级2.1.8 rpm安装软件包2.1.9 rpm升级软件包2.1.10 rpm检查软件包文件是否改变 3.…...
学习黑客5 分钟深入浅出理解Windows Firewall
5 分钟深入浅出理解Windows Firewall 🔥 大家好!今天我们将探索Windows防火墙——这是Windows操作系统中的核心安全组件,负责控制进出计算机的网络流量。无论你是计算机初学者,还是在TryHackMe等平台上学习网络安全的爱好者&…...
node .js 启动基于express框架的后端服务报错解决
问题: node .js 用npm start 启动基于express框架的后端服务报错如下: /c/Program Files/nodejs/npm: line 65: 26880 Segmentation fault "$NODE_EXE" "$NPM_CLI_JS" "$" 原因分析: 遇到 /c/Program F…...
feign.RequestInterceptor 简介-笔记
1. feign.RequestInterceptor 简介 Feign 是一个声明式 Web 服务客户端,用于简化 HTTP 请求的编写与管理。feign.RequestInterceptor 是 Feign 提供的一个接口,用于在请求发出之前对其进行拦截和修改。这在微服务架构中非常有用,比如在请求中…...
软考错题(四)
在程序执行过程中,高速缓存cache与主存间的地址映射由硬件自动完成 以下关于两个浮点数相加运算的叙述中,正确的是首先进行对阶,阶码小的向阶码大的对齐 认证只能阻止主动攻击不能阻止被动攻击 BGP是外部网关协议 查看端口信息࿱…...
SSRF相关
SSRF(Server Side Request Forgery,服务器端请求伪造),攻击者以服务器的身份发送一条构造好的请求给服务器所在地内网进行探测或攻击。 产生原理: 服务器端提供了能从其他服务器应用获取数据的功能,如从指定url获取网页内容、加载指定地址的图…...
供应链学习
供应链安全 供应链:整个业务系统中的节点(一般是上游节点) 乙方一般提供资源:人 软件 硬件 服务 如何寻找供应链 1.招投标信息:寻标包 例如:烟草 智能办公 2.网站本身指纹 例如: powered by xxx…...
力扣HOT100之二叉树:226. 翻转二叉树
这道题很简单,用递归来做,对于一个根节点来说,有两种情况我们不需要翻转:一是根节点为空,二是根节点为叶子节点。这很容易理解,当传入的节点不满足上面的两种情况时,我们就需要做一个翻转&#…...
如何让rabbitmq保存服务断开重连?保证高可用?
在 Spring Boot 集成 RabbitMQ 时,可以通过以下几种方式让 RabbitMQ 保存服务断开重连,以保证高可用: 配置自动重连 application.properties 配置 :在 Spring Boot 的配置文件 application.properties 中,可以设置 Ra…...
TCPIP详解 卷1协议 九 广播和本地组播(IGMP 和 MLD)
9.1——广播和本地组播(IGMP 和 MLD) IPv4可以使用4种IP地址:单播(unicast)、任播(anycast)、组播(multicast)和广播(broadcast)。 IPv6可以使用…...
全球变暖-bfs
1.不沉的就是4个方向没有海,一个大岛屿有一个不沉就行了,其余染色就好了 2.第一个bfs来统计总岛屿个数 3.第二个来统计不沉岛屿个数 4.一减就ac啦 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typede…...
DDD领域驱动开发
1. 现象: 软件设计质量最高的时候是第一次设计的那个版本(通常是因为第一次设计时,业务技术沟通最充分,从业务技术整体视角出发设计系统)。当第一个版本设计上线以后就开始各种需求变更,这常常又会打乱原有的设计。 2…...
【HarmonyOS 5】鸿蒙App Linking详解
【HarmonyOS 5】鸿蒙App Linking详解 一、前言 HarmonyOS 的 App Linking 功能为开发者提供了一个强大的工具,通过创建跨平台的深度聚合链接,实现用户在不同场景下的无缝跳转,极大地提升了用户转化率和应用的可用性。 其安全性、智能路由和…...
Android Studio 中 build、assemble、assembleDebug 和 assembleRelease 构建 aar 的区别
上一篇:Tasks中没有build选项的解决办法 概述: 在构建 aar 包时通常会在下面的选项中进行构建,但是对于如何构建,选择哪种方式构建我还是处于懵逼状态,所以我整理了一下几种构建方式的区别以及如何选择。 1. build…...
【爬虫】12306查票
城市代码: 没有加密,关键部分: 完整代码: import json import requests with open(rE:\学习文件夹(关于爬虫)\项目实战\12306\城市代码.json,r,encodingutf-8) as f:city_codef.read() city json.loads(c…...
火山RTC 7 获得远端裸数据
一、获得远端裸数据 1、获得h264数据 1)、远端编码后视频数据监测器 /*** locale zh* type callback* region 视频管理* brief 远端编码后视频数据监测器<br>* 注意:回调函数是在 SDK 内部线程(非 UI 线程)同步抛出来的&a…...
请求参数:Header 参数,Body 参数,Path 参数,Query 参数分别是什么意思,什么样的,分别通过哪个注解获取其中的信息
在API开发中(如Spring Boot),请求参数可以通过不同方式传递,对应不同的注解获取。以下是 Header参数、Body参数、Path参数、Query参数 的区别及对应的注解: Header 参数 • 含义:通过HTTP请求头&#x…...
【Web/HarmonyOS】采用ArkTS+Web组件开发网页嵌套的全屏应用
文章目录 1、简介2、效果3、在ArkTs上全屏Web3.1、创建ArkTS应用3.2、修改模块化配置(module.json5)3.3、修改系统栏控制(ArkTS代码) 4、双网页嵌套Web实现5、ArkTSWeb技术架构的演进 1、简介 在鸿蒙应用开发领域,技术…...
Leetcode (力扣)做题记录 hot100(34,215,912,121)
力扣第34题:在排序数组中查找第一个数和最后一个数 34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode) class Solution {public int[] searchRange(int[] nums, int target) {int left 0;int right nums.length - 1;int[…...
Babylon.js学习之路《三、创建你的第一个 3D 场景:立方体、球体与平面》
文章目录 1. 引言:从零构建一个 3D 场景1.1 目标与成果预览1.2 前置条件 2. 初始化 Babylon.js 场景2.1 创建 HTML 骨架2.2 初始化引擎与场景 3. 创建基础几何体3.1 立方体(Box)3.2 球体(Sphere)3.3 平面(P…...
Go 语言即时通讯系统开发日志-day1:从简单消息收发 Demo 起步
Go语言即时通讯系统开发日志day1,主要模拟实现的一个简单的发送消息和接受消息的小demo,因为也才刚学习go语言的语法,对go的json、net/http库了解不多,所以了解了一下go语言的encoding/json库和net/http库,以及websock…...
AAAI-2025 | 中科院无人机导航新突破!FELA:基于细粒度对齐的无人机视觉对话导航
作者:Yifei Su, Dong An, Kehan Chen, Weichen Yu, Baiyang Ning, Yonggen Ling, Yan Huang, Liang Wang 单位:中国科学院大学人工智能学院,中科院自动化研究所模式识别与智能系统实验室,穆罕默德本扎耶德人工智能大学࿰…...
中科院无人机导航物流配送的智能变革!LogisticsVLN:基于无人机视觉语言导航的低空终端配送系统
作者:Xinyuan Zhang, Yonglin Tian, Fei Lin, Yue Liu, Jing Ma, Kornlia Sra Szatmry, Fei-Yue Wang 单位:中国科学院大学人工智能学院,中科院自动化研究所多模态人工智能系统国家重点实验室,澳门科技大学创新工程学院工程科学系…...
IP协议、以太网包头及UNIX域套接字
IP协议、以太网包头及UNIX域套接字 IP包头结构 IP协议是互联网的核心协议之一,其包头包含了丰富的信息来控制数据包的传输。让我们详细解析IPv4包头结构: 4位版本号(version):标识IP协议版本,IPv4值为4 4位首部长度(header len…...
普林斯顿数学三剑客读本分析。
这几天看了普斯林顿数学三剑客,主要看了微积分、概率论前半部分,数学分析看了目录,大体略读了一下。怎么说呢,整体上来看,是很不错的,适合平常性阅读,配套结合国内教材习题来深入还是很不错的。…...
Matlab 模糊pid的液压舵机伺服系统
1、内容简介 Matlab 235-模糊pid的液压舵机伺服系统 可以交流、咨询、答疑 2、内容说明 略 舵机是轮船,客机等机器控制系统的重要组成部分,是客机,战斗机等飞行器操作系统的关键部件,也是一种超高的精度的位置伺服系统ÿ…...
Linux基础命令之目录管理——了解各种操作文件目录的命令,万字教学,超详细!!!(1)
文章目录 前言1、Linux文件系统1.1 核心特点1.2 重要目录结构1.3 文件类型1.4 文件和目录的命名规则1.5 文件与目录的定位方式 2、查看目录或文件的详细信息(ls)2.1 基本语法2.2 常用操作2.3 高级用法 3、切换目录(cd)3.1 常用操作…...
中国黄土高原中部XF剖面磁化率和粒度数据
时间分辨率:1000年 < x空间分辨率为:空共享方式:申请获取数据大小;35.75 KB数据时间范围:743-0 ka元数据更新时间:2023-08-15 数据集摘要 该数据集包括中国黄土高原中部XF剖面磁化率和粒度数据。将所有…...
tabs切换#
1、html <el-tabs v-model"tabValue" tab-change"handleTabClick"><el-tab-pane label"集群" name"1"></el-tab-pane><el-tab-pane label"节点" name"2"></el-tab-pane></el-ta…...
免费Office图片音频高效提取利器
软件介绍 今天要给大家介绍一款非常好用的Office文档图片及音频提取工具,它不仅好用,而且完全免费,没有任何广告。 软件概况 这款名为Office File Picture Extractor(PPT图片提取)的软件,大小仅有4MB。打…...
迁移 Visual Studio Code 设置和扩展到 VSCodium
本文同步发布在个人博客 迁移 Visual Studio Code 设置和扩展到 VSCodium - 萑澈的寒舍https://hs.cnies.org/archives/vscodium-migrateVisual Studio Code(以下简称 VS Code)无疑是当下最常用的代码编辑器。尽管微软的 VS Code 源代码采用 MIT 协议开…...
1.7 方向导数
(底层逻辑演进脉络)从"单车道"到"全路网"的导数进化史: 一、偏导数奠基(1.6核心) 诞生背景:多元函数分析需求 当变量间存在耦合关系时(如房价面积单价装修成本)…...