【Spring 全家桶】Spring MVC 快速入门,开始web 更好上手(上篇) , 万字解析, 建议收藏 ! ! !

本篇会加入个人的所谓鱼式疯言

❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言

而是理解过并总结出来通俗易懂的大白话,

小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.

🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 !!!

在这里插入图片描述

引言

Spring MVC 犹如一座桥梁,连接着前端的精彩与后端的强大,它赋予开发者以灵动之笔,在数字化的画布上描绘出绚丽多彩的 Web 世界。在 Spring MVC 的引领下,我们能够驾驭复杂的业务逻辑,实现流畅的用户体验,让技术与创意完美融合,开启无限可能的 Web 开发之旅。

目录

  1. Spring MVC

  2. Controller 的参数传递

  3. Cookie 与 Session 传递

一. Spring MVC

1. Spring MVC 初识

在这里插入图片描述

如上图

首先当用户发送一个 HTTP 请求 , 是直接给 Controller 控制器 发送请求

然后当 Controller 控制器 接收到之后, 就会把请求进一步传给 Model, 让 Model 来处理 数据并返回结果给 Controller 。

最后 Controller 接收到 Model 响应 的数据之后, **不会直接返回给用户, 而是传给 View **, 让View响应对应的文字和图片等数据的页面展示给用户

如上图, 上面的这样模型就称之为 Spring MVC 模型

Model: 负责具体的 数据管理和业务逻辑的处理的一端

Controller : 负责接收来自 用户的数据 , 并传递给 Model 端 进行处理 , 并 传递给View 端

View : 负责把最终的结果数据 , 通过页面展示的方式 响应给用户。

鱼式疯言

补充讲解

找工作栗子:

上述的流程就好比我们应届生找工作的过程:

好比现在小编有一个内推名额, 有了内推名额的话

小编这边就可以直接进行面试,也就是直接可以找 Controller 端进行面试,经过几波重重考验, 小编通过了面试。

这时Controller 就会告诉他的领导Model 来同意是否任用小编, 同意之后 , 领导Model 就会通知给 Controller .

Controller 然后又告诉 HR , 也就是这里的 View , 让View 直接给小编发 Offer

2. Spring MVC 的优点

Spring MVC 的优点:

低耦合性 : 使每个模块都 相互独立方便扩展更多的业务逻辑

高效性 : 每个模块都 独立工作 , 调用起来更方便,并且还能相互 配合处理大量的数据

集成性 : 与 Spring 框架集成开发效率高, 容易上手, 可以动态的配置文件 , 充分利用 Spring 的各种资源和特性

二. Controller 的参数传递

Controller 的参数传递, 主要是 演示代码 , 通过代码的方式来小伙伴初步的了解 Spring 框架 的使用, 下面我们开始吧~

1. 无参数

@RestController
@RequestMapping("/begin")
public class helloController {@RequestMapping("/hello")public  String hello() {return "I Love You";}
}

在这里插入图片描述

在讲解参数之前, 先带着小伙伴们回顾上一篇的内容:

@RestControllerController 入口的标志

@RequestMapping: 路径的声明, 第一个为 父路径/begin , 第二个为 子路径/hello

所以最终的URL 为:

http://127.0.0.1:8080/begin/hello

还不理解的小伙伴可以参考小编的前面一篇文章哦~

Spring 入门操作详解

鱼式疯言

补充说明

@RequestMapping : 可以接收 post 请求, 也可以接收 get 请求

  1. @RequestMapping 可以设置

get请求

 @RequestMapping(value = "/hello" ,method = RequestMethod.GET)public  String hello() {return "I Love You";}

post 请求:

 @RequestMapping(value = "/hello" ,method = RequestMethod.POST)public  String hello() {return "I Love You";}
  1. 或者可以换其他注解`:

@PostMapping : 只能接收 post请求

@GetMapping : 只能接收 get请求

2. 单参数传递

<1>. 普通演示

@RestController
@RequestMapping("/begin")
public class helloController {/*** 传递时需要同名* @param name 名字* @return 该正文*///    传递一个请求参数@RequestMapping("/param1")public String param1(String name) {return "name: " + name;}}

在这里插入图片描述

这里传递 单个参数, 是在 URL 的查询字符串进行拼接, 小编这里使用 postman 进行发送 get 请求 , 当 Controller 接收到 postman 发送的这条 URL 请求 时 , 就会 效应对应的数据

需要注意的是, 这里的 URL参数名 一定要 方法中的参数名 保持一致 。

鱼式疯言

补充说明

其实这里使用 postman发送请求和使用浏览器发送请求的效果是一样的, 没有本质区别。

在这里插入图片描述

如果还不熟练使用 postman 的小伙伴,也可以这样发送请求哦~

<2>. 重命名演示

上面的单参数传递是不是要必须保证参数名是统一的, 如果不统一会怎么样呢?

在这里插入图片描述
如上图,如果参数不统一我们就无法传入对应参数。

那么我们就 无法换参数传递 吗?

答案: 不是

我们还可以这样使用

@RestController
@RequestMapping("/begin")
public class helloController {//    传递一个请求参数@RequestMapping("/param1")public String param1(@RequestParam("name1") String name) {return "name: " + name;}

在这里插入图片描述
如上图:

我们可以使用 @RequestParam("name1") 绑定参数

这里只需要 @RequestParam 中的参数和 URL 中的查询字符串中的参数相同 即可

方法中的参数我们只需要自己命名自己想要的都可以

但是有一点, @RequestParam("name1") 必传参数 ,也就是说 name1 如果没传就会出现 客户端的错误

鱼式疯言

补充说明

  @RequestMapping("/param1")public String param1(@RequestParam(value = "name1", required = false) String name) {return "name: " + name;} 

如上面的代码, 如果我们不需要是必传参数, 就可以把 required = false 即可

3. 多参数传递

如果我们不止传一个参数呢? 假如我们需要传 nameagegender 这三个参数

@RestController
@RequestMapping("/begin")
public class helloController {//    传递多个请求参数@RequestMapping("/param2")public String param2(String name , int age , String gender) {return "name: " + name  + "age: " + age + "gender: " + gender;}

在这里插入图片描述

这里 不需要考虑参数的顺序 , 只要对应着像 单参数一样同名称传递 就可以有效的传达到 Controller 端

4. 对象传递

小伙伴们有没有思考过, 如果 参数很多 , 那么我们 岂不是要一个一个传 ,那样岂不是很麻烦。

所以我们就不妨就把这些参数都定义为类的一个一个属性通过对象的方式 进行传递。

<1>. head 传递

@RestController
@RequestMapping("/begin")
public class helloController {/*** @RequestBody 表示用来修饰对象传递一个 JSON 格式的对象的注解* 传递一个 JSON 对象* @param student 对象* @return 返回该对象*/@RequestMapping("/param3··	··")public Student param3 (Student student) {return student;}
}class Student {private String name;private int age;private String gender;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}@Overridepublic String toString() {return "student{" +"name='" + name + '\'' +", age=" + age +", gender='" + gender + '\'' +'}';}
}

在这里插入图片描述

如上图, 对于 Head 的传递, 传参时就在 URL 的查询字符串 中进行插入即可。

<2>. Body 传递

@RestController
@RequestMapping("/begin")
public class helloController {/**** @RequestBody 表示用来修饰对象传递一个 JSON 格式的对象的注解* 传递一个 JSON 对象* @param student 对象* @return 返回该对象*/@RequestMapping("/param7")public Student param7 (@RequestBody Student student) {return student;}}
class Student {private String name;private int age;private String gender;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}@Overridepublic String toString() {return "student{" +"name='" + name + '\'' +", age=" + age +", gender='" + gender + '\'' +'}';}
}

在这里插入图片描述

如上图

  1. 我们把 name , age , gender 都定义为 对象的属性 , 于是就可以 通过对象来传递
  1. 注意使用这个 @RequestBody 标明是通过 body(报文)传递对象 的。
  1. 对于 对象而言HTTP 的报文格式是: JSON 格式的。

鱼式疯言

  • JSON 就是一种有 特定数据的格式 :
    相当于 中文有中文的格式英文有英文的格式 ,对象就有JSON 的格式。

故: JSON 格式 是针对 对象 而言的。

  • 键值对 的格式:

{
Key1Value1
Key2Value2
Key3 : Value3
}

{ } 表示 一个对象[ ] 表示 多个对象的集合

  • 添加了 @RequestBody 的需要在 Body , 未加就要使用 Head 传递。

5. 数组传递

 @RestController
@RequestMapping("/begin")
public class helloController {/*** 对数组进行传参*/@RequestMapping("/param6")public List<String> param6(String[] names) {return List.of(names);}}

在这里插入图片描述
如上图

如果 参数都是相同类型 的话,我们可以 像上方一样用 数组 传递

数组传递的方式:在查询字符串中使用 数组名赋值 , 中间用 逗号分隔

6. 集合传递

/*** 传集合 list* 需要用 RequestParam 来绑定将数组转化 list* @param list* @return*/@RestController
@RequestMapping("/begin")
public class helloController {@RequestMapping("/param4")
//  传集合
public List<String> param4(@RequestParam List<Student> list) {return  list;
}
}

在这里插入图片描述

这里 传参的方式和数组 一样,小编在这里就不赘述了~

三. Cookie 与 Session 传递

1. Cookie 和 Session 的初识

小伙伴可能有所不知的是,对于 HTTP 协议 来说: 是 无状态的协议

无状态协议不会记录中间传入的数据通信本身不维护和通信本身相关的任何状态信息 , 只是做 传输的作用

当有重要的数据传入时, 我们就需要使用一种属性来存储。

那么对于 客户端 来说, 存储数据 的方式: Cookie 存储, 由 服务器来提供

对于 服务器 来说, 存储数据 的方式: Session 存储, 服务器自身来生成

服务器存储一份, 客户端存储一份, 从而保证 数据的有效性 , 也能 提供校验

关于更多 CookieSession 内容, 小伙伴可以移步小编的下面这篇文章哦~

Cookie 详解文章链接

Controller 中, 我们也提供了如何操作 CookieSession多种方式, 下面就让小编来演示一下吧~

2. Cookie

<1>. 获取 Cookie 方式一

@RequestMapping("/entrance")
@RestController
public class header {//    获取多个Cookie/*** 通过 HttpServerletRequest 来获取整个 Http 的请求的 所有信息* 获取到信息后再获取 Cookie* @param quest 请求的信息* @return 返回 Cookie*/@RequestMapping("/getCookie")public String getCookie(HttpServletRequest quest) {Cookie[] cookies = quest.getCookies();for (Cookie cookie: cookies) {System.out.println(cookie.getName() + ":" + cookie.getValue());}return "获取Cookie 成功!";}}

在这里插入图片描述

在这里插入图片描述
如上图:

首先在 postman 中设置 Cookie , 先在 上方指定IP 和 端口号 , 然后对应 Cookie_数字 来设置对应的 Cookie 的信息

其次,在 Controller 端的代码下, 我们使用 HttpServletRequest 类型来接收所以来自用户发送的请求。

接着,利用这些请求 通过 getCookie() 提取出所以的 Cookie 数据, 用一个 Cookie类型的数组 来存储。

最终打印 Cookie 信息 , 并提示用户, 获取 Cookie 成功

<2>. 获取 Cookie 方式二

通过 注解获取


import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.SessionAttribute;import java.util.Arrays;@RequestMapping("/entrance")
@RestController
public class header {/*** 使用 @CookieValue 绑定 Cookie 的key的注解* @param name1 作为 key* @return 返回 Cookie 的信息*/@RequestMapping("/getCookie1")public String getCookie1(@CookieValue("Cookie_1") Cookie  name1) {System.out.println(name1.getName()  + " : " + name1.getValue());return name1.getName()  + " : " + name1.getValue();}
}

在这里插入图片描述

在这里插入图片描述

如上图:

  1. 首先, 在 postman 中设置 Cookie

  2. 其次, @CookieValue 注解 中标记, 并且在参数中 指定是需要哪个 Cookie

这时,就可以获取到对应 Cookie全部信息 : 包括 Cookie 的名字Cookie 的值

  1. 进行打印 Cookie 的nameCookie 的Value

这里唯一需要和小伙伴说明的是:

设置的Cookie 中, 必须含有 @CookieValue 标明的那个 Cookie , 否则就会 报错 , 因为这是 必传参数

3. Session

<1>. 设置Session 方式

import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.SessionAttribute;@RequestMapping("/entrance")
@RestController
public class header {/*** 要先获取到 session 就需要先设置 session**/@RequestMapping("/setSession")public String setSession(HttpServletRequest servletRequest) {HttpSession session = servletRequest.getSession();//        设置键值对session.setAttribute("hello", 78);session.setAttribute("cake", "bbt");session.setAttribute("jat", "good");return "session 设置完毕!";}
}

在这里插入图片描述

如上图 , 在 Controller 中设置一些 Session , 这些 Session 就存储在 服务端 这边了, 当需要调用时, 就可以随时调用了

首先,通过 HttpServletRequest 这个类型来获取请求的所有信息

其次, 通过 getSession() 方法来获取 Session 对象

然后, 操作 Session 对象 通过 setAttribute 来插入 Session 的 Name 和 Value

<2>. 获取 Session 方式一

import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.SessionAttribute;@RequestMapping("/entrance")
@RestController
public class header {
//    获取 session  数据方法一: 使用 HttpServletRequest@RequestMapping("getSession1")public String getSession1(HttpServletRequest  servletRequest) {HttpSession session = servletRequest.getSession();return    session.getAttribute("hello")==null ? "未设置session 值" : String.valueOf(session.getAttribute("hello"));}
}

在这里插入图片描述

在这里插入图片描述

  1. 首先还是先 设置 Session

  2. 其次对应的通过 HttpServletRequest 来获取 Session对象

  3. 最终 操作 Session 对象, 通过 getAttribute , 并加入对应的 Session 的属性名 来获取对应的 Session 的 Value 值

<3>. 获取 Session 方式二

import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.SessionAttribute;@RequestMapping("/entrance")
@RestController
public class header {
//    获取session 数据方法二 : 使用 HttpSession@RequestMapping("getSession2")public String getSession2(HttpSession session) {return   session.getAttribute("hello")==null ? "未设置session 值" : String.valueOf(session.getAttribute("cake"));}}

在这里插入图片描述

如上图:

首先: 设置 Session 属性

其次: 通过 HttpSession 来直接获取Session 对象

最后: 通过 getAttribute() 并加入对应 Session属性名 来获取 Value

鱼式疯言

注意事项:

需要提醒小伙伴一点的是, 获取的 Session 的Value 值是一个Object 的类型 , 所以如果要获取成 String 类型 的话,就需要 强转

<4>. 获取 Session 方法三

import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.SessionAttribute;@RequestMapping("/entrance")
@RestController
public class header {
//    获取session 数据方法三 : 利用 SessionAttribute 绑定 Session 注解@RequestMapping("getSession3")public  String getSession3(@SessionAttribute("jat") String jat) {return  jat;}}

在这里插入图片描述

如上图:

首先: 设置Session 的属性

最后: 通过 @SessionAttribute("jat") 注解来返回,()内并加上对应的Session name 来获取。 需要注意的是 () 内必须是含有这个Session 名的,否则:

在这里插入图片描述

鱼式疯言

上面的 获取Session 和 Cookie 的方式多样 , 小伙伴根据 自己的需求 来获取哦~

总结

  • Spring MVC: 了解了MVC的三种模型: Model, Controller 以及 View 的分工不同: Model 主要处理数据, Controller 主要接管外来请求View 主要呈现给用户视图信息为了更高效的实现网络的连接

  • Controller 的参数传递 : 使用 Controller 来传递对应的参数: 无参数的请求方式, 单参数,多参数, 对象传递, 数组传递, 集合传递等… 小伙伴要注意对应的注解的使用方式哦~

  • CookieSession 传递:理解 CookieSession 是对于 Http 无状态协议的一种客户端,服务器的记录数据的方式 ,并且可以通过 Controller的接口 使用 多种方式来设置和访问对应的 Cookie 和Session

如果觉得小编写的还不错的咱可支持 三连 下 (定有回访哦) , 不妥当的咱请评论区 指正

希望我的文章能给各位宝子们带来哪怕一点点的收获就是 小编创作 的最大 动力 💖 💖 💖

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CSS in Depth 2 精译_080】 13.1:CSS 渐变效果(中)——不同色彩空间的颜色插值算法在 CSS 渐变中的应用

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 13 章 渐变、阴影与混合模式】 ✔️ 13.1 渐变 ✔️ 13.1.1 使用多个颜色节点&#xff08;上&#xff09;13.1.2 颜色插值方法&#xff08;中&#xff09; ✔️13.1…

JavaEE 【知识改变命运】06 多线程进阶(1)

文章目录 锁一常见的锁乐观锁和悲观锁轻量级锁和重量级锁自旋锁和挂起等待锁读写锁和普通互斥锁公平锁和不公平锁可重入锁和不可重入锁sycnchroized是什么锁 CAS什么是CASCAS伪代码CSA是怎么实现的CAS如何保证线程安全的呢实现自旋锁JDK中提供的使用自旋锁的方式处理锁竞争CAS …

Elasticsearch02-安装7.x

零、文章目录 Elasticsearch02-安装7.x 1、Windows安装Elasticsearch &#xff08;1&#xff09;JDK安装 Elasticsearch是基于java开发的&#xff0c;所以需要安装JDK。我们安装的Elasticsearch版本是7.15&#xff0c;对应JDK至少1.8版本以上。也可以不安装jdk&#xff0c;…

又要考试了

一、实现无名管道练习&#xff1a;父进程写入管道&#xff0c;子进程读取管道数据。 #include<myhead.h> int main(int argc, const char *argv[]) {int fd[2];char buff[1024]"王吕阳&#xff0c;崔庆权别卷了";char s[1024];if(pipe(fd)-1){perror("pi…

Unity添加newtonsoft-json

package name "com.unity.nuget.newtonsoft-json": "3.2.1",打开包管理器 输入包名称和版本 点击添加

HarmonyOS:多线程并发-Worker

Worker主要作用是为应用程序提供一个多线程的运行环境&#xff0c;可满足应用程序在执行过程中与宿主线程分离&#xff0c;在后台线程中运行一个脚本进行耗时操作&#xff0c;极大避免类似于计算密集型或高延迟的任务阻塞宿主线程的运行。具体接口信息及使用方法详情请见Worker…

JMeter配置原件-计数器

一、面临的问题&#xff1a; 由于本人的【函数助手对话框】中counter计数器每次加2&#xff0c;且只显示偶数(如下图所示)&#xff0c;因此借助【配置原件-计数器】来实现计数功能。 如果有大佬知道解决方式&#xff0c;麻烦评论区解答一下&#xff0c;谢谢。 二、配置原件-c…

系统可观测性——Logback日志框架

摘要 Logback是一种Java日志框架&#xff0c;可以提供高度可配置的日志记录功能&#xff0c;包括级别控制和事件过滤等功能。它基于SLF4J&#xff08;Simple Logging Facade for Java&#xff09;日志抽象层&#xff0c;可以与多种流行的Java日志框架兼容&#xff0c;如Log4j和…

【自然语言处理与大模型】使用llama.cpp将HF格式大模型转换为GGUF格式

llama.cpp的主要目标是在本地和云端的各种硬件上以最小的设置和最先进的性能实现LLM推理。是一个专为大型语言模型&#xff08;LLM&#xff09;设计的高性能推理框架&#xff0c;完全使用C和C编写&#xff0c;没有外部依赖&#xff0c;这使得它可以很容易地被移植到不同的操作系…

NVR小程序接入平台EasyNVR设置预置位显示“参数错误”的解决方法

视频监控技术在现代社会中的应用已经变得越来越广泛&#xff0c;从城市安防到家庭安全&#xff0c;从交通管理到商业监控&#xff0c;其作用无处不在。随着科技的不断进步&#xff0c;视频监控不仅提高了安全性&#xff0c;还带来了许多新的机遇和挑战。 近期&#xff0c;我们收…

【MySQL】InnoDB引擎中的Compact行格式

目录 1、背景2、数据示例3、Compact解释【1】组成【2】头部信息【3】隐藏列【4】数据列 4、总结 1、背景 mysql中数据存储是存储引擎干的事&#xff0c;InnoDB存储引擎以页为单位存储数据&#xff0c;每个页的大小为16KB&#xff0c;平时我们操作数据库都是以行为单位进行增删…

达梦查询表字段详细信息脚本(字段名称、描述、类型、长度及是否为空)

达梦查询表字段详细信息脚本&#xff08;字段名称、描述、类型、长度及是否为空&#xff09; 该SQL 脚本&#xff0c;用于查询表中字段的基本信息&#xff0c;包括字段名称、描述、数据类型、数据长度、是否为空及是否为主键等属性。 SQL 脚本 -- 输入变量 DECLAREp_owner VA…

YashanDB共享集群产品能力观测:细节足见功底

本文基于前泽塔数科研发总监-王若楠2024年11月在“2024年国产数据库创新生态大会”-“根”技术专场的演讲整理形成&#xff0c;主要对崖山共享集群YAC的架构、功能、高可用性、性能四大方面进行全面测试&#xff0c;并分享了测试环境和测试结论。 年初&#xff0c;基于某些商业…

[C++]类的继承

一、什么是继承 1.定义&#xff1a; 在 C 中&#xff0c;继承是一种机制&#xff0c;允许一个类&#xff08;派生类&#xff09;继承另一个类&#xff08;基类&#xff09;的成员&#xff08;数据和函数&#xff09;。继承使得派生类能够直接访问基类的公有和保护成员&#xf…

无人机节气门控制技术概述!

一、无人机节气门信号特点 无人机节气门信号主要用于调节无人机的发动机输出功率&#xff0c;其特点主要包括&#xff1a; 高精度&#xff1a;节气门信号需要高精度地反映发动机的转速、功率等状态&#xff0c;以确保无人机能够准确、稳定地飞行。 实时性&#xff1a;无人机…

机器学习之 K-Means

1. 什么是 K-Means&#xff1f; K-Means 是一种常用的无监督学习算法&#xff0c;主要用于聚类分析任务。其目标是将数据集划分为 K 个不同的簇&#xff0c;使得同一簇内的数据点之间的相似性更高&#xff0c;而不同簇的数据点差异更大。K-Means 算法使用了一个简单而有效的迭…

智慧公交指挥中枢,数据可视化 BI 驾驶舱

随着智慧城市的蓬勃发展&#xff0c;公共交通作为城市运营的核心枢纽&#xff0c;正朝着智能化和数据驱动的方向演进。通过整合 CAN 总线技术(Controller Area Network&#xff0c;控制器局域网总线)、车载智能终端、大数据分析及处理等尖端技术&#xff0c;构建的公交“大脑”…

盲盒3.0版h5版-可打包app-新优化版紫色版

整体界面ui美观大气&#xff0c;盲盒项目也是一直比较热门的&#xff0c;各大平台一直自己也有做。 感兴趣的小伙伴可以搭建做自己的项目。盲盒项目的利润率还是很大的。

如何理解符号引用和直接引用?

我们知道在 JVM 中类加载总共使用 5 步组成的&#xff0c;而类的生命周期总共有 7 个阶段&#xff0c;如下图所示&#xff1a; 其中每步的含义如下&#xff1a; 1.加载 加载&#xff08;Loading&#xff09;阶段是整个“类加载”&#xff08;Class Loading&#xff09;过程中…

海康萤石摄像机接入EasyNVR流程:开启RTSP-》萤石视频添加到EasyNVR-》未来支持海康SDK协议添加到EasyNVR

EasyNVR目前支持GB28181、RTSP、ONVIF、RTMP&#xff08;推流&#xff09;这几种协议接入&#xff0c;目前正在增加海康HIKSDK、大华DHSDK等几种SDK的接入&#xff0c;我们今天就介绍一下萤石摄像机怎么通过RTSP接入到EasyNVR。 第一步&#xff1a;萤石摄像机开启 萤石设备默…