当前位置: 首页 > 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;先使用下面的代码创建测试文…...

4步突破AI算法学习瓶颈:用Excel可视化打开深度学习黑箱

4步突破AI算法学习瓶颈&#xff1a;用Excel可视化打开深度学习黑箱 【免费下载链接】ai-by-hand-excel 项目地址: https://gitcode.com/gh_mirrors/ai/ai-by-hand-excel 传统AI算法学习常陷入"公式理解难、数据流向抽象、参数调整盲目"的三重困境&#xff0c…...

别再乱用.pem和.key了!用ASN.1 Editor手把手拆解RSA私钥的PKCS#8格式(附OpenSSL 3.1验证)

从文件后缀到密钥本质&#xff1a;用ASN.1 Editor透视RSA私钥的PKCS#8结构 当你在终端输入openssl genpkey -algorithm RSA生成密钥对时&#xff0c;是否曾好奇过.pem文件里那些看似随机的字符究竟隐藏着什么秘密&#xff1f;面对invalid key format的错误提示&#xff0c;又是…...

三层交换机vlan间互通配置

SW1&#xff08;三层交换机&#xff09;配置# 1. 创建VLAN sysname LSW1 vlan batch 100 200 300# 2. 配置接口并加入VLAN interface GigabitEthernet 0/0/4port link-type accessport default vlan 100stp disable # 关闭生成树 interface GigabitEthernet 0/0/5port link-ty…...

3步掌握文字转手写工具:免费高效实用指南

3步掌握文字转手写工具&#xff1a;免费高效实用指南 【免费下载链接】text-to-handwriting So your teacher asked you to upload written assignments? Hate writing assigments? This tool will help you convert your text to handwriting xD 项目地址: https://gitcod…...

so-vits-svc声压级标准化终极指南:避免音质损伤的10个关键步骤

so-vits-svc声压级标准化终极指南&#xff1a;避免音质损伤的10个关键步骤 【免费下载链接】so-vits-svc SoftVC VITS Singing Voice Conversion 项目地址: https://gitcode.com/gh_mirrors/so/so-vits-svc 你是否在使用so-vits-svc进行语音转换时&#xff0c;遇到过输出…...

告别臃肿OS!手把手教你将Zephyr蓝牙协议栈移植到资源受限MCU(基于Polling轮询架构)

从零构建极简蓝牙协议栈&#xff1a;Zephyr Polling架构在资源受限MCU的实战指南 当智能手环的PCB面积被压缩到硬币大小&#xff0c;当电子价签需要依靠纽扣电池运行三年&#xff0c;传统蓝牙协议栈的"豪华配置"突然成了奢侈品。在深圳华强北的某个研发实验室里&…...

LyricsX:重构Mac音乐体验的智能歌词助手

LyricsX&#xff1a;重构Mac音乐体验的智能歌词助手 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics 当你在Mac上沉浸于音乐世界时&#xff0c;是否曾因无法同步显示歌词而…...

async-http-client原生镜像大小优化:GraalVM裁剪终极指南 [特殊字符]

async-http-client原生镜像大小优化&#xff1a;GraalVM裁剪终极指南 &#x1f680; 【免费下载链接】async-http-client Asynchronous Http and WebSocket Client library for Java 项目地址: https://gitcode.com/gh_mirrors/as/async-http-client 在当今云原生和微服…...

终极指南:如何解决Cobalt Instagram下载失败问题 - 完整排查方案

终极指南&#xff1a;如何解决Cobalt Instagram下载失败问题 - 完整排查方案 Cobalt是一款强大的开源媒体下载工具&#xff0c;专为保存Instagram、YouTube、Twitter等平台的视频和图片而设计。然而&#xff0c;许多用户在使用Cobalt下载Instagram内容时经常遇到各种失败问题&…...

阿里云轻量应用服务器上5分钟搞定EMQ X MQTT集群搭建(附性能调优技巧)

阿里云轻量应用服务器上5分钟构建高可用EMQ X MQTT集群 物联网应用的爆发式增长让MQTT协议成为设备连接的首选方案。对于需要处理海量设备连接的企业开发者而言&#xff0c;单节点MQTT服务器早已无法满足高并发和容灾需求。本文将带你在阿里云轻量应用服务器上快速部署EMQ X集群…...