前提:SSM+maven
jsp
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
String wsPath = "ws://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<script src="sockjs.min.js"></script>
$(document).ready(function() {
//建立socket连接
var sock;
if ('WebSocket' in window) {
sock = new WebSocket("<%=wsPath%>socketServer");
} else if ('MozWebSocket' in window) {
sock = new MozWebSocket("<%=wsPath%>socketServer");
} else {
sock = new SockJS("<%=basePath%>sockjs/socketServer");
}
sock.onopen = function (e) {
console.log(e);
};
sock.onmessage = function (e) {
console.log(e);
//var bToObj=JSON.parse(e.data)
alert(e.data)
};
sock.onerror = function (e) {
console.log(e);
};
sock.onclose = function (e) {
console.log(e);
}
});
}
POM依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-websocket</artifactId>
<version>4.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-messaging</artifactId>
<version>4.0.1.RELEASE</version>
</dependency>
WebSocketInterceptor
import java.util.Map;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.server.HandshakeInterceptor;
public class WebSocketInterceptor implements HandshakeInterceptor{
@Override
public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response,
WebSocketHandler handler, Exception exception) {
}
@Override
public boolean beforeHandshake(ServerHttpRequest request,ServerHttpResponse response, WebSocketHandler handler,Map<String, Object> map) throws Exception {
if(request instanceof ServerHttpRequest){
}
return true;
}
}
WebSocketConfig
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
@Configuration
@EnableWebMvc
@EnableWebSocket
public class WebSocketConfig extends WebMvcConfigurerAdapter implements WebSocketConfigurer{
@Autowired
private BusSocketHandler busSocketHandler;
@Autowired
private CountrySocketHandler countrySocketHandler;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
//注册处理拦截器,拦截url为socketServer的请求
registry.addHandler(busSocketHandler, "/socketServer").addInterceptors(new WebSocketInterceptor());
//注册SockJs的处理拦截器,拦截url为/sockjs/socketServer的请求
registry.addHandler(busSocketHandler, "/sockjs/socketServer").addInterceptors(new WebSocketInterceptor()).withSockJS();
//注册处理拦截器,拦截url为socketServer的请求
registry.addHandler(countrySocketHandler, "/countrySocketServer").addInterceptors(new WebSocketInterceptor());
//注册SockJs的处理拦截器,拦截url为/sockjs/socketServer的请求
registry.addHandler(countrySocketHandler, "/sockjs/countrySocketServer").addInterceptors(new WebSocketInterceptor()).withSockJS();
}
}
BusSocketHandler
import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Service;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketMessage;
import org.springframework.web.socket.WebSocketSession;
import com.alibaba.fastjson.JSONObject;
@Service
public class BusSocketHandler implements WebSocketHandler{
@Override
public void afterConnectionEstablished(WebSocketSession session)
throws Exception {
this.sendMessageToBus(session);
}
@Override
public void handleMessage(WebSocketSession arg0, WebSocketMessage<?> arg1)
throws Exception {
}
@Override
public void handleTransportError(WebSocketSession session, Throwable error)
throws Exception {
if(session.isOpen()){
session.close();
}
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus arg1)
throws Exception {
}
@Override
public boolean supportsPartialMessages() {
return false;
}
public void sendMessageToBus(WebSocketSession session) throws Exception {
if (session.isOpen()) {
Map<String, String> map = new HashMap<String,String>();
int i = 1;
while (session.isOpen()) {
String a = "a====="+i;
map.put("a", a);
String jsonString = JSONObject.toJSONString(map);
try {
session.sendMessage(new TextMessage(jsonString));
} catch (Exception e) {
break;
}
Thread.sleep(1000);
i++;
}
}
}
}