jetty 9将WebSocket处理程序添加到处理程序列表

jetty 9将WebSocket处理程序添加到处理程序列表,jetty,java-websocket,Jetty,Java Websocket,该示例中的所有处理程序都与websockets处理程序分开工作 WebSocketHandler wsHandler = new WebSocketHandler() { @Override public void configure(WebSocketServletFactory factory) { factory.register(WebsocketsService.class); } };

该示例中的所有处理程序都与websockets处理程序分开工作

       WebSocketHandler wsHandler = new WebSocketHandler() {
        @Override
        public void configure(WebSocketServletFactory factory) {
            factory.register(WebsocketsService.class);
        }
    };

    HandlerList handlers = new HandlerList();
    handlers.setHandlers(new Handler[] { resource_handler, servletContextHandler, wsHandler, new DefaultHandler() });
    server.setHandler(handlers);
它失败了

到“ws://localhost:8080/”的WebSocket连接失败:WebSocket握手期间出错:意外响应代码:200

如何正确配置和添加websockets处理程序(可能使用不同的路径和端口作为servletContextHandler,或者可以将其添加到那里?

一些事情

  • 不要混合使用
    ResourceHandler
    ServletContextHandler
    ,使用来自
    ServletContextHandler
    的内置静态文件、其资源库和
    DefaultServlet
    (请参阅)
  • 如果您的
    ServletContextHandler
    位于contextPath
    /
    上,则不要将任何内容放在
    ServletContextHandler
    之后。一旦输入了一个
    ServletContextHandler
    (根据contextPath),那么它必须完成(这是servlet规范的一部分),之后的任何其他处理程序都不会运行。(见附件)
  • 不要混合使用
    WebSocketHandler
    ServletContextHandler
    ,在
    ServletContextHandler
    中使用
    WebSocketUpgradeFilter
    并在那里添加/管理websocket端点。(有关如何使用,请参阅和)

  • 谢谢你。事实上要检查的东西很多。如果成功,将返回。Jetty文档实际上在某些情况下提到了嵌入式解决方案的Ressource处理程序方法,这有点令人困惑,如@Joakim,您似乎是合适的人选,因此如果您不介意对此发表评论,请再说一遍,不要混合使用
    ResourceHandler
    ServletContextHandler
    ,文档中的示例都不会这样做。请参阅。一旦您开始使用
    ServletContextHandler
    (这是一种更高级的方法),您就不再使用任何可以提供内容的
    Handler
    (像
    GzipHandler
    之类的东西都可以,因为它们只操作从
    ServletContextHandler
    生成的内容,但不生成它们自己的内容)不幸的是,我得到了这里处理的“找不到资源目录”…路径看起来正常…我应该发布一个新问题吗?