springboot实现一个可以连续发送消息的窗口, html的页面和controller层的接口应该怎么写呢
时间: 2024-03-21 14:38:46 浏览: 111
首先,你可以在 HTML 页面中使用 WebSocket 技术来实现连续发送消息的窗口。以下是一个简单的 HTML 页面示例代码:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>WebSocket Chat</title>
</head>
<body>
<div>
<textarea id="content" rows="10" cols="50"></textarea>
<br>
<input type="text" id="message" /><button onclick="send()">Send</button>
</div>
<script>
var socket = new WebSocket("ws://localhost:8080/chat");
socket.onmessage = function(event) {
var content = document.getElementById("content");
content.value += event.data + "\n";
}
function send() {
var message = document.getElementById("message");
socket.send(message.value);
message.value = "";
}
</script>
</body>
</html>
```
在这个页面中,我们创建了一个 WebSocket 对象,然后定义了一个 onmessage 回调函数,该函数在接收到服务器发送的消息时会将其添加到页面上的文本区域中。我们还定义了一个 send 函数,用于向服务器发送消息。
接下来,你需要在后端编写一个 WebSocketController 类,用于处理 WebSocket 的连接和消息交换。以下是一个简单的 WebSocketController 示例代码:
```java
@RestController
public class WebSocketController {
private static final List<WebSocketSession> sessions = new CopyOnWriteArrayList<>();
@GetMapping("/chat")
public void handleWebSocketConnection(WebSocketSession session) {
sessions.add(session);
}
@MessageMapping("/chat")
public void handleWebSocketMessage(String message) {
for (WebSocketSession session : sessions) {
try {
session.sendMessage(new TextMessage(message));
} catch (IOException e) {
e.printStackTrace();
}
}
}
@GetMapping("/")
public String index() {
return "index";
}
}
```
在这个类中,我们定义了一个 sessions 列表,用于存储所有连接到服务器的 WebSocketSession 对象。在 handleWebSocketConnection 方法中,我们将新连接的 WebSocketSession 对象添加到 sessions 列表中。在 handleWebSocketMessage 方法中,我们遍历 sessions 列表,将接收到的消息发送给所有连接到服务器的客户端。最后,我们还定义了一个 index 方法,用于返回 HTML 页面。
需要注意的是,为了让 Spring Boot 支持 WebSocket 技术,你需要在项目中添加 spring-boot-starter-websocket 依赖,并在配置文件中添加以下配置:
```yaml
spring:
websocket:
servlet:
path: /websocket
```
这样,你就可以在 Spring Boot 中实现一个可以连续发送消息的窗口了。
阅读全文