Java jetty websockets only服务器-无http服务器-删除404错误

Java jetty websockets only服务器-无http服务器-删除404错误,java,jetty,http-status-code-404,websocket,embedded-jetty,Java,Jetty,Http Status Code 404,Websocket,Embedded Jetty,我已经使用jetty实现了一个小型web套接字服务器,它嵌入到一个更大的java应用程序中。服务器在8081端口上运行,一切正常(在google chrome中用一个小客户端测试)。但是,如果我尝试访问(是的,使用http),我会收到一个404错误,由jetty提供支持 jetty中是否有方法检测接收到的格式是否基于websockets格式,如果不是(在我们的例子中是http),则只需关闭套接字连接,并且永远不会返回404错误 谢谢你可以自己做,但我不认为有什么东西是用Jetty包装的 如果您使

我已经使用jetty实现了一个小型web套接字服务器,它嵌入到一个更大的java应用程序中。服务器在8081端口上运行,一切正常(在google chrome中用一个小客户端测试)。但是,如果我尝试访问(是的,使用http),我会收到一个404错误,由jetty提供支持

jetty中是否有方法检测接收到的格式是否基于websockets格式,如果不是(在我们的例子中是http),则只需关闭套接字连接,并且永远不会返回404错误


谢谢

你可以自己做,但我不认为有什么东西是用Jetty包装的

如果您使用的是
WebSocketServlet
,那么您应该重写
服务
方法,类似于

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
  if(!"WebSocket".equals(request.getHeader("Upgrade")))
  {
     org.eclipse.jetty.server.Request jettyRequest =  org.eclipse.jetty.server.Request.getRequest(request);
     jettyRequest.getEndPoint().close();
     jettyRequest.setHandled(true);
  }
  else
  {
     super.service(request, response);
  }
}

如果您已经使用了自己的处理程序,那么您应该能够找到如何使代码适应您的需要。

Tim建议的是WebSocketServlet已经在做的事情。


只需扩展WebSocketServlet,然后使用各种doGet、doPost、doPut方法来处理HTTP请求。让service()方法自己去做它需要做的事情。

对不起,WebSocket总是在请求中包含升级头?是的,WebSocket就是这样工作的。它们作为普通HTTP请求启动,其中包含一个特殊的头,这会导致服务器将其“升级”到WebSocketWebSocketServlet。WebSocketServlet不会执行类似的操作。Duoa希望在不提供HTTP响应的情况下关闭非websocket请求。WebSocketServlet也处理正常的HTTP请求。。。正常HTTP请求,如果没有其他处理方法,则提供404响应。完全有可能覆盖doGet、doPost等并在它们中调用EndPoint.close(),但这只是我建议的一种替代(更糟糕)实现。