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

15.springboot-控制器处理参数传递

22.springMVC

Spring MVC 是非常著名的 Web 应用框架,现在的大多数 Web 项目都采用 Spring MVC。它与 Spring 有着紧 密的关系。是 Spring 框架中的模块,专注 Web 应用,能够使用 Spring 提供的强大功能,IoC , Aop 等等。

Spring MVC 框架是底层是基于 Servlet 技术。遵循 Servlet 规范,Web 组件 Servlet,Filter,Listener 在 SpringMVC 中都能使用。同时 Spring MVC 也是基于 MVC 架构模式的,职责分离,每个组件只负责自己的功能,组件解耦。

学习 Spring MVC 首先具备 Servlet 的知识,关注 MVC 架构的 M、V、C 在 Spring MVC 框架中的实现。掌握了 这些就能熟练的开发 Web 应用。

Spring Boot 的自动配置、按约定编程极大简化,提高了 Web 应用的开发效率

控制器

控制器一种有 Spring 管理的 Bean 对象,赋予角色是“控制器”。作用是处理请求,接收浏览器发送过来的

参数,将数据和视图应答给浏览器或者客户端 app 等。

控制器是一个普通的 Bean,使用@Controller 或者@RestController 注释。@Controller 被声明为@Component。

所以他就是一个 Bean 对象。

  • 有@Controller, @RestController注解的类叫做控制器, 项目中控制器有很多
    一般相关的业务是一个控制器, 比如订单的处理工作, 订单的控制OrderController.

image-20250420001432087

  • @Controller, @RestController区别
    @RestController包含了@Controller的功能,同时加入了@ResponseBody的注解。

image-20250420001512680

表示当前控制器类中的所有方法,都会默认加入@ResponseBody的功能。 方法的返回值是数据可以通过
HttpServletResponse输出给浏览器,请求方法。

@Controller注解有@Component的功能, 控制器类对象是Spring容器管理的。

  • 定制控制器方法
    1.方法上面的@RequestMapping(value=“请求的uri地址”) :表示这个uri的请求由当前方法处理
    @GetMapping, @PostMapping, @PutMapping , @DeleteMapping
    2.控制器方法的形参,接收请求的参数,多种方法接收参数

image-20250420001831594

3.控制器方法的返回值,表示应答结果,给请求的结果(数据,视图)

匹配请求路径

SpringMVC 支持多种策略,匹配请求路径到控制器方法。AntPathMatcher 、 PathPatternParser

image-20250420003013088

从 SpringBoot3 推荐使用 PathPatternParser 策略。比之前 AntPathMatcher 提示 6-8 倍吞吐量。 
PathPatternParser 中有关 uri 的定义 通配符: 
? : 一个字符 
* : 0 或多个字符。在一个路径段中匹配字符
**:匹配 0 个或多个路径段,相当于是所有 
正则表达式: 支持正则表达式 
RESTFul 的支持路径变量
{变量名} 
{myname:[a-z]+}: 正则 a-z 的多个字面,路径变量名称“myname”。@PathVariable(“myname”)
{*myname}: 匹配多个路径一直到 uri 的结尾

? 单个字符

image-20250420005436829

package com.yanyu.demo1.controller;import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;/*** @Author yanyu666_508200729@qq.com* @Date 2025/4/20 0:48* @description:*/@RestController
public class PathController {
//      ?  代表单个字符@GetMapping("/path1/d?mo")public String path1(HttpServletRequest request){return request.getRequestURI();//获取请求的  uri}}
  • 测试
    • 浏览器
    • idea
      • image-20250420005534675
      • image-20250420005906638
    • resources
      • 不同的请求 ### 隔开
      • image-20250420005638852

image-20250420010049613

image-20250420010056262

* 0个或者多个字符

package com.yanyu.demo1.controller;import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;/*** @Author yanyu666_508200729@qq.com* @Date 2025/4/20 0:48* @description:*/@RestController
public class PathController {
//      ?  代表单个字符@GetMapping("/path1/d?mo")public String path1(HttpServletRequest request){return request.getRequestURI();//获取请求的  uri}
//        0  多个字符@GetMapping("/path2/*.png")public String path2(HttpServletRequest request){return request.getRequestURI();//获取请求的  uri}}

image-20250420011304577

image-20250420011428101

**

 //       所有字符、所有路径@GetMapping("/path3/**")public String path3(HttpServletRequest request){return request.getRequestURI();//获取请求的  uri}

image-20250420012040112

image-20250420012126912

image-20250420012200306

{* 变量名}

/    {*id}@GetMapping("/path4/{*id}")
//      以  path4  开头,直接结尾,变量名字是  idpublic String path4(@PathVariable("id") String myId, HttpServletRequest request){return request.getRequestURI() + ",变量参数:" + myId;//获取请求的  uri}
//   注意:@GetMapping("/order/{*id}/{*date}")无效的, {*..}后面不能在有匹配规则了

image-20250420013113570

image-20250420013144867

{变量名:正则表达式}

    /** \w:匹配一个“单词字符”,包括:
所有大小写字母(a-z 和 A-Z)。
所有数字(0-9)。
下划线(_)。
+:表示前面的字符(或字符集)出现一次或多次。* */@GetMapping("/path5/{fname:\\w+}.png")
//      以  path4  开头,直接结尾,变量名字是  idpublic String path5(@PathVariable("fname") String myId, HttpServletRequest request){return request.getRequestURI() + ",变量参数:" + myId;//获取请求的  uri}

image-20250420014219007

image-20250420014223957

image-20250420014254088

唯一路径

image-20250420014822317

推荐使用

@RequestMapping

@RequestMapping:用于将 web 请求映射到控制器类的方法。此方法处理请求。可用在类上或方法上。

在类和方法同时组合使用。

重要的属性

value:别名 path 表示请求的 uri, 在类和方法方法同时使用 value,方法上的继承类上的 value 值。

method:请求方式,支持 GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE。

值为:RequestMethod[] method() , RequestMethod 是 enum 类型。

快捷注解

@GetMapping: 表示 get 请求方式的@RequestMapping

@PostMapping:表示 post 请求方式的@RequestMapping

@PutMapping:表示 put 请求方式的@RequestMapping

@DeleteMapping: 表示 delete 请求方式的@RequestMapping

对于请求方式 get,post,put,delete 等能够 HttpMethod 表示,Spring Boot3 之前是 enum,Spring Boot3 是 class

image-20250420015533040

控制器方法参数类型与可用返回值类型

  • 参数类型
完整 https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-arguments

image-20250420172628508

  • 返回值
https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-return-types

image-20250420172818601

接收请求参数

用户在浏览器中点击按钮时,会发送一个请求给服务器,其中包含让服务器程序需要做什么的参数。 这些

参数发送给控制器方法。控制器方法的形参列表接受请求参数。

接受参数方式:

请求参数与形参一一对应,适用简单类型。形参可以有合适的数据类型,比如 String,Integer ,int 等。

对象类型,控制器方法形参是对象,请求的多个参数名与属性名相对应。

@RequestParam 注解,将查询参数,form 表单数据解析到方法参数,解析 multipart 文件上传。

@RequestBody,接受前端传递的 json 格式参数。

HttpServletRequest 使用 request 对象接受参数, request.getParameter(“…”)

@RequestHeader ,从请求 header 中获取某项值

解析参数需要的值,SpringMVC 中专门有个接口来干这个事情,这个接口就是:HandlerMethodArgumentResolver

中文称呼:处理器方法参数解析器,说白了就是解析请求得到 Controller 方法的参数的值。

请求参数与形参一一对应

package com.yanyu.demo1.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;/*** @Author yanyu666_508200729@qq.com* @Date 2025/4/21 21:46* @description:*/
@RestController
public class ParameterController {
//    p1?name=yanyu&age= 20@GetMapping("p1")public String p1(String name,Integer age){return "前端传递的参数是:" + name + " ," + age ;}
}
  • 应用:一一对应,适合接收简单类型数据String,int,long,double,float, 参数数量少

image-20250421215018416

对象来接收

  • 使用对象接收参数, 要求对象的属性名称和请求中参数名一样, 属性有set方法,类有无参数构造方法

  • 一一对应与对象接收还可以混合使用

  • 准备映射参数的实体类

package com.yanyu.demo1.vo;/*** @Author yanyu666_508200729@qq.com* @Date 2025/4/21 21:56* @description:   映射传递参数的实体类,属性名  与 传递的参数要一致*/
public class Student {private String name;private Integer age;public Student() {}public Student(String name, Integer age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}}
@GetMapping("p2")public String p2(Student student){
//        可以通过对象,执行各种服务return student.toString();}

image-20250421220211048

HttpServletRequest

使用HttpServletRequest接收参数

   @GetMapping("p3")
//    和以前的一样public String p3(HttpServletRequest request){String name = request.getParameter("name");String age = request.getParameter("age");return "HttpServletRequest接收参数" + name + " ," + age;}

image-20250421220833013

@RequestParam

@RequestParam 是 Spring MVC 中的一个注解,用于将 HTTP 请求中的参数绑定到控制器方法的参数上。它非常适用于处理 GET 请求的查询参数或 POST 请求的表单数据。以下是 @RequestParam 的详细用法和示例。

1. 基本用法

1.1 单个参数绑定

@RequestParam 可以将请求中的参数值绑定到方法的参数上。如果请求中存在对应的参数,Spring 会自动将其值传递给方法参数。

示例代码:

java

复制

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ExampleController {@GetMapping("/greet")public String greet(@RequestParam String name) {return "Hello, " + name + "!";}
}

请求示例:

GET /greet?name=John

返回结果:

Hello, John!

2. 参数默认值

如果请求中没有提供某个参数,可以通过 defaultValue 属性为该参数指定默认值。

示例代码:

java

复制

@GetMapping("/greet")
public String greet(@RequestParam(defaultValue = "Guest") String name) {return "Hello, " + name + "!";
}

请求示例:

GET /greet

返回结果:

Hello, Guest!

3. 参数是否必需

通过 required 属性可以指定某个参数是否必需。如果 required = true,且请求中没有提供该参数,Spring 会抛出 MissingServletRequestParameterException 异常。

示例代码:

java

复制

@GetMapping("/greet")
public String greet(@RequestParam(required = true) String name) {return "Hello, " + name + "!";
}

请求示例:

GET /greet

返回结果:

400 Bad Request: Required String parameter 'name' is not present
@GetMapping("p4")public String p4(@RequestParam(value = "name", required = true) String name,
//          把请求的  name 传递给  String name,          参数必须有@RequestParam(value = "age", required = false, defaultValue = "22") Integer age) {
//                                                   参数可以没有       没有的情况下,默认值 22return "@RequestParam传递的参数:" + name + "," + age;}

image-20250421222147532

image-20250421222152418

@RequestHeader

@RequestHeader 是 Spring MVC 提供的一个注解,用于将 HTTP 请求头中的值绑定到控制器方法的参数上。它允许开发者以声明式的方式获取和使用请求头中的信息。以下是 @RequestHeader 的常见用法:

  1. 获取指定的请求头

可以通过指定 namevalue 属性来获取请求头中的特定值。例如:

java

复制

@GetMapping("/example")
public String handleRequest(@RequestHeader("Accept-Encoding") String encoding) {// 使用 encoding...return "Handled request with encoding: " + encoding;
}

如果请求头中不存在指定的头,可以通过设置 required = falsedefaultValue 来指定默认值:

java

复制

@GetMapping("/example")
public String handleRequest(@RequestHeader(value = "Accept-Encoding", required = false, defaultValue = "gzip") String encoding) {// 使用 encoding...return "Handled request with encoding: " + encoding;
}
  1. 获取所有请求头

可以将参数类型设置为 Map<String, String>HttpHeaders 来获取所有请求头。例如:

java

复制

@GetMapping("/example")
public String handleRequest(@RequestHeader Map<String, String> headers) {// 使用 headers...return "Handled request with headers: " + headers;
}

或者:

java

复制

@GetMapping("/example")
public String handleRequest(@RequestHeader HttpHeaders headers) {// 使用 headers...return "Handled request with headers: " + headers;
}
  1. 类型转换

如果目标方法参数类型不是 String,Spring 会自动应用类型转换。例如:

java

复制

@GetMapping("/example")
public String handleRequest(@RequestHeader("Keep-Alive") long keepAlive) {// 使用 keepAlive...return "Handled request with keepAlive: " + keepAlive;
}
  1. 处理多个请求头

可以同时使用多个 @RequestHeader 注解来处理多个请求头。例如:

java

复制

@GetMapping("/example")
public String handleRequest(@RequestHeader("Accept-Encoding") String encoding,@RequestHeader("Keep-Alive") long keepAlive) {// 使用 encoding 和 keepAlive...return "Handled request with encoding: " + encoding + " and keepAlive: " + keepAlive;
}

注意事项

  • 如果请求头中不存在指定的头,且未设置默认值,Spring 会抛出 MissingRequestHeaderException
  • 当使用 HttpHeaders 类型时,可以方便地访问和操作请求头。

通过 @RequestHeader 注解,可以方便地访问和处理 HTTP 请求头中的信息,从而增强 Web 应用程序的功能。

//    与 @RequestParam  一样@GetMapping("p5")public  String p5(@RequestHeader(value = "Accept",required = false,defaultValue = "default") String accept){return accept;}

image-20250421223521373

@RequestBody

@RequestBody 是 Spring MVC 中的一个注解,用于将 HTTP 请求的正文(body)绑定到控制器方法的参数上。它通常用于处理 POST 或 PUT 请求,这些请求通常包含 JSON 或 XML 格式的数据。Spring 使用 HttpMessageConverter 接口来自动将请求正文反序列化为 Java 对象。

1. 基本用法

1.1 接收 JSON 数据

假设客户端发送一个 JSON 格式的请求正文,你可以使用 @RequestBody 将其绑定到一个 Java 对象上。

示例代码:

java

复制

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ExampleController {@PostMapping("/user")public String createUser(@RequestBody User user) {return "User created: " + user.getName();}
}

User 类:

java

复制

public class User {private String name;private String email;// Getters and Setterspublic String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}
}

请求示例:

复制

POST /user
Content-Type: application/json{"name": "John Doe","email": "john.doe@example.com"
}

返回结果:

User created: John Doe

2. 接收 XML 数据

@RequestBody 也可以用于接收 XML 格式的请求正文。你需要确保配置了支持 XML 的 HttpMessageConverter(如 Jaxb2RootElementHttpMessageConverter)。

示例代码:

java

复制

@PostMapping("/user")
public String createUser(@RequestBody User user) {return "User created: " + user.getName();
}

User 类(使用 JAXB 注解):

java

复制

import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement
public class User {private String name;private String email;// Getters and Setterspublic String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}
}

请求示例:

复制

POST /user
Content-Type: application/xml<User><name>John Doe</name><email>john.doe@example.com</email>
</User>

返回结果:

User created: John Doe

package com.yanyu.demo1.vo;/*** @Author yanyu666_508200729@qq.com* @Date 2025/4/21 21:56* @description:   映射传递参数的实体类,属性名  与 传递的参数要一致*/
public class Student {private String name;private Integer age;public Student() {}public Student(String name, Integer age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}}
   @PostMapping("p6")public  String p6(@RequestBody Student student){return student.toString();}

idea测试

POST http://localhost:8080/p6
Content-Type: application/json{"name":"烟雨","age":20}<> 2025-04-21T224727.200.txt

image-20250421224915400

Reader-InputStream

Reader

或 InputStream 读取请求体的数据, 适合 post 请求体的各种数据。具有广泛性

 @PostMapping("p7")public String p7(Reader reader){StringBuffer stringBuffer = new StringBuffer("");//        使用字符流  读取  请求体数据BufferedReader bufferedReader = new BufferedReader(reader);var line = "";while (true){try {if (!((line = bufferedReader.readLine() ) != null)) break;} catch (IOException e) {throw new RuntimeException(e);}stringBuffer.append(line);}return stringBuffer.toString();}

image-20250421232253065

接收多个值的数组参数

例如:批量传入 id ,根据 id 进行数据的删除操作

    @GetMapping("p8")public String getAllId(Integer [] id){/** 使用 Arrays.stream(id) 将数组转换为流。
使用 toList() 方法将流转换为列表。* */List<Integer> list = Arrays.stream(id).toList();return list.toString();}

image-20250421233243384

image-20250421233322305

相关文章:

15.springboot-控制器处理参数传递

22.springMVC Spring MVC 是非常著名的 Web 应用框架&#xff0c;现在的大多数 Web 项目都采用 Spring MVC。它与 Spring 有着紧 密的关系。是 Spring 框架中的模块&#xff0c;专注 Web 应用&#xff0c;能够使用 Spring 提供的强大功能&#xff0c;IoC , Aop 等等。 Spring…...

半成品的开源双系统VLA模型,OpenHelix-发表于2025.5.6

半成品的开源双系统VLA模型&#xff0c;OpenHelix https://openhelix-robot.github.io/ 0. 摘要 随着OpenVLA的开源&#xff0c;VLA如何部署到真实的机器人上获得了越来越多的关注&#xff0c;各界人士也都开始尝试解决OpenVLA的效率问题&#xff0c;双系统方案是其中一个非…...

网站推荐(第四期)

好久没有推荐过网站了&#xff0c;重拾推荐一波&#xff0c;最近发现这几个确实不错。 某火箭共享账号 官网&#xff1a;https://id.bocchi.vip/ 苹果用户专用&#xff0c;都是买了某火箭的账号&#xff0c;懂得都懂。 这玩意竟然还是个开源项目&#xff0c;项目地址&#x…...

2024 睿抗机器人开发者大赛CAIP-编程技能赛-专科组(国赛)解题报告 | 珂学家

前言 题解 2024 睿抗机器人开发者大赛CAIP-编程技能赛-专科组&#xff08;国赛&#xff09;&#xff0c;陈越姐姐出题。 国赛比省赛&#xff0c;难度增强了不少&#xff0c;题目就剩下4个题了。 涉及堆栈&#xff0c;hash表&#xff0c;优先队列等高阶数据结构的使用&#x…...

git工具使用详细教程-------命令行和TortoiseGit图形化

下载 git下载地址&#xff1a;https://git-scm.com/downloads TortoiseGit&#xff08;图形化工具&#xff09;下载地址&#xff1a;https://tortoisegit.org/download/ 认识git结构 工作区&#xff1a;存放代码的地方 暂存区&#xff1a;临时存储&#xff0c;将工作区的代码…...

Mysql新增

插入一个记录需要的时间由下列因素组成&#xff0c;其中的数字表示大约比例&#xff1a; 连接&#xff1a;(3)发送查询给服务器&#xff1a;(2)分析查询&#xff1a;(2)插入记录&#xff1a;&#xff08;1x记录大小&#xff09;插入索引&#xff1a;&#xff08;1x索引&#x…...

AI Agent开发第64课-DIFY和企业现有系统结合实现高可配置的智能零售AI Agent(上)

开篇 我们之前花了将近10个篇章讲Dify的一些基础应用,包括在讲Dify之前我们讲到了几十个AI Agent的开发例子,我不知道大家发觉了没有,在AI Agent开发过程中我们经常会伴随着这样的一些问题: 需要经常改猫娘;需要经常改调用LLM的参数,甚至在一个流程中有3个节点,每个节点…...

【嵌入式】记一次解决VScode+PlatformIO安装卡死的经历

PlatformIO 是开源的物联网开发生态系统。提供跨平台的代码构建器、集成开发环境&#xff08;IDE&#xff09;&#xff0c;兼容 Arduino&#xff0c;ESP8266和mbed等。 开源库地址&#xff1a;https://github.com/platformio 在 VScode 中配置 PlatformIO 插件&#xff0c;记录…...

文件系统交互实现

关于之前的搭建看QT控件文件系统的实现-CSDN博客&#xff0c;接下来是对本程序的功能完善&#xff0c;我想着是这样设计的&#xff0c;打开一个目录以后&#xff0c;鼠标选中一个项可以是目录&#xff0c;也可以是文件&#xff0c;右键可以出现一个菜单选择操作&#xff0c;比如…...

MySQL 事务(一)

文章目录 CURD不加控制&#xff0c;会有什么问题CURD满足什么属性&#xff0c;能解决上述问题&#xff1f;什么是事务为什么要有事务事务的版本支持了解事务的提交方式 事务常见操作方式研究并发场景事务的正常操作事务的非正常情况的案例结论事务操作的注意事项 CURD不加控制&…...

【全解析】EN 18031标准下的 AUM 身份认证机制[下篇]

在上篇文章中&#xff0c;我们详细介绍了EN 18031标准中AUM身份认证机制的AUM - 1、AUM - 2和AUM - 3条款。今天&#xff0c;我们将继续深入探讨AUM - 4到AUM - 6的相关内容&#xff0c;进一步了解该标准如何保障无线电设备的身份认证安全。 一、AUM - 4&#xff1a;更改认证器…...

常见排序算法及复杂度分析

冒泡排序 (Bubble Sort) 基本思想 相邻元素比较&#xff0c;大的元素后移 每轮将最大元素"冒泡"到末尾 代码实现 void bubbleSort(int arr[], int n) {for (int i 0; i < n-1; i) {for (int j 0; j < n-i-1; j) {if (arr[j] > arr[j1]) {swap(arr[j]…...

彻底解决sublime text4无法打开install package界面安装插件问题

1. 说明 最新版的 sublime text4&#xff0c;不管是通过软件自带的命令安装的 package control 插件&#xff0c;还是从官网下载的 package control 插件&#xff0c;之后通过 CommandShiftP 打开面板&#xff0c;输入 Package Control&#xff0c;可能找不到 Package Control…...

用户现场不支持路由映射,如何快速将安防监控EasyCVR视频汇聚平台映射到公网?

一、方案背景​ 随着数字化安防与智能交通管理发展&#xff0c;视频监控远程管理需求激增。EasyCVR作为专业视频融合平台&#xff0c;具备多协议接入等核心功能&#xff0c;是智能监控的重要工具。但实际部署中&#xff0c;当EasyCVR处于内网且路由器无法进行端口映射时&#…...

C#实现访问远程硬盘(附源码)

在现实场景中&#xff0c;我们经常用到远程桌面功能&#xff0c;而在某些场景下&#xff0c;我们需要使用类似的远程硬盘功能&#xff0c;这样能非常方便地操作对方电脑磁盘的目录、以及传送文件。那么&#xff0c;这样的远程硬盘功能要怎么实现了&#xff1f; 这次我们将给出…...

嵌入式软件学习记录 - DAY2

一、volatile 修饰符 1. 能修饰什么&#xff1f; 变量&#xff08;包括普通变量、指针、结构体成员等&#xff09;。不能修饰函数&#xff08;但函数参数或返回值可以是 volatile 类型&#xff09;。 2. 作用 告诉编译器不要优化该变量的访问&#xff1a;每次读取或写入该变…...

图片、音频、视频都能转?简鹿格式工厂了解一下

我们每天都会接触到各种各样的音视频和图片文件。无论是拍摄的照片、录制的视频&#xff0c;还是下载的音频资源&#xff0c;它们往往以不同的格式存在——有些适合分享&#xff0c;有些适合编辑&#xff0c;而有些则仅限特定设备或平台使用。格式不统一的问题&#xff0c;正在…...

Qt—用SQLite实现简单的注册登录界面

1.实现目标 本次实现通过SQLite制作一个简易的登录窗口&#xff0c;当点击注册按钮时&#xff0c;登录窗口会消失&#xff0c;会出现一个新的注册界面&#xff1b;完成注册或退出注册时&#xff0c;注册窗口会消失&#xff0c;重新出现登录窗口。注册过的用户信息会出现在SQLi…...

Nginx模块配置与请求处理详解

Nginx 作为模块化设计的 Web 服务器,其核心功能通过不同模块协同完成。以下是各模块的详细配置案例及数据流转解析: 一、核心模块配置案例 1. Handler 模块(内容生成) 功能:直接生成响应内容(如静态文件、重定向等) # 示例1:静态文件处理(ngx_http_static_module)…...

MySQL查询不区分大小写问题剖析

概述 在MySQL中&#xff0c;查询不区分大小写的问题通常与字符集的校对规则&#xff08;Collation&#xff09;有关。以下是详细解释和解决方案资料已经分类整理好&#xff1a;https://pan.quark.cn/s/f52968c518d3 一、原因分析 1. 默认校对规则 MySQL的默认校对规则&#…...

MySQL命令行导出数据(docker版本)

MySQL命令行导出数据(docker版本) 1、登录数据库 $mysql -h 10.1.1.143 -u root -p 2、用命令行从MySQL导出数据(无标题) #查看导出时可以存储的路径 mysql> SHOW VARIABLES LIKE secure_file_priv; ----------------------------------------- | Variable_name | Valu…...

分布式锁: Redisson红锁(RedLock)原理与实现细节

分布式锁是分布式系统的核心基础设施&#xff0c;但 单节点 Redis 锁在高可用场景下存在致命缺陷&#xff1a;当 Redis 主节点宕机时&#xff0c;从节点可能因异步复制未完成而丢失锁信息&#xff0c;导致多个客户端同时持有锁。为此&#xff0c;Redis 作者 Antirez 提出了 Red…...

Python 3.13.3 安装教程

原文来自&#xff1a;Python 3.13.3 安装教程 | w3cschool笔记 &#xff08;请勿标记为付费&#xff01;&#xff01;&#xff01;&#xff09; Python 是一种广泛使用的编程语言&#xff0c;广泛应用于 Web 开发、科学计算、数据处理、人工智能等领域。Python 3.13.3 作为 P…...

现代化水库运行管理矩阵平台如何建设?

政策背景 2023年8月24日&#xff0c;水利部发布的水利部关于加快构建现代化水库运行管理矩阵的指导意见中指出&#xff0c;在全面推进水库工程标准化管理的基础上&#xff0c;强化数字赋能&#xff0c;加快构建以推进全覆盖、全要素、全天候、全周期“四全”管理&#xff0c;完…...

2025程序设计天梯赛补题报告

2025程序设计天梯赛补题报告 仅包含L1 L2 L1-6 这不是字符串题 题目描述 因为每年天梯赛字符串题的解答率都不尽如人意&#xff0c;因此出题组从几年前开始决定&#xff1a;每年的天梯赛的 15 分一定会有一道字符串题&#xff0c;另外一道则一定不是字符串题。 小特现在有…...

SpringBoot3.4.5下Lombok的@Data注解不生效,解决方案

程序员Feri一名12年的程序员,做过开发带过团队创过业,擅长Java、嵌入式、鸿蒙、人工智能等,专注于程序员成长那点儿事,希望在成长的路上有你相伴&#xff01;君志所向,一往无前&#xff01; 1.问题 最近的项目是Python、Java、鸿蒙的来回交叉&#xff0c;再做的一个Java的项目…...

iOS设备投屏Archlinux

我的iphone手机屏太小&#xff0c;我想把手机投到archlinux电脑上看。与是我就想找一个免费的软件。 UxPlay https://github.com/FDH2/UxPlay GPLv3&#xff0c;开源。原来只支持 AirPlay Mirror 协议&#xff0c;现在新增 支持来自 AirPlay 的纯音频 &#xff08;Apple Los…...

如何在 Windows 上安装类似 Synaptic 的 Chocolatey GUI 包管理器

如果你正在寻找类似 Linux 中 APT 的 Windows 包管理器&#xff0c;那么没有什么比 Chocolatey 更好的了。它是 Windows 10 上可用的最佳包管理器之一&#xff0c;可以通过命令行界面安装所有流行的软件和工具。然而&#xff0c;这并不意味着如果你不喜欢命令行&#xff0c;你就…...

Guided Filtering相关记录

一、背景介绍 以前折腾保边滤波时候&#xff0c;刷了一些Guided Filtering相关资料。这里主要是对它们做个算法效果复现和资料简单整理。 二、Guided Filtering 1、基本原理 原版Guided Filtering的提出&#xff0c;主要是为了改善双边滤波做保边平滑滤波器时候的梯度翻转伪影…...

智能AI构建工地安全网:跌倒、抽搐、区域入侵多场景覆盖

智能AI在工地安全中的应用&#xff1a;从监测到救援的全流程实践 一、背景&#xff1a;高温作业下的工地安全挑战 随着夏季高温持续&#xff0c;工地户外作业环境面临严峻考验。工人因高温疲劳、脱水或突发疾病引发的行为异常&#xff08;如晕厥、抽搐、跌倒&#xff09;频发…...