Adding code for the tutorial tracked under BAEL-2488 (#6598)
This commit is contained in:
parent
df87de7d8f
commit
33e7f0d8e3
|
@ -0,0 +1,67 @@
|
||||||
|
package com.baeldung.springsockets.config;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.messaging.converter.MessageConverter;
|
||||||
|
import org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolver;
|
||||||
|
import org.springframework.messaging.handler.invocation.HandlerMethodReturnValueHandler;
|
||||||
|
import org.springframework.messaging.simp.config.ChannelRegistration;
|
||||||
|
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
|
||||||
|
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
|
||||||
|
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
|
||||||
|
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
|
||||||
|
import org.springframework.web.socket.config.annotation.WebSocketTransportRegistration;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableWebSocketMessageBroker
|
||||||
|
public class WebSocketMessageBrokerConfig implements WebSocketMessageBrokerConfigurer {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerStompEndpoints(StompEndpointRegistry registry) {
|
||||||
|
registry.addEndpoint("/ws");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void configureMessageBroker(MessageBrokerRegistry config) {
|
||||||
|
config.setApplicationDestinationPrefixes("/app");
|
||||||
|
config.enableSimpleBroker("/topic");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void configureWebSocketTransport(WebSocketTransportRegistration registry) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void configureClientInboundChannel(ChannelRegistration registration) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void configureClientOutboundChannel(ChannelRegistration registration) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean configureMessageConverters(List<MessageConverter> messageConverters) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
package com.baeldung.springsockets.controllers;
|
||||||
|
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping(path = "/rest")
|
||||||
|
public class RestAPIController {
|
||||||
|
|
||||||
|
@GetMapping(path = "/{name}", produces = "application/json")
|
||||||
|
public String getGreeting(@PathVariable("name") String name) {
|
||||||
|
return "{\"greeting\" : \"Hello, " + name + "!\"}";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
package com.baeldung.springsockets.controllers;
|
||||||
|
|
||||||
|
import org.springframework.messaging.handler.annotation.MessageMapping;
|
||||||
|
import org.springframework.messaging.handler.annotation.SendTo;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.util.HtmlUtils;
|
||||||
|
|
||||||
|
import com.baeldung.springsockets.models.Greeting;
|
||||||
|
import com.baeldung.springsockets.models.Message;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
public class WebSocketController {
|
||||||
|
|
||||||
|
@MessageMapping("/hello")
|
||||||
|
@SendTo("/topic/greetings")
|
||||||
|
public Greeting greeting(Message message) throws Exception {
|
||||||
|
return new Greeting("Hello, " + HtmlUtils.htmlEscape(message.getName()) + "!");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package com.baeldung.springsockets.models;
|
||||||
|
|
||||||
|
public class Greeting {
|
||||||
|
|
||||||
|
private String content;
|
||||||
|
|
||||||
|
public Greeting() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Greeting(String content) {
|
||||||
|
this.content = content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContent() {
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
package com.baeldung.springsockets.models;
|
||||||
|
|
||||||
|
public class Message {
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public Message() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Message(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Demo for RESTful Service for Comparison to WebSocket</title>
|
||||||
|
<link href="/webjars/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
<script src="/webjars/jquery/jquery.min.js"></script>
|
||||||
|
<script src="/webjars/sockjs-client/sockjs.min.js"></script>
|
||||||
|
<script src="/webjars/stomp-websocket/stomp.min.js"></script>
|
||||||
|
<script src="/rest.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="main-content" class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<form class="form-inline">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="name">Name: </label>
|
||||||
|
<input type="text" id="name" class="form-control" placeholder="Please enter yout name">
|
||||||
|
</div>
|
||||||
|
<button id="send" class="btn btn-default" type="submit">Send</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<table id="conversation" class="table table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Greetings</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody id="greetings">
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,21 @@
|
||||||
|
var request = new XMLHttpRequest()
|
||||||
|
|
||||||
|
function sendName() {
|
||||||
|
request.open('GET', 'http://localhost:8080/rest/'+$("#name").val(), true)
|
||||||
|
request.onload = function () {
|
||||||
|
var data = JSON.parse(this.response)
|
||||||
|
showGreeting(data.greeting)
|
||||||
|
}
|
||||||
|
request.send()
|
||||||
|
}
|
||||||
|
|
||||||
|
function showGreeting(message) {
|
||||||
|
$("#greetings").append("<tr><td>" + message + "</td></tr>");
|
||||||
|
}
|
||||||
|
|
||||||
|
$(function () {
|
||||||
|
$("form").on('submit', function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
});
|
||||||
|
$( "#send" ).click(function() { sendName(); });
|
||||||
|
});
|
|
@ -0,0 +1,39 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Demo for WebSocket for Comparison to RESTful Service</title>
|
||||||
|
<link href="/webjars/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
<script src="/webjars/jquery/jquery.min.js"></script>
|
||||||
|
<script src="/webjars/sockjs-client/sockjs.min.js"></script>
|
||||||
|
<script src="/webjars/stomp-websocket/stomp.min.js"></script>
|
||||||
|
<script src="/ws.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="main-content" class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<form class="form-inline">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="name">Name: </label>
|
||||||
|
<input type="text" id="name" class="form-control" placeholder="Please enter yout name">
|
||||||
|
</div>
|
||||||
|
<button id="send" class="btn btn-default" type="submit">Send</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<table id="conversation" class="table table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Greetings</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody id="greetings">
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,26 @@
|
||||||
|
var stompClient = null;
|
||||||
|
|
||||||
|
function connect() {
|
||||||
|
stompClient = Stomp.client('ws://localhost:8080/ws');
|
||||||
|
stompClient.connect({}, function (frame) {
|
||||||
|
stompClient.subscribe('/topic/greetings', function (response) {
|
||||||
|
showGreeting(JSON.parse(response.body).content);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function sendName() {
|
||||||
|
stompClient.send("/app/hello", {}, JSON.stringify({'name': $("#name").val()}));
|
||||||
|
}
|
||||||
|
|
||||||
|
function showGreeting(message) {
|
||||||
|
$("#greetings").append("<tr><td>" + message + "</td></tr>");
|
||||||
|
}
|
||||||
|
|
||||||
|
$(function () {
|
||||||
|
connect();
|
||||||
|
$("form").on('submit', function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
});
|
||||||
|
$( "#send" ).click(function() { sendName(); });
|
||||||
|
});
|
Loading…
Reference in New Issue