用于websockets,servlet和资源处理程序的Jetty 7嵌入式配置

Tar*_*ran 4 servlets jetty handler embedded-jetty websocket

我正在尝试配置嵌入式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);
Run Code Online (Sandbox Code Playgroud)

在这种状态下,静态文件和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)
...
Run Code Online (Sandbox Code Playgroud)

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

任何评论都表示赞赏,谢谢.

Tim*_*Tim 6

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

 handlerList.setHandlers(new Handler[]{myWebSocketHandler,servletContextHandler,resourceHandler});
Run Code Online (Sandbox Code Playgroud)

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