【发布时间】:2021-10-25 02:06:28
【问题描述】:
我正在尝试制作一个基本上有一个聊天系统的网站,任何人都可以在其中连接并互相聊天,我已经实现了一个注册过程和登录过程,连接到一个数据库,现在是最大的和最令人困惑的部分是实现聊天功能。
我将 JSP 用于视图和 vanilla javascript
我已经尝试过教程,但我似乎无法弄清楚很多事情
- 一旦用户登录网站,他们应该可以立即使用聊天功能(会显示他们的姓名等),如果其他用户登录,他们应该能够通过聊天相互交流
(老实说,我不知道实现它是简单还是复杂)
目前,来自在线教程。我有这些设置 WebSocket 的类。
WebSocketConfig.java
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer{
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/safespot").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic");
registry.setApplicationDestinationPrefixes("/app");
}
}
ChatController.java
@Controller
public class ChatController {
@MessageMapping("/chat.register")
@SendTo("/topic/public")
public MessageModel register(@Payload MessageModel message, SimpMessageHeaderAccessor headerAccessor) {
headerAccessor.getSessionAttributes().put("username", message.getSender());
return message;
}
@MessageMapping("/chat.send")
@SendTo("/topic/public")
public MessageModel sendMessage(@Payload MessageModel message) {
return message;
}
}
MessageModel.java
public class MessageModel {
private String content;
private String sender;
private MessageType type;
public enum MessageType {
CHAT,LEAVE,JOIN
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getSender() {
return sender;
}
public void setSender(String sender) {
this.sender = sender;
}
public MessageType getType() {
return type;
}
public void setType(MessageType type) {
this.type = type;
}
}
聊天框本身的jsp
<div id="chat-page">
<div class="chat-container">
<!-- Header of the chat Box -->
<div class="chat-header">
<h1 class="chat-heading mb-1">Welcome</h1>
<p class="chat-para mb-1">Please be respectful in the chat</p>
</div>
<div class="connecting">Connecting...</div>
<!-- This is where the chat output will appear -->
<ul id="messageArea">
</ul>
<!-- Input box -->
<form id="messageForm" name="messageForm" nameForm="messageForm">
<div class="form-group">
<div class="input-group clearfix">
<input type="text" id="message" placeholder="Type a message..." autocomplete="off" class="form-control"
style="border-radius: 0; color: #fff" />
<button type="button" class="chat-send-btn">Send</button>
</div>
</div>
</form>
</div>
</div>
UI 外观的一些图片
----我知道这很模糊,但如果有人可以指导我如何接近这样做,我将非常感激。
【问题讨论】:
标签: javascript java spring spring-boot websocket