websocket前端写法ftl
时间: 2025-11-03 13:52:09 AIGC 浏览: 234
### WebSocket 前端实现 FreeMarker 模板语法 ftl 示例
在构建基于 WebSocket 的前端应用时,通常会涉及到 JavaScript 和 HTML 结合的方式来进行实时通信。当使用 FreeMarker 作为模板引擎时,可以通过定义特定的 FTL 文件来集成 WebSocket 功能。
#### 定义 WebSocket 连接脚本
在一个典型的 FreeMarker 模板文件 `layout.ftl` 中,可以在页面底部引入必要的 WebSocket 脚本来初始化连接并处理消息收发:
```html
<script>
$(function() {
var socket = new WebSocket("ws://${serverHost}:${serverPort}/websocket");
socket.onopen = function(e) {
console.log("[WebSocket] Connection established");
};
socket.onmessage = function(event) {
var data = JSON.parse(event.data);
$('#messages').append("<li>" + data.message + "</li>");
};
socket.onclose = function(event) {
console.log("[WebSocket] Connection closed", event.code, event.reason);
};
});
</script>
```
此段代码创建了一个新的 WebSocket 实例,并监听其状态变化事件[^4]。
#### 将 WebSocket 集成到全局布局中
为了让所有继承自该布局的子页面都能够访问 WebSocket 功能,在 FreeMarker 模板中的公共部分加入上述 JavaScript 逻辑是一个不错的选择。这确保了无论用户导航至哪个页面,都可以保持 WebSocket 连接活跃。
#### 使用 FreeMarker 变量传递服务器地址
为了避免硬编码 WebSocket URL 地址,可以从后台传入相应的变量给前端模板,从而使得配置更加灵活:
```html
<#-- 获取来自控制器设置好的 serverHost 和 serverPort -->
<@spring.url value="/websocket" var="webSocketUrl"/>
...
var socket = new WebSocket("${webSocketUrl}?token=${sessionToken}");
```
这里利用 `${}` 表达式注入由后端提供的动态参数,增强了系统的可维护性和安全性[^1]。
#### 处理发送的消息
除了接收服务端推送的信息外,还可以通过表单或其他交互方式让用户主动向服务端发送数据:
```html
<form id="sendForm">
<input type="text" name="msgText" placeholder="Type a message..." />
<button onclick="sendMessage()">Send</button>
</form>
<script>
function sendMessage(){
const formElement = document.getElementById('sendForm');
let formData = new FormData(formElement);
if (socket.readyState === WebSocket.OPEN){
socket.send(JSON.stringify({
action: "SEND",
content: Object.fromEntries(formData.entries())
}));
formElement.reset();
}else{
alleet("Connection is not open.");
}
}
</script>
```
这段代码实现了简单的消息提交功能,允许客户端向 WebSocket 服务器发送信息。
阅读全文
