怎么引入jakarta.websocket
时间: 2025-05-27 07:31:35 浏览: 29
### 引入和配置 Jakarta WebSocket 依赖
要在 Java 项目中引入和配置 Jakarta WebSocket 依赖,可以按照以下方法操作:
#### Maven 依赖
首先,在项目的 `pom.xml` 文件中添加 Jakarta WebSocket 的相关依赖。如果使用的是 Spring Boot,则还需要引入 `spring-boot-starter-websocket`。
```xml
<dependency>
<groupId>jakarta.websocket</groupId>
<artifactId>jakarta.websocket-api</artifactId>
<version>2.0.0</version> <!-- 版本号可以根据实际需求调整 -->
</dependency>
<!-- 如果是 Spring Boot 项目,还需加入以下依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
```
完成上述依赖的添加后,重新构建项目以使更改生效[^3]。
#### 创建 WebSocket 配置类
为了启用 WebSocket 功能,需要创建一个配置类并注册 `ServerEndpointExporter` Bean。以下是基于 Spring 的典型实现方式:
```java
package com.example.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
```
需要注意的是,某些情况下可能会遇到 `javax.websocket.server.ServerContainer not available` 错误。这通常是因为运行环境未正确加载 WebSocket 容器。可以通过为 `ServerEndpointExporter` 添加环境激活条件来解决此问题,例如仅在开发 (`dev`) 或测试 (`test`) 环境下启动 WebSocket 支持[^5]。
修改后的代码如下所示:
```java
package com.example.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@Configuration
public class WebSocketConfig {
@Bean
@Profile({"dev", "test"})
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
```
#### 创建 WebSocket 端点
通过使用 `@ServerEndpoint` 注解定义 WebSocket 服务器端点,并处理连接、关闭、消息接收等事件。下面是一个简单的示例:
```java
package com.example.endpoint;
import jakarta.websocket.OnClose;
import jakarta.websocket.OnMessage;
import jakarta.websocket.OnOpen;
import jakarta.websocket.Session;
import jakarta.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;
@ServerEndpoint("/websocket")
public class MyWebSocket {
private static final CopyOnWriteArraySet<MyWebSocket> webSockets = new CopyOnWriteArraySet<>();
private Session session;
@OnOpen
public void onOpen(Session session) {
this.session = session;
webSockets.add(this);
System.out.println("New connection: " + session.getId());
}
@OnMessage
public void onMessage(String message, Session session) throws IOException {
System.out.println("Received message from client: " + message);
broadcast(message); // 广播给所有客户端
}
@OnClose
public void onClose(Session session) {
webSockets.remove(this);
System.out.println("Connection closed: " + session.getId());
}
private void broadcast(String message) throws IOException {
for (MyWebSocket socket : webSockets) {
try {
socket.session.getBasicRemote().sendText(message);
} catch (IOException e) {
webSockets.remove(socket);
continue;
}
}
}
}
```
以上代码展示了如何创建一个基本的 WebSocket 端点 `/websocket`,并通过广播机制向所有已连接的客户端发送消息[^1]。
---
### 相关问题
阅读全文
相关推荐

















