2012-02-22 39 views
4

我试图配置嵌入式Jetty(7.6)来同时处理WebSocketHandler,ServletContextHandler和ResourceHandler类。针对websockets,servlet和资源处理程序的Jetty 7嵌入式配置

我已经尝试使用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之前提交?

任何意见表示赞赏,谢谢。

回答

6

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

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

码头运行在您添加的顺序处理程序,以及资源处理程序(通过投放404错误潜在的)处理每一个来到它的方式请求。

3

我有同样的问题,但只使用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(); 
    } 
} 
相关问题