Jetty 7 Native Configuration for websockets, servlets, and resource handlers

I am trying to configure embedded Jetty (7.6) to manage the WebSocketHandler, ServletContextHandler, and ResourceHandler classes at the same time.

I tried using the HandlerCollection and HandlerList classes, but I can't get all 3 parts to work.

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); 

In this state, the static files and the servlet are processed fine, but when I send a request to the web feed, I get:

 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) ... 

and if I check the status of the underlying request for a “processed” property inside my websockets handler, it is already set to true. So this means that my request is processed and committed before it gets into myWebSocketHandler?

Any comments are appreciated, thanks.

+4
source share
2 answers

Have you tried just switching the order of the handlers?

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

Jetty starts the handlers in the order in which you add them, and the resource handler processes each request that appears (possibly when servicing a 404 error).

+6
source

I had the same issue, but using only websocketHandler and resourceHandler. I solve it by setting resourceHandler in 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(); } } 
+3
source

Source: https://habr.com/ru/post/1397774/


All Articles