未找到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 /