Jetty 防波堤腹板吊篮和吊篮
我试图让一个普通的AbstractHandler和WebSocketAdapter同时工作 码头版本:jetty-9.4.8.v20171121 我有一个简单的类Foo,它扩展了org.eclipse.jetty.server.handler.AbstractHandler 也是一个扩展org.eclipse.jetty.websocket.api.WebSocketAdapter的类栏 胶水等级:Jetty 防波堤腹板吊篮和吊篮,jetty,java-websocket,Jetty,Java Websocket,我试图让一个普通的AbstractHandler和WebSocketAdapter同时工作 码头版本:jetty-9.4.8.v20171121 我有一个简单的类Foo,它扩展了org.eclipse.jetty.server.handler.AbstractHandler 也是一个扩展org.eclipse.jetty.websocket.api.WebSocketAdapter的类栏 胶水等级: @SuppressWarnings("serial") public class Glue ex
@SuppressWarnings("serial")
public class Glue extends WebSocketServlet {
@Override
public void configure(WebSocketServletFactory factory) {
factory.register(Bar.class);
}
}
现在,我尝试制作一台同时使用以下两种功能的服务器:
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
context.setHandler(new Foo());
ServletHolder holder = new ServletHolder("ws-events", Glue.class);
context.addServlet(holder, "/whatever/*");
Server server = new Server(80);
server.setHandler(context);
server.start();
这会启动,当我转到localhost时,我会看到Foo应该显示的内容,但我无法连接到websocket。看起来所有的请求都会转到Foo
当我删除context.setHandlernew Foo时;显然,它不再显示html内容,但我可以连接到websocket
我希望两者同时工作。不要将响应处理程序和ServletContextHandler混合使用 将Foo更改为Servlet,将其分配为一个合理的url模式作为Servlet 原因是您的Foo在任何servlet代码之前执行 使用处理程序实现这一点的唯一其他方法是使您的Foo处理程序websocket和HTTP/1.1升级感知,并且在检测到请求用于websocket升级时不执行。这是个坏主意!别这样!当HTTP/2上的WebSocket到达时,它不向后兼容 另外请注意,如果非websocket客户机在同一url模式上请求HTTP内容,则可以让Glue类实现doGet和服务HTML 顺便说一句,如果您希望提供静态html,请不要在您自己的代码中这样做。为ServletContextHandler分配一个合理的基本资源位置,并添加一个DefaultServlet来服务与另一个url模式不匹配的静态资源 请参阅前面关于此问题的回答: