下面我将详细讲解“spring boot集成WebSocket日志实时输出到web页面”的完整攻略。
1. 准备工作
在开始实现前,需要确保你已经具有以下技术栈的了解和掌握:
- Java
- Spring Boot
- WebSocket
- HTML、CSS、JavaScript
2. 添加依赖
我们首先需要在项目中添加WebSocket相关依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
3. 编写WebSocket配置
在配置类中添加WebSocket配置,代码如下:
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new LogWebSocketHandler(), "/log")
.setAllowedOrigins("*");
}
}
以上配置中,我们定义了WebSocket的处理类为LogWebSocketHandler
,并将其映射到/log
路径上。同时,我们也设置了AllowedOrigins
为*
,表示允许所有域名连接WebSocket。
接下来,我们需要编写实际的WebSocket处理类LogWebSocketHandler
,用于处理WebSocket连接、消息和关闭事件。
public class LogWebSocketHandler extends TextWebSocketHandler {
private static final Logger logger = LoggerFactory.getLogger(LogWebSocketHandler.class);
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
logger.info("WebSocket连接已建立,Session ID:" + session.getId());
Tailer tailer = new Tailer(new File("/path/to/log/file"), new LogFileListener(session), 1000, true);
new Thread(tailer).start();
}
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
logger.info(String.format("接收到消息:%s", message.getPayload()));
session.sendMessage(new TextMessage("已收到消息:" + message.getPayload()));
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
logger.info("WebSocket连接已关闭,Session ID:" + session.getId());
}
private static class LogFileListener extends TailerListenerAdapter {
private final WebSocketSession session;
public LogFileListener(WebSocketSession session) {
this.session = session;
}
@Override
public void handle(String line) {
try {
session.sendMessage(new TextMessage(line));
} catch (IOException e) {
logger.error("向WebSocket发送消息失败!", e);
}
}
}
}
以上代码中的Tailer
使用了Apache Commons IO的实现,用于监听日志文件的变化,并将最新的日志信息通过WebSocket发送到浏览器端。LogFileListener
则负责将日志信息写入WebSocket流中并发送到浏览器端。
4. 编写HTML、CSS、JavaScript代码
最后,我们需要编写前端页面的代码来实现WebSocket消息的接收和展示。
示例1:使用jQuery来实现
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>实时日志</title>
<style>
#log {
width: 100%;
height: 500px;
overflow-y: scroll;
}
</style>
</head>
<body>
<div id="log"></div>
<script src="http://code.jquery.com/jquery-3.2.1.min.js"></script>
<script>
$(document).ready(function() {
var socket = new WebSocket('ws://localhost:8080/log');
socket.onmessage = function(event) {
$('#log').append(event.data + '<br>');
$('#log').scrollTop($('#log').get(0).scrollHeight);
}
socket.onopen = function(event) {
console.log('已连接到WebSocket');
}
socket.onclose = function(event) {
console.log('WebSocket已关闭:' + event.reason);
}
});
</script>
</body>
</html>
以上代码中使用了jQuery的WebSocket
和append
方法来实现WebSocket消息在页面上的实时展示。
示例2:使用WebSocket API来实现
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>实时日志</title>
<style>
#log {
width: 100%;
height: 500px;
overflow-y: scroll;
}
</style>
</head>
<body>
<div id="log"></div>
<script>
var socket = new WebSocket('ws://localhost:8080/log');
socket.onmessage = function(event) {
var logDiv = document.getElementById('log');
logDiv.innerHTML += event.data + '<br>';
logDiv.scrollTop = logDiv.scrollHeight;
}
socket.onopen = function(event) {
console.log('已连接到WebSocket');
}
socket.onclose = function(event) {
console.log('WebSocket已关闭:' + event.reason);
}
</script>
</body>
</html>
以上代码中使用了WebScocket API的WebSocket
和innerHTML
方法来实现WebSocket消息在页面上的实时展示。
5. 运行和测试
将以上代码和配置文件添加到Spring Boot项目中,运行项目。如果一切正常,当浏览器访问示例1或示例2的HTML页面时,就能在页面上看到实时的日志信息了。
以上就是“Spring Boot集成WebSocket日志实时输出到Web页面”的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:spring boot集成WebSocket日志实时输出到web页面 - Python技术站