servlets - Jetty 7 的 websocket、servlet 和资源处理程序的嵌入式配置

标签 servlets jetty websocket handler embedded-jetty

我正在尝试配置嵌入式 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 处理程序中基本请求“handled”属性的状态,它已经设置为 true。那么这意味着我的请求在到达 myWebSocketHandler 之前正在被处理并提交?

欢迎任何评论,谢谢。

最佳答案

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

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

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

关于servlets - Jetty 7 的 websocket、servlet 和资源处理程序的嵌入式配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9393036/

相关文章:

java - 如何映射 "root"Servlet 以便其他脚本仍可运行?

java - 为什么欢迎文件 url 的每个 url 都是 "redirecting"?

google-app-engine - 使用 appengineRun 运行 Spring Boot webapp

java - 接收类型 java.lang.CharSequence 无法解析。 Java 8 JDK 的错误消息

java - 无法在 JSP 中显示 arrayList

java - Netbeans并在EJB项目中调用Enterprise Bean

java - 从 one-jar 中加载静态资源

javascript - Websocket onerror - 如何阅读错误描述?

java - 如何使用 spring boot websocket 发送二进制文件?

javascript - SignalR 无法在 Chrome 上使用 WebSocket 连接到服务器