2010-05-26 105 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); 
     } 
    } 
} 

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