Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jetty 防波堤腹板吊篮和吊篮_Jetty_Java Websocket - Fatal编程技术网

Jetty 防波堤腹板吊篮和吊篮

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

我试图让一个普通的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 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模式不匹配的静态资源

请参阅前面关于此问题的回答: