Na jednym ze swoich LiveStreamów stworzyłem aplikacje chatu, która pozwala na dynamiczna wymianę wiadomości tekstowych wraz z automatycznym wyświetleniem treści na interfejsie użytkownika.
Aplikacja została zbudowana z wykorzystaniem technologii:
- Spring Boot/JMS – część backendowa projektu.
- JavaScript – umożliwiający dynamiczne wyświetlanie wiadomości na GUI.
- STOMP – prosty protokół wymiany danych tekstowych.
Backend
Zadaniem backendu jest zarządzanie wiadomości za pomocą kolejki. Dlatego w pierwszej kolejności należy utworzyć model dla komunikatu, który będzie wymieniany:
public class ChatMessage {
private String value;
private String user;
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public ChatMessage(String value) {
this.value = value;
}
public ChatMessage() {
}
}
W następnej kolejności zostanie utworzona kolejna i protokół STOMP:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/chat");
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic");
registry.setApplicationDestinationPrefixes("/app");
}
}
Zadaniem tych metod jest:
- registerStompEndpoints – utworzenie punktu końcowego dla protokołu STOMP na podstawie dostarczonego URL.
- configureMessageBroker – skonfigurowanie brokera wiadomości
Należy też do naszej kolejki dodać punkt końcowy z poziomu, którego możliwe będzie przesyłanie wiadomości. Metoda ta posiada dwie adnotacje. Pierwsza z nich wskazuje pod jakim endpointem jest przyjmowana wiadomość, natomiast druga adnotacja pozwala na umieszczanie wiadomości w kolejce.
@Controller
public class ChatMessageController {
@MessageMapping("/chat")
@SendTo("/topic/messages")
public ChatMessage get(ChatMessage chatMessage) {
return chatMessage;
}
}
Cześć backendowa za nami!
Frontend
W HTML tworzymy formatkę umożlwiająca wymianę danych. Ma ona pole do wprowadzania nicku, tekstu oraz umożliwia w momencie załadowania się strony połączyć się z kolejką za pośrednictwem JS.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello chat!!!</title>
</head>
<body onload="connect()">
<div>
<label>User:</label>
<input id="user" type="text"/><br>
<label>You message:</label>
<input id="messageToSend" type="text"/><br>
<button onclick="sendMessage()">Send</button>
<p id="reponse"></p>
</div>
<script src="js.js"></script>
<script src="stomp.js"></script>
</body>
</html>
W JS tworzone są 3 metody:
- showMessage – umożliwia wyświetlanie wiadomości na GUI.
- connect – umożliwia na połączenie się z kolejką. Implementacja bazuje na bibliotece stomp.js.
- sendMessage – do wysyłania wiadomości z formularza HTML, wiadomości z tego formularza trafiają do kolejki, stąd odniesienie do app/chat, gdzie /app jest prefiksem zdefiniowanym w pliku WebSocketConfig, natomiast punktem końcowym jest /chat określony w klasie ChatMessageController.
Aplikacja w praktyce

Źródła
Prezentacje jak tworze aplikacje na żywo znajdziesz na moim kanale:
Oczywiście pozostawiam też kod źródłowy do Twojej dyspozycji:
https://github.com/bykowski/chat-springboot-js-jms-stomp
Miłego chatowania 🙂
Zobacz listę szkoleń


