2009-02-17 106 views
3

我創建了一個類MyClass,它打算向JSP輸出大量文本。我沒有讓MyClass對象返回一個字符串來顯示在頁面上,而是希望MyClass對象使用頁面的輸出流。這是一個好的/可能的想法嗎?將JSP輸出流傳遞給方法

在測試中可能的方式做到這一點...

這些輸出的文本,但它顯示的頁面的主體之前:

response.getWriter().append("test1"); 
response.getWriter().println("test2"); 
response.getWriter().write("test3"); 

這個錯誤,並告訴我輸出流已經得到

response.getOutputStream().println("test4"); 

回答

9

response.getWriter()將爲您提供不同於JSP中使用的編寫器。如果您想要寫入JSP頁面正在使用的同一個書寫器,則需要使用JSP頁面中的out變量。區別在於JSP在標準response.getWriter()之上使用了緩衝。這就是爲什麼您在JSP主體之前將數據寫入response.getWriter()的原因。

您不能混合response.getWriter()response.getOutputStream()out JSP中的變量是JspWriter實例包裝書寫器獲得response.getWriter(),因此調用response.getOutputStream()將失敗。

,你應該在你的JSP做什麼:

<% 
    new MyClass().writeToWriter(out); 
%> 

而且在MyClass的:

public void writeToWriter(Writer w) { 
    w.println("My data appended to correct writer"); 
} 
1

有類回你在某時刻產生的文字一個小塊的迭代器。然後,您可以遍歷JSP中的迭代器,並在適當的位置打印數據塊。