Java Glassfish Spring Sockjs 失败:WebSocket 握手期间出错:意外响应代码:500
Java Glassfish Spring Sockjs failed: Error during WebSocket handshake: Unexpected response code: 500
大家好我有这些错误
WebSocket connection to 'ws://localhost:8080/vix/hello/598/rula3cfq/websocket' failed: Error during WebSocket handshake: Unexpected response code: 500
我的 glassfish 版本是 4,spring4.2.4.RELEASE
这是我的控制器
@Controller
public class Test
{
@MessageMapping("/hello")
@SendTo("/topic/greetings")
public Greeting greeting(HelloMessage message) throws Exception
{
Thread.sleep(3000);
return new Greeting("hello" + message.getName());
}
这是 websocket 配置
@Configuration
@EnableWebSocketMessageBroker
public class WebsocketConfig extends
AbstractWebSocketMessageBrokerConfigurer
{
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/hello")
.setAllowedOrigins("*").withSockJS();
}
}
此安全配置
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/webjars/**", "/images/**", "/oauth/uncache_approvals", "/oauth/cache_approvals","/topic/**","/app/**",
"/hello/**", "/calcApp/**");
}
这是前面我使用 stomp 和 sockjs 的地方
var stompClient = null;
function setConnected(connected) {
document.getElementById('connect').disabled = connected;
document.getElementById('disconnect').disabled = !connected;
document.getElementById('conversationDiv').style.visibility = connected ? 'visible' : 'hidden';
document.getElementById('response').innerHTML = '';
}
function connect() {
var socket = new SockJS('http://localhost:8080/vix/hello');
stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
setConnected(true);
console.log('Connected: ' + frame);
stompClient.subscribe('/vix/topic/greetings', function(greeting){
showGreeting(JSON.parse(greeting.body).content);
});
});
}
function disconnect() {
if (stompClient != null) {
stompClient.disconnect();
}
setConnected(false);
console.log("Disconnected");
}
function sendName() {
var name = document.getElementById('name').value;
stompClient.send("/vix/app/hello", {}, JSON.stringify({ 'name': name }));
}
function showGreeting(message) {
var response = document.getElementById('response');
var p = document.createElement('p');
p.style.wordWrap = 'break-word';
p.appendChild(document.createTextNode(message));
response.appendChild(p);
}
知道如何解决这个问题吗?我是 spring websocket
的新手
在你的连接方法中你可以离开
不要使用相同的端点"hello"和MessageMapping,会混淆
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws")
.setAllowedOrigins("*").withSockJS();
}
var socket = new SockJS('/hello');
这里也去掉contextPath vix
stompClient.subscribe('/topic/greetings', function(greeting){
showGreeting(JSON.parse(greeting.body).content);
});
这里又是一样的
stompClient.send("/app/hello", {}, JSON.stringify({ 'name': name }));
基本上,所有问题都在添加上下文,因为当您添加第一个“/”时默认会添加上下文
大家好我有这些错误
WebSocket connection to 'ws://localhost:8080/vix/hello/598/rula3cfq/websocket' failed: Error during WebSocket handshake: Unexpected response code: 500
我的 glassfish 版本是 4,spring4.2.4.RELEASE
这是我的控制器
@Controller
public class Test
{
@MessageMapping("/hello")
@SendTo("/topic/greetings")
public Greeting greeting(HelloMessage message) throws Exception
{
Thread.sleep(3000);
return new Greeting("hello" + message.getName());
}
这是 websocket 配置
@Configuration
@EnableWebSocketMessageBroker
public class WebsocketConfig extends
AbstractWebSocketMessageBrokerConfigurer
{
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/hello")
.setAllowedOrigins("*").withSockJS();
}
}
此安全配置
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/webjars/**", "/images/**", "/oauth/uncache_approvals", "/oauth/cache_approvals","/topic/**","/app/**",
"/hello/**", "/calcApp/**");
}
这是前面我使用 stomp 和 sockjs 的地方
var stompClient = null;
function setConnected(connected) {
document.getElementById('connect').disabled = connected;
document.getElementById('disconnect').disabled = !connected;
document.getElementById('conversationDiv').style.visibility = connected ? 'visible' : 'hidden';
document.getElementById('response').innerHTML = '';
}
function connect() {
var socket = new SockJS('http://localhost:8080/vix/hello');
stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
setConnected(true);
console.log('Connected: ' + frame);
stompClient.subscribe('/vix/topic/greetings', function(greeting){
showGreeting(JSON.parse(greeting.body).content);
});
});
}
function disconnect() {
if (stompClient != null) {
stompClient.disconnect();
}
setConnected(false);
console.log("Disconnected");
}
function sendName() {
var name = document.getElementById('name').value;
stompClient.send("/vix/app/hello", {}, JSON.stringify({ 'name': name }));
}
function showGreeting(message) {
var response = document.getElementById('response');
var p = document.createElement('p');
p.style.wordWrap = 'break-word';
p.appendChild(document.createTextNode(message));
response.appendChild(p);
}
知道如何解决这个问题吗?我是 spring websocket
的新手在你的连接方法中你可以离开
不要使用相同的端点"hello"和MessageMapping,会混淆
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws")
.setAllowedOrigins("*").withSockJS();
}
var socket = new SockJS('/hello');
这里也去掉contextPath vix
stompClient.subscribe('/topic/greetings', function(greeting){
showGreeting(JSON.parse(greeting.body).content);
});
这里又是一样的
stompClient.send("/app/hello", {}, JSON.stringify({ 'name': name }));
基本上,所有问题都在添加上下文,因为当您添加第一个“/”时默认会添加上下文