Java jetty websockets only服务器-无http服务器-删除404错误
我已经使用jetty实现了一个小型web套接字服务器,它嵌入到一个更大的java应用程序中。服务器在8081端口上运行,一切正常(在google chrome中用一个小客户端测试)。但是,如果我尝试访问(是的,使用http),我会收到一个404错误,由jetty提供支持 jetty中是否有方法检测接收到的格式是否基于websockets格式,如果不是(在我们的例子中是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包装的 如果您使用的是
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(),但这只是我建议的一种替代(更糟糕)实现。