2014-11-22 21 views
0

我想在稍微修改當前servlet中包含來自其他servlet的數據。 我想獲得其他servlet的輸出作爲字符串。Java:在沒有修改響應對象的情況下將其他servlet的輸出作爲字符串獲取

大部分解決方案參考request.getRequestDispatcher('/path/to/servlet/').include(request, response)。但是這也正在修改這個servlet的響應。如何在不修改當前servlet的輸出的情況下獲得其他servlet的輸出?

+1

構建新的請求和響應對象並將它們傳遞給包含? – A4L 2014-11-22 19:13:57

回答

0

您可以像A4L提到的那樣,使用包裝輸出寫入器(或流,如果被調用的servlet使用該寫入器)將中間結果捕獲爲StringWriter的字符串。它看起來就象這樣:

protected void doGet(HttpServletRequest request, 
     HttpServletResponse response) throws ServletException, IOException { 
     PrintWriter out = response.getWriter(); 
     RequestDispatcher dispatcher = 
      request.getRequestDispatcher("/other-servlet"); 
     StringWriter sw = new StringWriter(); 
     final PrintWriter pw = new PrintWriter(sw); 
     HttpServletResponse responseWrapper = 
      new HttpServletResponseWrapper(response) { 
       @Override 
       public PrintWriter getWriter() throws IOException { 
        return pw; 
       } 
      }; 
     dispatcher.include(request, responseWrapper); 
    out.println(this + ": The other servlet also wrote: " + sw.toString()); 
    out.close(); 
} 

然而,你應該小心使用大數據這一技術,如字符串收集流數據殺死性能。如果您需要它來處理大量回復,請考慮編寫一個裝飾PrintWriter,它可以即時執行響應流的修改。

相關問題