1.需要的类库基于maven配置
<!-- websocket -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-websocket</artifactId>
<version>4.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-messaging</artifactId>
<version>4.2.0.RELEASE</version>
</dependency>
2.websocket服务端处理器
<pre name="code" class="java">package com.sky.springmvc.websockets; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.handler.TextWebSocketHandler; /** * websocket 处理器 * @author 孙效宁 * */ public class WebsocketEndPoint extends TextWebSocketHandler{ @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { super.handleTextMessage(session, message); TextMessage textMessage = new TextMessage(message.getPayload()+" received at server"); System.err.println("message:"+message.getPayload()); // 将客户端发送的信息原样输出 session.sendMessage(textMessage); } }
3.自定义握手接口(可选,如果有的话在配置的时候要加上,配置见4)
4.服务端处理器和握手接口配置
package com.sky.springmvc.websockets; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.handler.TextWebSocketHandler; /** * websocket 处理器 * @author 孙效宁 * */ public class WebsocketEndPoint extends TextWebSocketHandler{ @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { super.handleTextMessage(session, message); TextMessage textMessage = new TextMessage(message.getPayload()+" received at server"); // 输出客户端发送的消息
System.err.println("message:"+message.getPayload()); // 将客户端发送的信息原样输出 session.sendMessage(textMessage); } <p>}</p>
package com.sky.springmvc.websockets; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; /** * websocket 配置 * @author 孙效宁 * */ @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(myHandler(), "/myHandler") .addInterceptors(new HandshakeInterceptor()) .setAllowedOrigins("*").withSockJS(); } @Bean public WebSocketHandler myHandler() { return new WebsocketEndPoint(); } <p>}</p>
5.springmvc 配置文件记得加上注解扫描
6.客户端页面
<!-- 注解扫描器 --> <context:component-scan base-package="com.sky.springmvc"/>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <title>hello</title> <script src="http://cdn.sockjs.org/sockjs-0.3.min.js"> </script> <script> var sock = new SockJS('http://localhost:8080/springmvc/myHandler'); sock.onopen = function() { console.log('open'); // 给服务端发送简单文本消息 sock.send("test"); }; sock.onmessage = function(e) { console.log('message', e.data); }; sock.onclose = function() { console.log('close'); }; </script> </head> <body> </body> </html>