Java 连接到websocket时,我的状态为200,但这是一个错误吗?

Java 连接到websocket时,我的状态为200,但这是一个错误吗?,java,javascript,tomcat,websocket,spring-websocket,Java,Javascript,Tomcat,Websocket,Spring Websocket,我的错误显示在浏览器的控制台中: “到'ws://localhost:32768/DspClusterWebServices/myHandler'的WebSocket连接失败:意外响应代码:200” 我使用的是Spring-Websockets 4.1.5和Tomcat 8.0.18。我的WebSocketConfigurer实现类如下所示: @Configuration @Controller @EnableWebSocket public class WebSocketConfig impl

我的错误显示在浏览器的控制台中:

“到'ws://localhost:32768/DspClusterWebServices/myHandler'的WebSocket连接失败:意外响应代码:200”

我使用的是
Spring-Websockets 4.1.5
Tomcat 8.0.18
。我的WebSocketConfigurer实现类如下所示:

@Configuration
@Controller
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer
{
   class MyHandler implements WebSocketHandler
   {
      @Override
      public void afterConnectionEstablished(WebSocketSession session) throws Exception
      {
         System.out.println("afterConntectionEstablished called");
      }

       ...implements rest of functions with a System.out.println and false for supportsPartialMessages()

      }
   }

   @Override registerWebSocketHandlers(WebSocketHandlerRegistry registry)
   {
      registry.addHandler(myHandler(), "myHandler").withSockJS();
   }

   @Bean
   public WebSocketHandler myHandler()
   {
      return new MyHandler();
   }
}
我的testWebsocketClient.js尝试使用此代码连接,但错误代码为200:

websocket = new WebSocket("ws://localhost:8080/myApp/myHandler");
我不知道下一步该做什么。我以为这会导致afterConnectionEstablished(WebSocketSession会话)方法触发?代码200不是很好吗?

请看下面的代码。服务器应响应
101
,以指示协议从
http
更改为
ws

请检查

在您将
/websocket
(添加到您的URL)后,它将给出错误信息

无法分析原始标头值[null]

)() ,这将反过来引导您找到


您必须将
.setAllowedOriginates(“*”
添加到
addHandler()
方法中,然后它才能最终工作

请检查“ws://localhost:32768/DspClusterWebServices/myHandler”是否正确。

对于像我这样使用angular+springboot并出现此错误的人。请检查是否已启用重定向或将所有非api端点请求转发回index.html。比如:

@RequestMapping(value = "/**/{[path:[^\\.]*}")
    public String redirect() {
        // Forward to home page so that route is preserved.
        return "forward:/index.html";
    }

如果您这样做,禁用它,您将得到101

我不知道这是否为时已晚,但我偶然发现的解决方案只是在spring引导服务器中声明的websocket端点之后添加字符串
/websocket
。这将有助于保持转发逻辑和连接,并建立websocket连接。

作为我的另一个答案:[

我使用springboot 2+跺脚

删除
。使用sockjs()
,则一切正常


我不知道原因,但对我有效。

我仍然不确定该怎么办,这个链接给出了状态200代码的进一步解释:服务器端一定出了问题,但我不确定如何,我正在使用Tomcat 8.0.18看看这个,请特别注意:“至于你的”意外响应代码:200“错误,我猜您在客户端使用的WebSocket URL没有指向有效的服务器端脚本,但是如果没有更多信息,很难对其进行评论。“需要什么信息?我正在使用Tomcat 8.0.18,我可以在Tomcat安装的lib文件夹中看到websocket-api.jar和Tomcat-websocket.jar…控制器注释如何?(它不在websocket示例中)…你不认为这会干扰吗?哼…听起来不错:请尝试连接到“ws://localhost:8080/myApp/myHandler/websocket”!?xerx593请回答包含该链接以及该链接的问题:在我添加websocket后,它给了我一个错误“无法解析源标题值[null]”,这将导致我找到该链接。我必须将.setAllowedOrigins(“*”)添加到我的addHandler()中方法。然后它终于起作用了!如果你回答了,我会检查它,这样你就可以得到你应得的积分,就像一个附加组件一样,如果你删除了.withSockJs()取消服务器和/websocket的客户端代码,它也会这样工作!棘手的事情,希望这能帮助人们在未来!再次感谢xerx593帮助我找到解决方案!哦,我的上帝!!!!真的谢谢!!!这个问题困扰了我3个小时…我浪费了3天!这很有效。哇!谢谢!我该怎么办f我需要redirect()方法和websocket?@Gleb将您在角度级别定义的所有路由路径放在值数组中。例如,您在app.module.ts中定义了“/login”、“/logout”和“/welcome”路由,并且还有一些以“api”开头的restful调用。然后您需要修改注释,如@RequestMapping(value={”/登录“,“/logout”,“/welcome”,“/api/**”}@forguta只需删除您的websocket处理程序…?这对我有帮助:。(我使用jhipster)我遵循了的官方教程和add.withSockJS()。删除它有帮助,因为我只想在我的情况下使用库StompJS