【问题标题】:Jetty 7 embedded configuration for websockets, servlets AND resource handlersJetty 7 嵌入式配置,用于 websocket、servlet 和资源处理程序
【发布时间】:2012-03-12 16:14:51
【问题描述】:

我正在尝试配置嵌入式 Jetty (7.6) 以同时处理 WebSocketHandler、ServletContextHandler 和 ResourceHandler 类。

我已尝试同时使用 HandlerCollection 和 HandlerList 类,但我无法让所有 3 个部分都工作。

  Server server = new Server(8081);

  // static files handler
  ResourceHandler resourceHandler = new ResourceHandler();
  resourceHandler.setDirectoriesListed(true);
  resourceHandler.setResourceBase("./src/main/webapp/");

  // servlet handler
  ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
  servletContextHandler.setContextPath("/");
  servletContextHandler.addServlet(new ServletHolder(new myServlet()), "/myServlet");

  // websocket handler
  myWebSocketHandler myWebSocketHandler = new myWebSocketHandler();

  // putting it together
  HandlerCollection handlerList = new HandlerCollection();
  handlerList.setHandlers(new Handler[]{resourceHandler,myWebSocketHandler,servletContextHandler});
  server.setHandler(handlerList);

在这种状态下,静态文件和servlet处理得很好,但是当我发送一个websocket请求时,我得到:

2012-02-22 10:16:44.703:WARN:oejs.Response:Committed before 503 null
2012-02-22 10:16:44.705:WARN:oejs.AbstractHttpConnection:/
java.lang.IllegalStateException: Committed
    at org.eclipse.jetty.server.Response.resetBuffer(Response.java:1080)
...

如果我在我的 websockets 处理程序中检查基本请求“已处理”属性的状态,它已经设置为 true。所以这意味着我的请求在到达 myWebSocketHandler 之前已经被处理并提交了?

感谢任何cmets,谢谢。

【问题讨论】:

    标签: servlets jetty websocket handler embedded-jetty


    【解决方案1】:

    您是否尝试过简单地切换处理程序的顺序?

     handlerList.setHandlers(new Handler[]{myWebSocketHandler,servletContextHandler,resourceHandler});
    

    Jetty 按照您添加它们的顺序运行处理程序,并且资源处理程序会处理每个到达的请求(可能通过提供404 错误)。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,但只使用了 websocketHandler 和 resourceHandler。我解决了将resourceHandler设置为websocketHandler:

      public static void main(String[] args) {
          try {
              Server server = new Server(8081);
      
              ResourceHandler resourceHandler = new ResourceHandler();
              resourceHandler.setResourceBase("./chat");
      
              WebSocketHandler chatWebSocketHandler = new ChatWebSocketHandler();
              chatWebSocketHandler.setHandler(resourceHandler);
      
              HandlerList handlers = new HandlerList();
              handlers.setHandlers(new Handler[]{chatWebSocketHandler});
      
              server.setHandler(handlers);
      
              server.start();
              // Jetty server is stopped when the Thread is interrupted.
              server.join();
          } catch (Throwable e) {
              e.printStackTrace();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-06-24
        • 2016-03-12
        • 1970-01-01
        • 2015-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-02
        相关资源
        最近更新 更多