2010-05-26 107 views
1

我有一个嵌入式的servlet,我在单元测试中使用,看起来是这样的:迁移嵌入式Jetty服务器从6到版本7

这是利用码头的6.1.24版本编写
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); 
     } 
    } 

    .... 
} 

。我试图切换到使用码头7.1.1.v20100517,以及更新的代码如下:

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. 
[email protected] STOPPED 
[email protected] started 
+0

log4j警告是类路径中没有log4j.properties文件。尝试解决这个问题,看看这是否记录了真正的错误。 – 2010-05-26 11:57:44

回答

0

似乎它可能是该特定版本的问题。我改为版本7.0.2.v20100331与此代码

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); 
     } 
    } 
} 

和一切似乎现在奇妙地工作。