我按照spring官网的文档搭建了springwebsocket的环境,但是我在页面用socketjs和websocket连接时,总是报错,有做过的朋友,指点指点,下面是我的代码
websocket配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:websocket="http://www.springframework.org/schema/websocket"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/websocket
http://www.springframework.org/schema/websocket/spring-websocket.xsd">
<websocket:handlers>
<websocket:mapping path="/handler" handler="webSocketHandler"/>
<!--<websocket:mapping path="/binaryHandler" handler="binaryHandler"/>-->
<websocket:handshake-interceptors>
<bean class="com.ballchen.websocket.HandshakeInterceptor"></bean>
</websocket:handshake-interceptors>
<!--<websocket:sockjs/>-->
</websocket:handlers>
<websocket:handlers>
<websocket:mapping path="/socketjs/handler" handler="webSocketHandler"/>
<!--<websocket:mapping path="/binaryHandler" handler="binaryHandler"/>-->
<websocket:handshake-interceptors>
<bean class="com.ballchen.websocket.HandshakeInterceptor"></bean>
</websocket:handshake-interceptors>
<websocket:sockjs/>
</websocket:handlers>
<bean class="org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean">
<property name="maxTextMessageBufferSize" value="8192"/>
<property name="maxBinaryMessageBufferSize" value="8192"/>
</bean>
</beans>
package com.ballchen.websocket;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.http.server.ServletServerHttpRequest;
import org.springframework.web.socket.WebSocketHandler;
import javax.servlet.http.HttpSession;
import java.util.Map;
/**
* Created by Administrator on 2016/12/13 0013.
*/
public class HandshakeInterceptor implements org.springframework.web.socket.server.HandshakeInterceptor {
@Override
public boolean beforeHandshake(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse, WebSocketHandler webSocketHandler, Map<String, Object> map) throws Exception {
if (serverHttpRequest instanceof ServletServerHttpRequest) {
ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) serverHttpRequest;
HttpSession session = servletRequest.getServletRequest().getSession(false);
String userName = "xq";
if (session != null) {
//使用userName区分WebSocketHandler,以便定向发送消息
// String userName = (String) session.getAttribute("WEBSOCKET_USERNAME");
map.put("WEBSOCKET_USERNAME",userName);
}
}
return true;
}
@Override
public void afterHandshake(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse, WebSocketHandler webSocketHandler, Exception e) {
}
}
package com.ballchen.websocket;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.WebSocketMessage;
import org.springframework.web.socket.WebSocketSession;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2016/12/13 0013.
*/
@Component("webSocketHandler")
public class WebSocketHandler implements org.springframework.web.socket.WebSocketHandler {
private static final List<WebSocketSession> users = new ArrayList<>();
/**
* 初次链接成功执行
* @param webSocketSession
* @throws Exception
*/
@Override
public void afterConnectionEstablished(WebSocketSession webSocketSession) throws Exception {
}
/**
* 消息处理
* @param webSocketSession
* @param webSocketMessage
* @throws Exception
*/
@Override
public void handleMessage(WebSocketSession webSocketSession, WebSocketMessage<?> webSocketMessage) throws Exception {
}
/**
* 链接错误
* @param webSocketSession
* @param throwable
* @throws Exception
*/
@Override
public void handleTransportError(WebSocketSession webSocketSession, Throwable throwable) throws Exception {
}
/**
* 链接关闭
* @param webSocketSession
* @param closeStatus
* @throws Exception
*/
@Override
public void afterConnectionClosed(WebSocketSession webSocketSession, CloseStatus closeStatus) throws Exception {
}
@Override
public boolean supportsPartialMessages() {
return false;
}
}
var wsServer = 'ws://127.0.0.1:8080/handler';
var websocket = new WebSocket(wsServer);
websocket.onopen = function (evt) { onOpen(evt) };
websocket.onclose = function (evt) { onClose(evt) };
websocket.onmessage = function (evt) { onMessage(evt) };
websocket.onerror = function (evt) { onError(evt) };
function onOpen(evt) {
console.log("Connected to WebSocket server.");
}
function onClose(evt) {
console.log("Disconnected");
}
function onMessage(evt) {
console.log('Retrieved data from server: ' + evt.data);
}
function onError(evt) {
console.log('Error occured: ' + evt.data);
}
var sock = new SockJS('http://localhost:8080/socketjs/handler');
sock.onopen = function() {
console.log('open');
};
sock.onmessage = function(e) {
console.log('message', e.data);
};
sock.onclose = function() {
console.log('close');
};
sock.send('Hello WebSocket!!!');
sock.close();
用socketjs连接时,报如下错误我

还请会的朋友不吝赐教。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
websocket=newSockJS('/sockjs/handler');试试。
或者加ws://