在本章中,让我们了解如何使用带有Web套接字的Spring Boot构建交互式Web应用程序.
要使用Web套接字在Spring Boot中构建交互式Web应用程序,需要添加以下依赖项.
Maven用户应在pom.xml文件中添加以下依赖项.
org.springframework.boot spring-boot-starter-websocket org.webjars webjars-locator org.webjars sockjs-client 1.0.2 org.webjars stomp-websocket 2.3.3 org.webjars bootstrap 3.3.7 org.webjars jquery 3.1.0
Gradle用户可以在build.gradle文件中添加以下依赖项 :
compile("org.springframework.boot:spring-boot-starter-websocket") compile("org.webjars:webjars-locator") compile("org.webjars:sockjs" -client:1.0.2") compile("org.webjars:stomp-websocket:2.3.3") compile("org.webjars:bootstrap:3.3.7") compile("org.webjars:jquery:3.1.0")
让我们创建一个消息处理控制器来处理STOMP消息传递. STOMP消息可以路由到@Controller类文件.例如,GreetingController被映射为处理到目的地"/hello"的消息.
package com.it1352.websocketapp; import org.springframework.messaging.handler.annotation.MessageMapping;import org.springframework.messaging.handler.annotation.SendTo;import org.springframework.stereotype.Controller;@Controllerpublic class GreetingController { @MessageMapping("/hello") @SendTo("/topic/greetings") public Greeting greeting(HelloMessage message) throws Exception { Thread.sleep(1000); // simulated delay return new Greeting("Hello, " + message.getName() + "!"); }}
现在,为Spring配置STOMP消息传递.编写一个扩展AbstractWebSocketMessageBrokerConfigurer类的WebSocketConfig类文件,如下所示.
package com.it1352.websocketapp; import org.springframework.context.annotation.Configuration;import org.springframework.messaging.simp.config.MessageBrokerRegistry;import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;import org.springframework.web.socket.config.annotation.StompEndpointRegistry;@Configuration@EnableWebSocketMessageBrokerpublic class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry config) { config.enableSimpleBroker("/topic"); config.setApplicationDestinationPrefixes("/app"); } @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/IT屋-websocket").withSockJS(); }}
@EnableWebSocketMessageBroker注释用于配置Web套接字消息代理以创建STOMP端点.
您可以在src/main/resources/static/index.html下创建一个浏览器客户端文件,如下所示 :
Hello WebSocket
Greetings
让我们创建一个app.js文件,使用STOMP来消费和生成消息.
var stompClient = null; function setConnected(connected) { $("#connect").prop("disabled", connected); $("#disconnect").prop("disabled", !connected); if (connected) { $("#conversation").show(); } else { $("#conversation").hide(); } $("#greetings").html("");}function connect() { var socket = new SockJS('/it1352-websocket'); stompClient = Stomp.over(socket); stompClient.connect({}, function (frame) { setConnected(true); console.log('Connected: ' + frame); stompClient.subscribe('/topic/greetings', function (greeting) { showGreeting(JSON.parse(greeting.body).content); }); });}function disconnect() { if (stompClient !== null) { stompClient.disconnect(); } setConnected(false); console.log("Disconnected");}function sendName() { stompClient.send("/app/hello", {}, JSON.stringify({'name': $("#name").val()}));}function showGreeting(message) { $("#greetings").append("");}$(function () { $( "form" ).on('submit', function (e) {e.preventDefault();}); $( "#connect" ).click(function() { connect(); }); $( "#disconnect" ).click(function() { disconnect(); }); $( "#send" ).click(function() { sendName(); });}); " + message + "
主要Spring Boot应用程序的代码如下所示.
package com.it1352.websocketapp; import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class WebsocketappApplication { public static void main(String[] args) { SpringApplication.run(WebsocketappApplication.class, args); } }
完整的构建配置文件如下:
Maven - pom.xml
4.0.0 com.IT屋 websocketapp 0.0.1-SNAPSHOT jar websocketapp Demo project for Spring Boot org.springframework.boot spring-boot-starter-parent 1.5.9.RELEASE org.springframework.boot spring-boot-starter-websocket org.webjars webjars-locator org.webjars sockjs-client 1.0.2 org.webjars stomp-websocket 2.3.3 org.webjars bootstrap 3.3.7 org.webjars jquery 3.1.0 org.springframework.boot spring-boot-starter-test test 1.8 org.springframework.boot spring-boot-maven-plugin
Gradle - build.gradle
buildscript { repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.9.RELEASE") }}apply plugin: 'java'apply plugin: 'eclipse'apply plugin: 'org.springframework.boot'jar { baseName = 'websocketapp' version = '0.1.0'}sourceCompatibility = 1.8targetCompatibility = 1.8repositories { mavenCentral()}dependencies { compile("org.springframework.boot:spring-boot-starter-websocket") compile("org.webjars:webjars-locator") compile("org.webjars:sockjs-client:1.0.2") compile("org.webjars:stomp-websocket:2.3.3") compile("org.webjars:bootstrap:3.3.7") compile("org.webjars:jquery:3.1.0") testCompile("org.springframework.boot:spring-boot-starter-test")}