2013-09-23 41 views
2

我試圖實現一個自定義的灰熊HttpHandler,但很難試圖簡單地從傳入的請求中提取路徑信息。請參見下面的小例子:Grizzly的Request.getPathInfo總是返回null?

public class PathInfoTest { 
    public static void main(String[] args) throws IOException { 
     final HttpServer httpServer = new HttpServer(); 
     final NetworkListener nl = new NetworkListener(
       "grizzly", "localhost", 8080); 
     httpServer.addListener(nl); 
     httpServer.getServerConfiguration().addHttpHandler(
       new HandlerImpl(), "/test"); 
     httpServer.start(); 
     System.in.read(); 
    } 

    private static class HandlerImpl extends HttpHandler { 
     @Override 
     public void service(Request request, Response response) 
       throws Exception { 

      System.out.println(request.getPathInfo()); 
      System.out.println(request.getContextPath()); 
      System.out.println(request.getDecodedRequestURI()); 
      System.out.println(request.getHttpHandlerPath()); 
    } 
} 

我認爲這將告訴灰熊是其中的URL以啓動所有傳入的請求「/測試」應HandlerImpl,這似乎工作至今處理。然而,做一個GET到http://localhost:8080/test/foo時,該代碼打印以下到stdout

null 
/test 
/test/foo 
null 

我主要關注的是第一null,這應該是路徑信息。我希望在本例中它是foo,而不是null。誰能給我解釋一下:

  1. 爲什麼兩者getHttpHandlerPath()getPathInfo()回報null在這個例子嗎?
  2. 此外,我懷疑後者是第一個的後果,這是正確的嗎?
  3. 我如何才能在灰熊網站的「未路由」部分獲得我的手?
+0

http://stackoverflow.com/questions/3745275/ how-come-request-getpathinfo-in-service-method-returns-null – gavenkoa

+1

@gavenkoa您鏈接的問題與Servlet有關,而這個問題與Servlet無關。 – Waldheinz

回答

3

您必須在映射中使用星號(類似於Servlet)以查看正確的pathInfo值。 例如請使用下面的映射:

httpServer.getServerConfiguration().addHttpHandler(
    new HandlerImpl(), "/test/myhandler/*"); 

並作出請求http://localhost:8080/test/myhandler/foo/bar

和結果將是:

/foo/bar 
/test 
/test/myhandler/foo/bar 
/myhandler 
+0

非常感謝,這是個訣竅。這應該最終成爲文檔的一部分。 – Waldheinz

+0

這個映射對應於Servlet映射,但我同意我們必須更好地記錄addHttpHandler()方法以使其清晰。感謝您的反饋 :) – alexey