编辑
2024-07-22
实用工具
00

介绍

WebSocketServer的目的是为了实时推送数据到客户端,才使用webSocket的双全工的方式

spring简单实现有两种方式

  1. WebSocketConfigurer接口
  2. 通过@ServerEndpoint注解配合ServerEndpointExporter bean来配置WebSocket端点

优缺点

在Spring框架中配置WebSocket服务器时,您可以选择使用WebSocketConfigurer接口或者通过@ServerEndpoint注解配合ServerEndpointExporter bean来配置WebSocket端点。这两种方式各有优缺点,适用于不同的场景。

使用WebSocketConfigurer接口

优点:

  • 集成度更高: 与Spring框架的集成更加紧密,可以充分利用Spring的依赖注入、AOP等特性。
  • 配置灵活: 可以通过WebSocketHandlerRegistry注册多个处理器,并且可以配置拦截器、异常处理器等。
  • 支持Spring Security: 可以更容易地与Spring Security集成,实现WebSocket层的安全控制。

缺点:

学习曲线: 需要熟悉Spring WebSocket的配置和使用方式。

使用@ServerEndpoint注解和ServerEndpointExporter

优点:

  • 简单直接: 配置相对简单,适合快速开发和小型项目。
  • 标准支持: @ServerEndpoint是Java EE WebSocket API的一部分,因此具有更好的跨平台兼容性(尽管在Spring环境中使用时,通常还是会依赖Spring的一些特性)。

缺点:

  • 集成度较低: 与Spring框架的集成不如WebSocketConfigurer紧密,依赖注入等特性需要额外配置或使用其他手段实现。
  • 配置不够灵活: 相比WebSocketConfigurer,配置选项较少,例如不能方便地添加拦截器或异常处理器。
  • 安全性: 需要手动配置WebSocket层的安全控制,与Spring Security的集成不如WebSocketConfigurer方便。
  • 结论
  • 对于大多数Spring项目来说,使用WebSocketConfigurer接口是更好的选择。它提供了更高的集成度和更灵活的配置选项,可以充分利用Spring框架的优势。同时,随着Spring框架的不断发展和完善,WebSocketConfigurer接口也可能会得到更多的功能和优化。

然而,如果您的项目比较简单,或者您更熟悉Java EE WebSocket API的标准实现方式,并且不需要与Spring框架进行深度集成,那么使用@ServerEndpoint注解和ServerEndpointExporter也是一种可行的选择。

实现

引入spring-websocket依赖

springBoot项目需要引入spring的webSocket依赖

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency>

1.ServerEndpoint注解和ServerEndpointExporter

配置类

java
@Configuration public class WebSocketConfig { @Bean public ServerEndpointExporter serverEndpointExporter(){ return new ServerEndpointExporter(); } }
编辑
2024-07-09
遇到的问题
00

问题

前端获取不到header里面的文件名 后端代码

java
try (OutputStream outputStream = res.getOutputStream()) { res.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode((String) fileList.get(0).get("fileName"), "utf-8")); res.setHeader("Content-Type", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"); // 将字节数组写入输出流 outputStream.write((byte[]) fileList.get(0).get("bytes")); // 刷新输出流,确保所有数据都被发送出去 outputStream.flush(); } catch (IOException e) { // 异常处理 throw new SystemException(500, "导出word文件失败!"); }

解决

加上

java
res.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
编辑
2024-07-09
遇到的问题
00

告警

当我们给一个继承了父类的子类上使用@Data、@ToString、@EqualsAndHashCode 注解时,IDEA 会发出警告,大概内容如下:

Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object. If this is intentional, add ‘(callSuper=false)’ to your type.

解决

在项目根目录下创建lombok.config文件

config
config.stopBubbling = true lombok.tostring.callsuper=CALL lombok.equalsandhashcode.callsuper=CALL lombok.accessors.chain=true
编辑
2024-07-09
前端
00

介绍

nvm是管理node的工具,支持多版本的切换使用,github官网

使用

卸载node.js

在系统设置中卸载原来node.js

下载nvm-windows

下载地址,选择nvm-setup.exe 一键安装

淘宝源设置

进入nvm安装目录找到settings文件,打开文件另起一行,粘贴内容

node_mirror: https://npmmirror.com/mirrors/node/ npm_mirror: https://npmmirror.com/mirrors/npm/

使用nvm安装node

在终端输入 nvm list available, 查看网络可以安装的版本

找到合适的版本之后输入

nvm install 20.12.2

等待下载完成后输入

nvm use 20.12.2

查看node版本和npm版本

输入node -v 和 npm -v

查看安装的node列表

nvm list
编辑
2024-07-08
实用工具
00

openjdk介绍

openjdk是开源的java开发工具,每个人都可以免费使用在任何地方

openJDK

下载地址 官方版本

zuluJDK

下载地址 Azul是全球最大的OpenJDK商业版提供商,其发行版100%基于Java的OpenJDK,并且提供了广泛的平台支持。

毕昇JDK

下载地址

BellSoft JDK

下载地址 由BellSoft生产的免费开源Java开发工具包,已经过TCK的Java SE规范验证,支持大多数操作系统,提供了比Oracle JDK更长久的技术支持和维护。

微软JDK

下载地址

阿里JDK

下载地址

eclipseJDK

下载地址 这个发行版是AdoptOpenJDK的继承者,由Eclipse基金会维护,得到了社区的广泛推荐,并且被许多大厂支持。它以稳定性和性能著称。

亚马逊JDK

下载地址 亚马逊提供的OpenJDK发行版,它提供长期支持,包括性能增强和安全修复。亚马逊在内部的数千种生产服务上运行Corretto,并且Corretto已被证明能够兼容Java SE标准。

腾讯JDK

下载地址