未找到404的Spring websocket
我正在尝试用spring创建一个websocket端点。 但每当我尝试从客户端连接时,我得到404.我也有一个Java实现
@ServerEndpoint(value = "/websocket")
这很好用。 下面是我的spring实现的代码,它不起作用。 我在这做错了什么?
package com.tlab.endpoint; 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; @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(socketHandler(),"/socket");; } @Bean public WebSocketHandler socketHandler() { return new SocketHandler(); } }
下面是处理程序
package com.tlab.endpoint; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.handler.TextWebSocketHandler; public class SocketHandler extends TextWebSocketHandler { @Override public void handleTextMessage(WebSocketSession session, TextMessage message) { } }
在客户端代码我尝试了所有diff可能的组合
在处理程序中使用/ socket
var websocket = new WebSocket("ws://localhost:8080/tsim/socket"); var websocket = new WebSocket("ws://localhost:8080/tsim/socket"); var websocket = new WebSocket("ws://localhost:8080/tsim/rest/socket");
在处理程序中使用/ rest / socket
var websocket = new WebSocket("ws://localhost:8080/tsim/rest/socket");
tsim是我的背景。 一切都抛出以下错误
WebSocket connection to 'ws://localhost:8080/tsim/socket' failed: Error during WebSocket handshake: Unexpected response code: 404.
我没有得到任何编译和部署错误。 我使用tomcat 8.0及以下版本是调度程序servlet配置。
下面是我的web.xml
dispatcher org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/classes/dispatcher-servlet.xml 1 dispatcher /rest/
我终于找到了答案。 因为这是由调度程序servlet作为普通的http请求来处理的。 我需要将@Controller注释添加到WebSocketConfig类
@Configuration @EnableWebSocket @Controller public class WebSocketConfig implements WebSocketConfigurer
我的情况,问题出在调度程序servlet映射中。 我只有* .mvc映射,websocket没有它,所以我不得不改为:
dispatcherServlet *.mvc /