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

SpringMvc的请求和响应

SpringMvc的数据响应

1.springmvc的数据相应方式

        (1)页面跳转

                直接返回字符串

                通过ModelAndView对象返回

        (2)回写数据

                直接返回字符串

                返回对象或集合

页面跳转

jsp页面


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page isELIgnored="false"%>
<html>
<head><title>Title</title>
</head>
<body><h1>success${username}</h1>
</body>
</html>

1.返回字符串形式        

        最出始的写法

 @RequestMapping("/quick")public String save(){System.out.println("Controller running ...");return "/jsp/success.jsp";}

 由于比较繁琐每次都要加上/jsp/  .jsp,于是直接返回字符串:此种方式将返回字符串与试图解析器的前后缀拼接后跳转

在springmvc.xml配置

<!--配置内部资源解释器--><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/jsp/"></property><property name="suffix" value=".jsp"></property></bean>
  @RequestMapping("/quick")public String save(){System.out.println("Controller running ...");return "success";}

2.返回ModelAndView对象

自己手动创建ModelAndView对象,并且设置相应的值

@RequestMapping("/quick2")public ModelAndView save2(){/** model:模型 作用封装数据* view:视图 作用展示数据* */ModelAndView modelAndView = new ModelAndView();//设置模型数据modelAndView.addObject("username","wukd");//设置试图名称modelAndView.setViewName("success");return modelAndView;}

通过框架调用该方法时,传参时传ModelAndView对象

 @RequestMapping("/quick3")public ModelAndView save3(ModelAndView modelAndView){//设置模型数据modelAndView.addObject("username","wukd2");//设置试图名称modelAndView.setViewName("success");return modelAndView;}

 单独传入model对象

 @RequestMapping("/quick4")public String save4(Model model){model.addAttribute("username","你好!");return "success";}

3.向request域中存入对象

(1)通过springmvc框架注入的request对象setAttribute()方法设置

 @RequestMapping("/quick5")public String save(HttpServletRequest request){//将数据存储到request域中request.setAttribute("username","lisi");return "success";}

(2)通过ModelAndView的addObject()方法设置

  @RequestMapping(value = "/quick5")public ModelAndView save5(){ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("username","klc");modelAndView.setViewName("success");return modelAndView;}

回写数据

1.直接返回字符串

(1)通过springmvc框架注入的response.getWriter().print()回写数据,此时不需要试图跳转,业务方法返回值为void

 @RequestMapping("/quick6")public void save6(HttpServletResponse response) throws IOException {response.getWriter().print("kl");}

(2)将需要回写的字符串直接返回,但此时需要通过@ResponseBody注解告知SpringMvc框架,方法返回的字符串不是跳转是直接在http响应体中返回

 @ResponseBody//告知Springmvc框架该方法不进行页面视图跳转直接进行页面数据响应(以Http响应体)@RequestMapping(value = "/quick7")public String save7(HttpServletResponse response) throws IOException {return "hellonk";}

(3)在异步项目中,客户端与服务器端往往要进行json格式字符串交互,此时可以动手拼接json字符串返回

@ResponseBody()//告知Springmvc框架该方法不进行页面视图跳转直接进行页面数据响应(以Http响应体)@RequestMapping(value = "/quick8")public String save8(HttpServletResponse response) throws IOException {return "{\"username\":\"lisi\",\"age\":18}";}

上述方式手动拼接json格式字符串很麻烦,可以使用jackson进行转换,导入jackson坐标

 <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.0</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.0</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.0</version></dependency>
 @ResponseBody()//告知Springmvc框架该方法不进行页面视图跳转直接进行页面数据响应(以Http响应体)@RequestMapping(value = "/quick9")public String save9(HttpServletResponse response) throws IOException {User user=new User();user.setAge(12);user.setUsername("fhds");//使用json的转换工具将对象转换为json的数据格式ObjectMapper objectMapper = new ObjectMapper();String s = objectMapper.writeValueAsString(user);return s;}

(4)通过springmvc帮助去我们对对象或集合进行json字符串的转换并回写,为处理器配置消息转换参数,指定使用jackson进行对象或集合的转换,在spring-mvc中进行如下配置:

<!--配置处理器映射器--><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"><property name="messageConverters"><list><bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean></list></property></bean>
 @ResponseBody()//告知Springmvc框架该方法不进行页面视图跳转直接进行页面数据响应(以Http响应体)@RequestMapping(value = "/quick10")//期望springmvc自动将User转换成json格式public User save10(HttpServletResponse response) throws IOException {User user=new User();user.setAge(13);user.setUsername("fhds");return user;}

在方法上添加@ResponseBody就可返回json格式的字符串,但比较繁琐

可以用mvc的注解驱动代替

 <!--mvc的注解驱动 可以将对象转换为json格式--><mvc:annotation-driven conversion-service="conversionService"/>

在SpringMvc的各个组件中,处理器映射器、处理器适配器、试图解析器称为SpringMvc的三大组件 使用<mvc:annotation-driven>自动加载 RequestMappingHandlerMapping(处理映射器)和 RequestMappingHandlerAdapter( 处 理 适 配 器 ),可用在Spring-xml.xml配置文件中使用 <mvc:annotation-driven>替代注解处理器和适配器的配置。 同时使用<mvc:annotation-driven>默认底层就会集成jackson进行对象或集合的json格式字符串的转换。

springmvc请求数据

1.获得请求参数

服务器端获得请求参数,有时还需要进行数据的封装,springmvc可以接收如下类型的参数:

基本类型

pojo类型参数

数组类型参数

集合类型参数

2.获得基本类型参数

Controller中的业务方法的参数名称要与请求参数的name一致,参数值会自动映射匹配

@ResponseBody()@RequestMapping(value = "/quick11")public void save11(String username,int age) throws IOException {System.out.println(username);System.out.println(age);}

 

 

 3.获得POJO类型参数

controller中的业务方法的POJO参数的属性名与请求参数的name一致参数值会自动映射匹配

@ResponseBody()@RequestMapping(value = "/quick12")public void save12(User user) throws IOException {System.out.println(user);}

 

 4.获得数组类型的参数

@ResponseBody()@RequestMapping(value = "/quick13")public void save13(String []strs) throws IOException {//将数组转为集合System.out.println(Arrays.asList(strs));}

 

 5.获得集合类型的参数

获得集合类型的参数,要将集合参数封装到POJO中才可以

<%--Created by IntelliJ IDEA.User: dellDate: 2023/2/10Time: 13:17To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page isELIgnored="false"%>
<html>
<head><title>Title</title>
</head>
<body><form action="${pageContext.request.contextPath}/userController/quick14" method="post"><%--表明是第几个user对象的usernamr age--%><input type="text" placeholder="姓名" name="userList[0].username"><br/><input type="text" placeholder="年龄" name="userList[0].age"><br/><input type="submit" title="提交"/></form>
</body>
</html>
package com.lin.domain;import java.util.List;public class Vo {private List<User>userList;public List<User> getUserList() {return userList;}public void setUserList(List<User> userList) {this.userList = userList;}@Overridepublic String toString() {return "vo{" +"userList=" + userList +'}';}
}
 @ResponseBody()@RequestMapping(value = "/quick14")public void save14(Vo vo) throws IOException {System.out.println(vo);}

当使用ajax提交时,可以指定contextType为json形式,那么在方法参数位置使用

@ResponseBody可以直接接收集合数据而无需使用POJO进行包装

<%--Created by IntelliJ IDEA.User: dellDate: 2023/2/11Time: 12:19To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page isELIgnored="false"%>
<html>
<head><title>Title</title><%--导入jquery--%><script src="${pageContext.request.contextPath}/js/jquery-3.3.1.js"></script><script>var userList=new Array();userList.push({username:"张三",age:15});userList.push({username:"lisi",age:15});$.ajax({type:"POST",url:"${pageContext.request.contextPath}/userController/quick15",data:JSON.stringify(userList),contentType:"application/json;charset=utf-8"});</script>
</head>
<body></body>
</html>

注意:如果浏览器抓包工具发现,没有加载jquery文件,原因时springmvc的前端控制器DispatcherServlet的url-pattern配置的时/,代表所有的资源都进行过滤操作我们可以通过以下两种方式放行静态资源

        1.在spring-mvc.xml配置问件中指定的放行资源

        <!--开放资源的访问权限--><!--mapping 映射地址--><!--location 那个目录下的资源对外开放--><!--<mvc:resources mapping="/js/**" location="/js/"/>-->

        2.使用标签

        <!--springmvc如果帮你找不到资源就交给原始的的容器Tomcat--><mvc:default-servlet-handler/>

6.当post请求时,数据会出现乱码,我们可以设置一个过滤器来进行编码过滤

<!--配置全局过滤的filter 解决乱码--><filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

7.参数绑定注解@requestParam

当请求的参数名称与Controller的业务方法参数名称不一致时,就需要通过@RequestParam注解显示绑定

 @ResponseBody()@RequestMapping(value = "/quick16")/** @RequestParam参数* value:与请求参数名称* required:在此指定的请求参数是否必须包括,默认值是true,提交时如果没有此参数报错* defaultValue:当没有前指定请求参数时,则使用指定的默认参数值* */public void save16(@RequestParam("name") String username) throws IOException {System.out.println(username);}

8.

Restful是一种软件架构风格设计风格,而不是标准,只是提供了一组设计原则和约束条件。主要用于客户端和服务 器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存机制等。
Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下:
GET:用于获取资源
 POST:用于新建资源
 PUT:用于更新资源
 DELETE:用于删除资源
  @ResponseBody()@RequestMapping(value = "/quick17/{username}")public void save17(@PathVariable("username") String username) throws IOException {System.out.println(username);}

9.自定义类型转换器

自定义类型转换器的开发步骤:

        1.定义转换器实现Converter接口

package com.lin.converter;import org.springframework.core.convert.converter.Converter;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class DataConvert implements Converter<String,Date> {@Overridepublic Date convert(String dateStr) {//将日期的字符串转换成日期对象SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");Date date=null;try {date = format.parse(dateStr);} catch (ParseException e) {e.printStackTrace();}return date;}
}

        2.在配置文件中声明转换器

 <!--声明转换器--><bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"><property name="converters"><list><bean class="com.lin.converter.DataConvert"/></list></property></bean>

        3.在<annotation-driver>中引用转换器

        <mvc:annotation-driven conversion-service="conversionService"/>

10.文件上传

       (1)文件上传客户端的三要素

                表单项type="file"

                表单的提交方式post

                表单的enctype属性是多部分表单形式,及enctype=“multipart/form-data”

        (2)单文件上传的步骤

                导入fileupload和io坐标

                

 <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency></dependencies>

        配置文件上传解析器

 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="defaultEncoding" value="utf-8"></property><property name="maxUploadSize" value="6000000"></property></bean>

        编写文件上传代码

@ResponseBody()@RequestMapping(value = "/quick23")public void save23(String username, MultipartFile upload1,MultipartFile upload2) throws IOException {System.out.println(username);//获得上传文件名称String originalFilename1= upload1.getOriginalFilename();upload1.transferTo(new File("C:\\upload\\",originalFilename1));String originalFilename2= upload2.getOriginalFilename();upload1.transferTo(new File("C:\\upload\\",originalFilename2));}
多文件上传,只需要将页面修改为多个文件上传项,将方法参数MultipartFile类型修改为MultipartFile[]即可
<%--Created by IntelliJ IDEA.User: dellDate: 2023/2/12Time: 11:41To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page isELIgnored="false"%>
<html>
<head><title>Title</title>
</head>
<body><form action="${pageContext.request.contextPath}/userController/quick22" method="post" enctype="multipart/form-data">名称<input type="text" name="username"><br/>文件1<input type="file" name="upload"><br/>文件2<input type="file" name="upload"><br/><input type="submit" value="提交"></form><%--enctype:规定了form表单在发送到服务器时候编码方式,有如下的三个值。application/x-www-form-urlencoded:默认的编码方式。但在用文本的传输和MP3等大型文件的时候,使用这种编码就显得效率低下。multipart/form-data:指定传输数据为二进制类型,比如图片,mp3,文件text/plain:纯文本的传输。空格转换为"+"号,但不对特殊字符编码。--%><%--<form action="${pageContext.request.contextPath}/userController/quick22" method="post" enctype="multipart/form-data">名称<input type="text" name="username"><br/>文件1<input type="file" name="upload1"><br/>文件2<input type="file" name="upload2"><br/><input type="submit" value="提交"></form>--%>
</body>
</html>

多文件上传方式的实现

@ResponseBody()@RequestMapping(value = "/quick22")public void save22(String username, MultipartFile[] upload) throws IOException {System.out.println(username);//获得上传文件名称for (MultipartFile multipartFile:upload){String originalFilename = multipartFile.getOriginalFilename();multipartFile.transferTo(new File("C:\\upload\\",originalFilename));}}

相关文章:

SpringMvc的请求和响应

SpringMvc的数据响应 1.springmvc的数据相应方式 &#xff08;1&#xff09;页面跳转 直接返回字符串 通过ModelAndView对象返回 &#xff08;2&#xff09;回写数据 直接返回字符串 返回对象或集合 页面跳转 jsp页面 <% page contentType"text/html;charsetUTF-8&q…...

【Vue3】首页主体-面板组件封装

首页主体-面板组件封装 新鲜好物、人气推荐俩个模块的布局结构上非常类似&#xff0c;我们可以抽离出一个通用的面板组件来进行复用 目标&#xff1a;封装一个通用的面板组件 思路分析 图中标出的四个部分都是可能会发生变化的&#xff0c;需要我们定义为可配置主标题和副标题…...

部署 K8s 集群

1 .部署k8s的两种方式目前生产部署Kubernetes集群主要有两种方式&#xff1a;kubeadmKubeadm是一个K8s部署工具&#xff0c;提供kubeadm init和kubeadm join&#xff0c;用于快速部署Kubernetes集群。二进制包从github下载发行版的二进制包&#xff0c;手动部署每个组件&#x…...

关于北京君正:带ANC的2K网络摄像头用户案例

如果远程办公是您的未来&#xff0c;或者您经常通过视频通话与远方的朋友和亲戚交谈&#xff0c;那么您可以考虑购买网络摄像头以显著改善您的沟通。Anker PowerConf C200是个不错的选择。 Anker PowerConf C200专为个人工作空间而设计&#xff0c;能够以每秒30帧的速度拍摄2K…...

ccc-Backpropagation-李宏毅(7)

文章目录NotationBackpropagationForward passBackward passSummaryNotation 神经网络求解最优化Loss function时参数非常多&#xff0c;反向传播使用链式求导的方式提升计算梯度向量时的效率&#xff0c;链式法则如下&#xff1a; Backpropagation 损失函数计算为所有样本…...

找出字符串中第一个匹配项的下标-力扣28-java

一、题目描述给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。示例 1&#xff1a;输入&#xff1a;hayst…...

SpringBoot 监听Redis key过期回调

SpringBoot 监听Redis key过期回调 场景 Spring boot实现监听Redis key失效事件可应对某些场景例如&#xff1a;处理订单过期自动取消、用户会员到期… 开启Redis键过期回调通知 Redis默认是没有开启键过期监听功能的&#xff0c;需要手动在配置文件中修改。Linux操作系统 修…...

蓝桥杯C/C++VIP试题每日一练之回形取数

💛作者主页:静Yu 🧡简介:CSDN全栈优质创作者、华为云享专家、阿里云社区博客专家,前端知识交流社区创建者 💛社区地址:前端知识交流社区 🧡博主的个人博客:静Yu的个人博客 🧡博主的个人笔记本:前端面试题 个人笔记本只记录前端领域的面试题目,项目总结,面试技…...

四控、三管、一协调

四控指的是进度控制&#xff0c;质量控制&#xff0c;成本控制&#xff0c;变更控制。三管指的是合同管理&#xff0c;安全管理&#xff0c;资料管理。一协调指的是协调甲方&#xff0c;总包及设备材料供应方的关系。信息系统工程监理是指依法设立且具备相应资质的信息系统工程…...

jdk19下载与安装教程(win10)超详细

一、下载安装步骤 1、官网下载还需要注册&#xff0c;可以点【我的网盘】目录下载&#xff0c;目录也有其它低版本的&#xff0c;如果有需要大家根据需要自行选择。 2、下载后直接点击安装程序&#xff0c;点击【运行】。这里我使用的是64位的。 3、点击【下一步】。 4、默认安…...

来来来,手摸手写一个hook

hello&#xff0c;这里是潇晨&#xff0c;今天就带着大家一起来手写一个迷你版的hooks&#xff0c;方便大家理解hook在源码中的运行机制&#xff0c;配有图解&#xff0c;保姆级的教程&#xff0c;只求同学一个小小的&#x1f44d;&#xff0c;&#x1f436;。 第一步&#xf…...

【C++】AVL树

目录 1 简介 2 实现 2.1 框架构建 2.2 插入操作 2.2.1 平衡因子的更新 2.2.2 平衡因子异常时树的调整 3 检验 1 简介 AVL树基于二叉搜索树之上&#xff0c;又对其提出了平衡的要求&#xff0c;即&#xff1a;当向二叉搜索树插入新节点后&#xff0c;保证每个节点的左右…...

Mybatis源码(2) - SqlSessionTemplate的介绍及创建过程

0. 前言1. Spring对SqlSessionTemplate的管理1.1. SqlSessionTemplate的创建&#xff1a;1.2. MapperProxy中sqlSession的来源&#xff1a;2. SqlSessionInterceptor中的getSqlSession0. 前言 众所周知&#x1f60f;:MyBatis通过SqlSessionFactory 创建SqlSession去调用Executo…...

女生做大数据有发展前景吗?

当前大数据发展前景非常不错&#xff0c;且大数据领域对于人才类型的需求比较多元化&#xff0c;女生学习大数据也会有比较多的工作机会。大数据是一个交叉学科涉及到的知识量比较大学习有一定的难度&#xff0c;女生比较适合大数据采集和大数据分析方向的工作岗位。 大数据采…...

Git实用指令记录

config 用例&#xff1a;对git最先要做的一个操作就是配置用户名和邮箱&#xff0c;否则无法commit查看所有可以config的条目&#xff0c;非常之多$ git config --list core.symlinksfalse core.autocrlftrue core.fscachetrue color.interactivetrue color.uiauto help.forma…...

复杂美公链技术重要特色:平行公链架构

复杂美公链技术Chain33从11月开源至今&#xff0c;获得众多合作方的认可&#xff0c;其中首创的平行公链架构被百度、阿里、360等机构认可并跟进研究&#xff0c;这也说明了平行公链或许是区块链普及应用的重要解决方案之一。 平行公链&#xff08;以下简称平行链&#xff09;是…...

Java——进制转换的一些内容

Java——进制转换的一些内容1.16进制字符串String转字节数组byte[]2.16进制字符串String转10进制数字int3.字节数组byte[]转字符串String4.16进制字符串String-->byte[]-->String&#xff08;使用ByteBuffer转换&#xff09;5.字节数组byte[]转字符数组char[]6.字节byte转…...

使用 Nodejs、Express、Postgres、Docker 在 JavaScript 中构建 CRUD Rest API

让我们在 JavaScript 中创建一个 CRUD rest API&#xff0c;使用&#xff1a;节点.js表达续集Postgres码头工人码头工人组成介绍这是我们将要创建的应用程序架构的架构&#xff1a;我们将为基本的 CRUD 操作创建 5 个端点&#xff1a;创造阅读全部读一个更新删除我们将使用以下…...

电子招标采购系统源码之什么是电子招投标系统?

随着互联网时代的到来&#xff0c;各行业都受到不同的影响&#xff0c;其中招投标行业也不例外。为了顺应互联网潮流的发展&#xff0c;电子招投标逐渐取代传统的纸质的招投标方式&#xff0c;给招标方、投标方、招标代理等各方也带来了前所未有的机遇与挑战。那么什么是电子招…...

匹配文件名称模块glob和fnmatch

匹配文件名称模块glob 1.概述 glob模式规则与re模块的正则表达式规则不大相同&#xff0c;glob模块遵循标准的UNIX路径扩展规则。 fnmatch模块用于根据glob模式比较文件名 2.glob表达式匹配文件名 2.1.测试文件 介绍glob配置规则前&#xff0c;先使用下面的代码创建测试文…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...