jetty 9将websockets handler添加到处理程序列表中

时间:2015-11-30 20:09:40

标签: jetty java-websocket

该示例中的所有处理程序都与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处理程序(可能使用不同的Path和Port作为servletContextHandler,还是可以在那里添加?)?

1 个答案:

答案 0 :(得分:2)

一些事情。

  1. 不要混用ResourceHandlerServletContextHandler,使用来自ServletContextHandler,其资源库和DefaultServlet的内置静态文件(请参阅{ {3}})
  2. 不要在ServletContextHandler之后放置任何内容(如果您的ServletContextHandler位于contextPath /上)。一旦输入ServletContextHandler(根据contextPath),它必须完成/完成(这是servlet规范的一部分),在ServletContextHandler之后没有其他处理程序将运行。 (见prior answer with details
  3. 不要混用WebSocketHandlerServletContextHandler,使用WebSocketUpgradeFilter中的ServletContextHandler并在那里添加/管理websocket端点。 (请参阅prior answer about thisembedded-jetty-cookbook了解如何使用它)