我使用jetty实现了一个小型的web-sockets服务器,嵌入到一个更大的java应用程序中。服务器在8081端口上运行,一切正常(在google chrome中使用一个小客户端进行测试)。但是,如果我尝试访问http://localhost:8081(是的与http),我收到一个404错误,由jetty供电。
在jetty中是否有一种方法来检测接收到的格式是否基于websockets格式,如果不是(在我们的情况下http),只是关闭套接字连接,永远不会返回404错误?
谢谢
你可以自己做,但我不认为Jetty中有任何打包的东西可以做到这一点。
如果您使用的是WebSocketServlet
,那么您应该重写service
方法,使其类似于
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已经在做的事情。https://github.com/eclipse/jetty.project/blob/master/jetty-websocket/src/main/java/org/eclipse/jetty/websocket/WebSocketServlet.java
只需扩展WebSocketServlet,然后使用各种doGet、doPost、doPut方法来处理HTTP请求。让service()方法去做它需要做的事情。