從JSP

2010-07-26 33 views
2

基本的servlet和jsp的設置生成HTML我熟悉....從JSP

RequestDispatcher dispatcher = request.getRequestDispatcher(resourceA.jsp); 

dispatcher.forward(request, response); 

的問題是,除了發送應答返回給瀏覽器(resourceA.jsp),我需要創建 來自resourceB.jsp的第二個HTML輸出,女巫反過來將通過電子郵件發送或用於創建pdf文檔。

這不是做每一次,只是在特定條件下,並通過調用

dispatcher.forward(request, response); 

我第二次獲得和拋出:IllegalArgumentException

我只是需要從JSP生成HTML返回HTML作爲字符串,沒有狀態碼或標題,只是HTML和A無關,與B中的方法(基本上取代了$ {面值}值)和 ,所以過濾器不起作用。

------重播先回答-----發表評論我要小---無格式

我不明白爲什麼會這樣difficaled ....

所有的鎂的有與在

${par} 
${par['key']} 
<c:if test="${patBoolean}" > 
<c:forEach var="pvar" varStatus="s_pvar" items="${parList}"> 

HTML內容合併數據我甚至創造了一個包裝掩蓋的getOutputStream()和調用getWriter(),創造我自己的PrintWriter

public class ResponseWrapper extends HttpServletResponseWrapper{ 
    private PrintWriter printWriter; 

    public ResponseWrapper(HttpServletResponse response){ 
     super(response); 
    } 

    public ServletOutputStream getOutputStream() throws java.io.IOException{....} 

    public PrintWriter getWriter() throws java.io.IOException {....} 

} 

在得到的結果爲resourceB.jsp,但問題是dispatcher.forward(請求,響應) 集isCommitted原始HttpServletResponse的一些器具。

+0

您是使用第二個JSP從客戶端還是從服務器創建PDF或發送電子郵件?如果你試圖從服務器上這樣做,我必須承認JSP不是正確的解決方案,模板引擎會更適合這項任務。 – 2010-07-26 21:46:13

+0

我只是看看速度...看看代碼: #foreach($ criteria in $ criteria) ....它模仿jsp的,我需要學習另一種單獨的頁面的腳本方法,使用代碼... 它是如此簡單的jsp,屬性,html ...我已經使用它,它適用於電子郵件和PDF,但第二個dispatcher.forward回到瀏覽器,現在是唯一的問題。 ...必須離開,是的,我從服務器端 – nico 2010-07-26 23:14:42

+0

我認爲你需要考慮發出兩個HTTP請求,而不是一個,特別是如果你已經設法讓電子郵件/ PDF部分工作。對於同一請求,服務器根本無法用兩種不同類型的內容進行響應。如果你可以詳細說明你的用例,它可能也會有所幫助,因爲要把服務器生成的電子郵件發送給客戶端這一事實是很困難的。 – 2010-07-26 23:21:46

回答

1

JSP不是這裏要做的事情。有一個單獨的進程可以填寫一個Velocity模板(用於電子郵件),或者使用XSL-FO或iText生成一個PDF,並讓JSP離開它。這是發送回HTTP響應的完全獨立的用例。

+0

我看不出爲什麼這是如此diffik ... 所有的鎂是在那裏合併數據 與HTML內容在...見編輯後 – nico 2010-07-26 22:42:27

+0

@ nico,這很困難,因爲服務器已提交響應原始請求的客戶端;一旦提交了答覆,您就不能寫入其他答覆或修改原件。你不能改變服務器的行爲 - 這就是互聯網的工作原理。 – 2010-07-26 23:03:40

+0

(+1)的速度建議。 – 2010-07-26 23:05:48