初识Spring Web MVC

1. 什么是 Spring Web MVC?

  • Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"SpringMVC".
  • Servlet:⼀套Java Web 开发的技术标准,通过编写代码去实现 Servlet 规范提到的各种功能

1.1 MVC 定义

  • MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分
    在这里插入图片描述
    • View(视图) 指在应⽤程序中专⻔⽤来与浏览器进⾏交互,展⽰数据的资源.
    • Model(模型) 是应⽤程序的主体部分,⽤来处理程序中数据逻辑的部分.
    • Controller(控制器)可以理解为⼀个分发器,⽤来决定对于视图发来的请求,需要⽤哪⼀个模型来处理,以及处理完后需要跳回到哪⼀个视图。即⽤来连接视图和模型

  • Spring Boot 通过添加Spring WebMVC框架, 来实现web功能.
    在这里插入图片描述

  • 从实际得业务处理来说,这个模型更好解释MVC
    在这里插入图片描述

2. 学习Spring MVC

  1. 建⽴连接:将⽤⼾(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调⽤到我们的Spring 程序。
  2. 请求: ⽤⼾请求的时候会带⼀些参数,在程序中要想办法获取到参数, 所以请求这块主要是 获取参数的功能.
  3. 响应: 执⾏了业务逻辑之后,要把程序执⾏的结果返回给⽤⼾, 也就是响应.

2.1 项⽬准备

在这里插入图片描述

2.2 建⽴连接

  • @RequestMapping 来实现 URL 路由映射 ,也就是浏览器连接程序的作⽤
import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;@RestController
public class UserController {// 路由器规则注册@RequestMapping("/sayHi")public String sayHi(){return "hello,Spring MVC";}}
  • @RestController作用
  1. 声明控制器类:用于标识一个类是 Spring MVC 控制器,并且处理 HTTP 请求
  2. 简化响应体的返回:不需要额外使用 @ResponseBody 来指定方法返回的内容直接作为响应体,@RestController 已经默认包含了这个功能,在上面这个代码中,打开浏览器就会看到hello,Spring MVC
  3. Spring MVC 会自动根据请求的 Content-Type 头信息来决定将方法返回的对象转换为对应的格式,然后作为响应返回给客户端。
  • @RequestMapping
    1.注册接⼝的路由映射的
    2.路由映射: 当⽤⼾访问⼀个 URL 时, 将⽤⼾的请求对应到程序中某个类的某个⽅法的过程

  • 通过浏览器访问: http://127.0.0.1:8080/sayHi
    在这里插入图片描述

2.2.2 @RequestMapping 使⽤

  • 即可修饰类,也可以修饰⽅法 ,当修饰类和⽅法时,访问的地址是类路径 + ⽅
    法路径
    @RequestMapping标识⼀个类:设置映射请求的请求路径的初始信息
    @RequestMapping标识⼀个⽅法:设置映射请求请求路径的具体信息
    注意:
    @RequestMapping 的URL 路径最前⾯加不加 / (斜杠)都可以, Spring程序启动时, 会进⾏判断, 如果
    前⾯没有加 / , Spring会拼接上⼀个 /

2.2.3传参介绍

  • URL的格式:
    在这里插入图片描述

2.3 请求

  • 访问不同的路径, 就是发送不同的请求

2.3.1 传递单个参数

import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/param")public class ParamController {@RequestMapping("/m1")public String method1(String name){return "接收到参数name:"+ name;}}
  • 注意路径
    在这里插入图片描述
  • 使用基本类型进行传参的时候,必须传值,建议直接使用包装类
  • 基本类型不具备能够直接表示为空的特性,因为它们不是对象,而是直接存储在栈内存中的数据

2.3.2传递多个参数

  • 和接收单个参数⼀样, 直接使⽤⽅法的参数接收即可. 使⽤多个形参.
 @RequestMapping("/m2")public Object method2(String name, String password) {return "接收到参数name:" + name + ", password:" + password;}

在这里插入图片描述

  • 注意:当有多个参数时,前后端进⾏参数匹配时,是以参数的名称进⾏匹配的,因此参数的位置是不影响后端获取参数的结果

2.3.3传递对象

  • 如果参数⽐较多时, ⽅法声明就需要有很多形参. 并且后续每次新增⼀个参数, 也需要修改⽅法声明.我们不妨把这些参数封装为⼀个对象
public class Person {private int id;private String name;private String password;public int getId() {return id;}public void setId(int id) {this.id = id;
}public String getName() {return name;}public void setName(String name) {this.name = name;
}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "Person{" +"id=" + id +", name='" + name + '\'' +", password='" + password + '\'' +'}';}}
  • 传递对象代码实现:
@RequestMapping("/m3")public Object method3(Person p){return p.toString();}

在这里插入图片描述

  • 可以看到, 后端程序正确拿到了Person对象⾥各个属性的值
    在这里插入图片描述
    注意::Spring 会根据参数名称⾃动绑定到对象的各个属性上, 如果某个属性未传递, 则赋值为null(基本类型则赋值为默认初识值, ⽐如int类型的属性, 会被赋值为0)

2.3.4后端参数重命名(后端参数映射)

  • 由于映射是根据参数的名字来进行匹配的,就会出现前后端的参数名字不一样的情况,比如前端传递了⼀个time 给后端,⽽后端是使⽤ createtime 字段来接收的,我们就可以使**@RequestParam** 来重命名前后端的参数值.
@RequestMapping("/m4")
public Object method_4(@RequestParam("time") String createtime) {return "接收到参数createtime:" + createtime;}
  • 将time重命名为createtime,Spring可以正确的把浏览器传递的参数time绑定到了后端参数caretetime参数上
    在这里插入图片描述

注意:

  1. 使⽤ @RequestParam 进⾏参数重命名时, 请求参数只能和 @RequestParam 声明的名称⼀
    致, 才能进⾏参数绑定和赋值.
  2. 使⽤ @RequestParam 进⾏参数重命名时, 参数就变成了必传参数.
  • 如何设置为非必传参数呢?
  • 我们可以通过设置 @RequestParam 中的 required=false 来避免不传递时报错
@RequestMapping("/m4")
public Object method4(@RequestParam(value = "time", required = false) String crereturn "接收到参数createtime:" + createtime;}

2.3.5传递数组

  • Spring MVC 可以⾃动绑定数组参数的赋值
@RequestMapping("/m5")public String method5(String[] arrayParam) {return Arrays.toString(arrayParam);
4}

在这里插入图片描述

2.3.6传递集合

  • 集合参数:和数组类似, 同⼀个请求参数名有为多个, 且需要使⽤ @RequestParam 绑定参数关系
@RequestMapping("/m6")public String method6(@RequestParam List<String> listParam){
return "size:"+listParam.size() + ",listParam:"+listParam;
}

2.3.7传递JSON数据

  • JSON:JavaScript Object Notation 【JavaScript 对象表⽰法】
  • JSON本质是字符串. 主要负责在不同的语⾔中数据传递和交换.
    JSON的语法:
  1. 数据在 键值对(Key/Value) 中
  2. 数据由逗号 , 分隔
  3. 对象⽤ {} 表⽰
  4. 数组⽤ [] 表⽰
  5. 值可以为对象, 也可以为数组, 数组中可以包含多个对象

JSON的两种结构

  1. 对象: ⼤括号 {} 保存的对象是⼀个⽆序的 键值对 集合. ⼀个对象以左括号 { 开始, 右括号 }
    结束。每个"键"后跟⼀个冒号 : ,键值对使⽤逗号 , 分隔
  2. 数组: 中括号 [] 保存的数组是值(value)的有序集合. ⼀个数组以左中括号 [ 开始, 右中括
    号 ] 结束,值之间使⽤逗号 , 分隔。

JSON优点

  1. 简单易⽤: 语法简单,易于理解和编写,可以快速地进⾏数据交换
  2. 跨平台⽀持: JSON可以被多种编程语⾔解析和⽣成, 可以在不同的平台和语⾔之间进⾏数据交换和
    传输
  3. 轻量级: 相较于XML格式, JSON数据格式更加轻量级, 传输数据时占⽤带宽较⼩, 可以提⾼数据传输
    速度
  4. 易于扩展: JSON的数据结构灵活,⽀持嵌套对象和数组等复杂的数据结构,便于扩展和使⽤
  5. 安全性: JSON数据格式是⼀种纯⽂本格式,不包含可执⾏代码, 不会执⾏恶意代码,因此具有较⾼
    的安全性

传递JSON对象
@RequestBody 可以用于将 HTTP 请求体的内容转化为 Java 对象,并绑定到方法的参数上。这使得我们能够轻松地处理来自客户端发送的 JSON、XML 或其他格式的数据,并将其转换为相应的 Java 对象

2.3.8获取URL中参数@PathVariable

  • path variable: 路径变量,作⽤在请求URL路径上的数据绑定
@RequestMapping("/m8/{id}/{name}")
public String method8(@PathVariable Integer id, @PathVariable("name") String use
return "解析参数id:"+id+",name:"+userName;}

在这里插入图片描述
如果⽅法参数名称和需要绑定的URL中的变量名称⼀致时, 可以简写, 不⽤给@PathVariable的属性赋值, 如上述例⼦中的id变量
如果⽅法参数名称和需要绑定的URL中的变量名称不⼀致时, 需要@PathVariable的属性value赋值,
如上述例⼦中的userName变量

2.3.9上传⽂件@RequestPart

@RequestMapping("/m9")public String getfile(@RequestPart("file") MultipartFile file) throws IOExceptio//获取⽂件名称
String fileName = file.getOriginalFilename();
//⽂件上传到指定路径
file.transferTo(new File("D:/temp/" + file.getOriginalFilename()));return "接收到⽂件名称为: "+fileName;}

在这里插入图片描述

2.3.10获取Cookie/Session

在这里插入图片描述

  • Session的本质就是⼀个 “哈希表”, 存储了⼀些键值对结构. Key 就是SessionID, Value 就是⽤⼾信息(⽤⼾信息可以根据需求灵活设计)
    在这里插入图片描述
  1. 当⽤⼾登陆的时候, 服务器在 Session 中新增⼀个新记录, 并把 sessionId返回给客⼾端. (通过
    HTTP 响应中的 Set-Cookie 字段返回).
  2. 客⼾端后续再给服务器发送请求的时候, 需要在请求中带上 sessionId. (通过 HTTP 请求中的
    Cookie 字段带上).
  3. 服务器收到请求之后, 根据请求中的 sessionId在 Session 信息中获取到对应的⽤⼾信息, 再进⾏后续操作.找不到则重新创建Session, 并把SessionID返回

在这里插入图片描述

Cookie 和 Session 的区别
• Cookie 是客⼾端保存⽤⼾信息的⼀种机制. Session 是服务器端保存⽤⼾信息的⼀种机制.
• Cookie 和 Session之间主要是通过 SessionId 关联起来的, SessionId 是 Cookie 和 Session 之间的桥梁
• Cookie 和 Session 经常会在⼀起配合使⽤. 但是不是必须配合.
◦ 完全可以⽤ Cookie 来保存⼀些数据在客⼾端. 这些数据不⼀定是⽤⼾⾝份信息, 也不⼀定是
SessionId
◦ Session 中的sessionId 也不需要⾮得通过 Cookie/Set-Cookie 传递, ⽐如通过URL传递.

获取Cookie

  • 传统获取Cookie
1 @RequestMapping("/m10")
2 public String method10(HttpServletRequest request,HttpServletResponse response) 
3 // 获取所有 cookie 信息
4 Cookie[] cookies = request.getCookies();
5 //打印Cookie信息
6 StringBuilder builder = new StringBuilder();
7 if (cookies!=null){
8 for (Cookie ck:cookies) {
9 builder.append(ck.getName()+":"+ck.getValue());
10 }
11 }
12 return "Cookie信息:"+builder;
13 }

HttpServletRequest 对象代表客⼾端的请求, 当客⼾端通过HTTP协议访问服务器时,HTTP请
求头中的所有信息都封装在这个对象中,通过这个对象提供的⽅法,可以获得客⼾端请求的所有信
息.
HttpServletResponse 对象代表服务器的响应. HTTP响应的信息都在这个对象中, ⽐如向客⼾
端发送的数据, 响应头, 状态码等. 通过这个对象提供的⽅法, 可以获得服务器响应的所有内容

  • 简洁获取Cookie
  • 手动添加Cookie
    在这里插入图片描述
1 @RequestMapping("/getCookie")
2 public String cookie(@CookieValue("bite") String bite) {
3 return "bite:" + bite;
4 }
  • @CookieValue 是 Spring MVC 提供的注解之一,用于从 HTTP 请求中获取指定名称的 Cookie 值,并将其绑定到方法的参数上。

在这里插入图片描述

获取Session
Session 存储和获取
Session是服务器端的机制, 我们需要先存储, 才能再获取
Session 也是基于HttpServletRequest 来存储和获取的
Session存储

1 @RequestMapping("/setSess")
2 public String setsess(HttpServletRequest request) {
3 // 获取Session对象
4 HttpSession session = request.getSession();
//getSession 操作内部提取到请求中的Cookie ⾥的SessionId, 然后根据SessionId获取到对应的Session 对象
5 if (session != null) {
6 session.setAttribute("username", "java");
7 }
8 return "session 存储成功";
9 }
  • 获取Session有两种⽅式
1 HttpSession getSession(boolean create);
2
3 HttpSession getSession();
  • HttpSession getSession(boolean create) : 参数如果为 true, 则当不存在会话时新建会话; 参数如果为 false, 则当不存在会话时返回 null
  • HttpSession getSession(): 和getSession(true) 含义⼀样, 默认值为true
  • void setAttribute(String name, Object value): 使⽤指定的名称绑定⼀个对象到该 session 会话

Session读取

1 @RequestMapping("/getSess")
2 public String sess(HttpServletRequest request) {
3 // 如果 session 不存在, 不会⾃动创建
4 HttpSession session = request.getSession(false);
5 String username = null;
6 if (session != null && session.getAttribute("username") != null) {
7 username = (String) session.getAttribute("username");
8 }
9 return "username:" + username;
10 }

2.4响应

2.4.1返回静态⻚⾯

  • 创建前端⻚⾯ index.html(注意路径)
    在这里插入图片描述
    html
1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <title>Index⻚⾯</title>
6 </head>
7 <body>
8 Hello,Spring MVC,我是Index⻚⾯.
9 </body>
10 </html>

后端

1 @RestController
2 public class IndexController {
3 @RequestMapping("/index")
4 public Object index(){
5 //返回index.html
6 return "/index.html";
7 }
8 }

在这里插入图片描述
结果却发现, ⻚⾯未正确返回, http响应把 “/index.html” 当做了http响应正⽂的数据
那Spring MVC如何才能识别出来 index.html 是⼀个静态⻚⾯, 并进⾏返回呢?

正确

1 @Controller
2 public class IndexController {
3 @RequestMapping("/index")
4 public Object index(){
5 return "/index.html";
6 }
7 }

在这里插入图片描述

@Controller和@RestController 区别
由于开发流⾏"前后端分离"模式,View不再返回视图, ⽽是返回显⽰视图时需要的数据.
@RestController = @Controller + @ResponseBody
@RestController 其实是返回的数据
@Controller : 定义⼀个控制器, Spring 框架启动时加载, 把这个对象交给Spring管理.
@ResponseBody : 定义返回的数据格式为⾮视图, 返回⼀个 text/html 信息

2.4.2返回数据@ResponseBody

1 @Controller
2 @ResponseBody
3 public class IndexController {
4 @RequestMapping("/index")
5 public Object index(){
6 return "/index.html";
7 }
8 }

在这里插入图片描述

2.4.3返回HTML代码⽚段

  • 后端返回数据时, 如果数据中有HTML代码, 也会被浏览器解析
1 @RequestMapping("/returnHtml")
2 @ResponseBody
3 public String returnHtml() {
4 return "<h1>Hello,HTML~</h1>";
5 }

在这里插入图片描述

响应中的 Content-Type 常⻅取值有以下⼏种:
• text/html : body 数据格式是 HTML
• text/css : body 数据格式是 CSS
• application/javascript : body 数据格式是 JavaScript
• application/json : body 数据格式是 JSON
如果请求的是js⽂件, Spring MVC会⾃动设置Content-Type为 application/javascript
如果请求的是css⽂件, Spring MVC会⾃动设置Content-Type为 text/css

2.4.4返回JSON

1 @RequestMapping("/returnJson")
2 @ResponseBody
3 public HashMap<String, String> returnJson() {
4 HashMap<String, String> map = new HashMap<>();
5 map.put("Java", "Java Value");
6 map.put("MySQL", "MySQL Value");
7 map.put("Redis", "Redis Value");
8 return map;
9 }

在这里插入图片描述

2.4.5设置状态码

Spring MVC会根据我们⽅法的返回结果⾃动设置响应状态码, 程序员也可以⼿动指定状态码
通过Spring MVC的内置对象HttpServletResponse 提供的⽅法来进⾏设置

1 @RequestMapping(value = "/setStatus")
2 @ResponseBody
3 public String setStatus(HttpServletResponse response) {
4 response.setStatus(401);
5 return "设置状态码成功";
6 }

在这里插入图片描述
注意:状态码不影响⻚⾯的展⽰

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

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

相关文章

省市县下拉框的逻辑以及多表联查的实例

2024.7.12 一. 省市县的逻辑开发。1、准备&#xff1a;1.1. 要求&#xff1a;1.2 数据库表&#xff1a; 2. 逻辑&#xff1a;3. 方法3.1 创建实体类3.2 数据访问层3.3 实现递归方法3.4 控制器实现3.5 前端处理 二、多表联查&#xff08;给我干红温了&#xff09;1. 出现了问题2…

Mac VSCode 突然闪退、崩溃、打不开了

vscode 1.90.2版本下载&#xff0c;刚上传还在审核中 1、 思路历程 VSCode 作为前端常用开发工具&#xff0c;其重要性就不一一描述了。 所以 VSCode 突然打不开了&#xff0c;真的是让我一脸懵逼。 本来以为问题不大&#xff0c;于是 &#xff1a; 1、重启了一下VSCode 2、…

【C语言】实践:贪吃蛇小游戏(附源码)

欢迎光顾我的homepage 前言 贪吃蛇小游戏想必大家都玩过吧&#xff0c;现在就要C语言代码来实现一下贪吃蛇小游戏 在实现之前&#xff0c;我们要对C语言结构体、指针、链表(单链表)有一定的基础 先来看一下预期运行效果 一、Win32 API 这里实现贪吃蛇游戏会使用一些Win32 AP…

论文阅读【时间序列】TimeMixer (ICLR2024)

【时间序列】TimeMixer (ICLR2024) 原文链接&#xff1a;TIMEMIXER: DECOMPOSABLE MULTISCALE MIXING FOR TIME SERIES FORECASTING 代码仓库&#xff1a;https://github.com/kwuking/TimeMixer 符号定义 符号含义P用于预测的历史序列长度&#xff08;seq_len&#xff09;F预测…

权力之望账号怎么注册 权力之望注册游戏账号教程

不会吧不会吧&#xff0c;这款新的MMORPG游戏&#xff0c;权力之望&#xff0c;马上就要上线啦。支援PC 及行动装置跨平台游玩的MMORPG《权力之望》以Unity 引擎研发&#xff0c;利用动态捕捉、3D 扫描技术呈现细腻的游戏画面。本作主打高自由度的武器选择成长与后续的战斗类型…

分割——半自动打标签工具ISAT详细安装及使用教程

&#x1f4aa; 专业从事且热爱图像处理&#xff0c;图像处理专栏更新如下&#x1f447;&#xff1a; &#x1f4dd;《图像去噪》 &#x1f4dd;《超分辨率重建》 &#x1f4dd;《语义分割》 &#x1f4dd;《风格迁移》 &#x1f4dd;《目标检测》 &#x1f4dd;《暗光增强》 &a…

C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】

目录 C语言中的数组&#xff1a;掌握数据的有序集合【一维数组&#xff0c;二维数组&#xff0c;字符串数组】一维数组一维数组的创建数组的七种初始化完全初始化&#xff1a;部分初始化&#xff1a;字符数组的初始化&#xff1a;自动初始化为0&#xff1a;使用memset函数初始化…

[C++]初识C++(命名空间,命名空间使用,函数重载,缺省参数等)

&#x1f496;&#x1f496;&#x1f496;欢迎来到我的博客&#xff0c;我是anmory&#x1f496;&#x1f496;&#x1f496; 又和大家见面了 欢迎来到C探索系列 作为一个程序员你不能不掌握的知识 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成本搭建个人网站…

c++之类和对象上

目录 1. 类的定义 2. 访问限定符 3. 类域 4. 实例化 5. 对象的大小 6. 为什么要内存对齐 7. this指针 1. 类的定义 • class为定义类的关键字&#xff0c;Stack为类的名字&#xff0c;{}中为类的主体&#xff0c;注意类定义结束时后⾯分号不能省 略。类体中内容称为类的…

(篇一)走进FreeRtos—认识FreeRtos

【温故知新篇】 【在现在的工作中一直在使用FreeRtos&#xff0c;但是对它的了解还是不够深入&#xff0c;现在由浅入深&#xff0c;分模块学习和记录&#xff0c;最后将自己基于FreeRtos开发项目实践】 首先我们将这个系统当作一座庄园&#xff0c;开始第一步走进庄园&#…

【备战秋招】——算法题目训练和总结day4

【备战秋招】——算法题目训练和总结day4&#x1f60e; 前言&#x1f64c;Fibonacci数列我的题解思路分享代码分享 单词搜索我的题解思路分享代码分享 杨辉三角我的题解思路分享代码分享 总结撒花&#x1f49e; &#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢…

ubuntu重装系统后,安装cuda,cudnn

一、 先安装驱动&#xff0c;如果驱动安装不成功&#xff0c;会影响桌面&#xff0c;再重装系统还来得及&#xff0c;尝试了很多方法&#xff0c;还是用系统安装最靠谱&#xff1a; 首先进入Ubuntu搜索栏目&#xff0c;找到软件更新器的一个图标&#xff0c;点开之后是这样的。…

开发个人Ollama-Chat--5 模型管理 (二)

开发个人Ollama-Chat–5 模型管理 (二) ChatGPT 这是该项目的最终效果&#xff0c;使用ollama的open-webui进行人与机器的对话功能&#xff0c;对话的后端服务则完全对接自己开发的Go项目。 如何实现呢&#xff1f;则通过这篇文章&#xff0c;一一给大家剖析后端的原理及功能…

mmaction2的GPU环境配置记录RTX3090,cuda12.2,ubuntu22.04版本

1、配置镜像源 最重要的一个步骤,先看下镜像源地址,如果镜像源有问题,所有的包安装都会有问题 镜像源地址获取地址:选择对应的ubuntu版本号,将里面的镜像源地址复制出来,更新到服务器 ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirro…

牛客小白月赛98

骰子魔术 jackle 会拿出一枚骰子&#xff0c;骰子的表面分别写上了从 1∽5001\backsim 5001∽500 的数字&#xff0c;朋友会随便说一个 1∽5001\backsim 5001∽500 之间的点数&#xff0c;jackle 都能保证百分之百的掷出这个点数。 当然 jackle 有备而来&#xff0c;他准备了 …

LeetCode分发糖果(贪心思路分析)

题目描述 贪心思路 思路及解法 我们可以将「相邻的孩子中&#xff0c;评分高的孩子必须获得更多的糖果」这句话拆分为两个规则&#xff0c;分别处理。 左规则&#xff1a;当 ratings[i−1]<ratings[i] 时&#xff0c;i 号学生的糖果数量将比 i−1 号孩子的糖果数量多。 …

实现win10多用户同时远程连接登陆(详细实验步骤版)

目录 目的环境实验步骤&#xff08;在需要被远程的win10上&#xff09;1. 开启远程桌面服务2. 编辑组策略实现多用户登录3. 安装RDPWrap实现多用户同时登录 测试 目的 默认情况下&#xff0c;win10 专业版只支持本地或远程只能同时存在一个连接。windows server支持多连接。 比…

【unity笔记】十、Obi绳索插件使用

一. 创建绳索 1.1 新建蓝图 在Assets中右键选择创建->Obi->Rope Blueprint&#xff0c;其属性如图所示 1.2 Obi solver 在场景下创建一个obi solver对象&#xff0c;在该对象下再创建Obi Rope对象。 随后将蓝图拖到Obi Rope对象下的Obi Rope组件&#xff0c;即可看到…

MES系统与其他系统的集成:提升制造业智能化的关键路径

在当今高度竞争的制造业环境中&#xff0c;企业对于生产效率、质量控制、资源优化以及快速响应市场变化的需求日益迫切。制造执行系统&#xff08;MES&#xff09;作为连接企业计划层与车间控制层的重要桥梁&#xff0c;其在提升生产透明度和优化生产流程方面发挥着不可替代的作…

【SQL】如何用SQL写透视表

【背景】 报表中有一大需求是透视表,目前有很多分析类应用也搭载了此类功能,那么我们能不能直接用SQL做透视表呢? 【分析】 BI类软件将透视表功能做在了前端,但是数据本身还是存储在数据库中,所以必然有方法可以用SQL直接实现透视表。 【心法】 透视表是任意选取一个…