2011-06-09 75 views
0

嗨,我從這個鏈接下面的代碼:Capture and log the response body重寫的getWriter(),服務器返回503錯誤(奇怪?)

但是服務器返回錯誤503這是很奇怪?

這是我的代碼:

 final CopyPrintWriter writer = new CopyPrintWriter(servletresponse.getWriter()); 
     chain.doFilter(servletrequest, new MyResponseWrapper( 
       (HttpServletResponse) servletresponse){ 
       @Override 
       public PrintWriter getWriter() { 
        return writer; 
       } 

     }); 
     log.debug("Test - " + writer.getCopy()); 
     writer.close(); 

過濾器類裏面我加了一些日誌記錄:

12:03:22,404   INFO MyFilter:43 - Before invoking chain 
12:03:24,107  DEBUG MyFilter:59 - Test - 
12:03:24,108   INFO MyFilter:73 - After invoking chain 

的客戶端從該代碼接收HTTP錯誤503。而且從日誌writer.getCopy()返回一個空字符串?可能是什麼原因?

編輯:刪除CopyPrintWriter相關的代碼,而不是覆蓋getWriter(),服務器返回與HTML確定。

回答

0

可能是因爲您正在創建一個編寫器,而過濾器調用後的servlet調用是通過從HttpServletResponse.getOutputStream()獲取內容來編寫流。

+0

你心中有沒有僞代碼? – xybrek 2011-06-09 05:46:23

+0

你可以發佈你的servlet代碼嗎.. – 2011-06-09 05:49:58

+0

這個servlet是一個返回「text/html」類型的內容的servlet。 – xybrek 2011-06-09 07:26:09

0

該錯誤可能是在您的MyResponseWrapper類中。

+0

我不知道該錯誤是否在包裝類中,因爲它只是一個覆蓋getOutputStream的包裝器,我使用TeeOutputStream來分支流並記錄它。 – xybrek 2011-06-09 05:45:14