代码之家  ›  专栏  ›  技术社区  ›  Ceilingfish

将嵌入式Jetty服务器从版本6迁移到版本7

  •  1
  • Ceilingfish  · 技术社区  · 15 年前

    我在单元测试中使用了一个嵌入式servlet,如下所示:

    public class UnitTestWebservices extends AbstractHandler {
    
        private Server server;
    
        private Map<Route,String> data = new HashMap<Route,String>();
    
        public UnitTestWebservices(int port) throws Exception {
    
            server = new Server(port);
            server.setHandler(this);
            server.start();
    
        }
    
        public void handle(String url, HttpServletRequest request, HttpServletResponse response, int arg3) throws IOException, ServletException {
    
            final Route route = Route.valueOf(request.getMethod(), url);
    
            final String content = data.get(route);
    
            if(content != null) {
                final ServletOutputStream stream = response.getOutputStream();
    
                stream.print(content);
                stream.flush();
                stream.close();
            }
            else {
                response.sendError(HttpServletResponse.SC_NOT_FOUND);
            }
        }
    
        ....
    }
    

    这是用Jetty的6.1.24版本编写的。我尝试切换到使用Jetty 7.1.1.v21000517,并将代码更新为:

    public class UnitTestWebservices extends AbstractHandler {
    
        private Server server;
    
        private Map<Route,String> data = new HashMap<Route,String>();
    
        public UnitTestWebservices(int port) throws Exception {
    
            server = new Server(port);
            server.setHandler(this);
            server.start();
    
        }
    
    
        public void handle(String url, Request request, HttpServletRequest servletRequest, HttpServletResponse response) throws IOException, ServletException {
    
            final Route route = Route.valueOf(request.getMethod(), url);
    
            final String content = data.get(route);
    
            request.setHandled(true);
    
            response.setContentType("application/json");
    
            if(content != null) {
                response.setStatus(HttpServletResponse.SC_OK);
                final Writer stream = response.getWriter();
    
                stream.append(content);
            }
            else {
                response.sendError(HttpServletResponse.SC_NOT_FOUND);
            }
        }
    }
    

    但每当我试图向服务器发出请求时,它就会无限期挂起。有人经历过类似的事情吗?。它还将其打印到日志中:

    log4j:WARN No appenders could be found for logger (org.eclipse.jetty.util.log).
    log4j:WARN Please initialize the log4j system properly.
    org.eclipse.jetty.server.Server@670655dd STOPPED
     +-UnitTestWebservices@50ef5502 started
    
    1 回复  |  直到 12 年前
        1
  •  0
  •   Ceilingfish    15 年前

    似乎是那个特定版本的问题。我用这个代码改成了7.0.2.v2010.0331版本

    public class UnitTestWebservices extends AbstractHandler {
    
        private Server server;
    
        private Map<Route,String> data = new HashMap<Route,String>();
    
        public UnitTestWebservices(int port) throws Exception {
    
            server = new Server(port);
            server.setHandler(this);
            server.start();
    
        }
    
        public void handle(String url, final Request rawRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
    
            final Route route = Route.valueOf(request.getMethod(), url);
    
            final String content = data.get(route);
    
            if(content != null) {
                final ServletOutputStream stream = response.getOutputStream();
    
                stream.print(content);
                stream.flush();
                stream.close();
            }
            else {
                response.sendError(HttpServletResponse.SC_NOT_FOUND);
            }
        }
    }
    

    现在一切似乎都很顺利。