2010-06-03 23 views
0

可以說我的表單稱爲servlet。我會做一些處理。在servlet中,我想在頁面上打印一些內容。對,我用我們可以做getwriter並在單個servlet中轉發

PrintWriter out=response.getWriter(); 
out.println("some text here"); 

然後進一步在servlet我做了一些更多的形式處理,工作正常之後,我想這個servlet轉發到JSP頁面。爲此我使用了

RequestDispatcher rd = request.getRequestDispatcher("/somepage.jsp"); 
rd.forward(request, response); 

問題來了。文本

some text here 

獲得打印,但servlet不會將請求轉發到jsp頁面,就好像代碼不運行一樣。

回答

0

不,你不能那樣做。如果你已經調查過服務器日誌文件,那麼你應該注意到像IllegalStateException: cannot forward, response already committed這樣的東西。

向響應寫入內容將提交響應並將響應頭和寫入的字節發送到客戶端。但是之後發送轉發請求可能需要更改響應頭文件,因爲這些文件已經發送,所以不再可能。服務器無法獲取已發送的頭和字節並重新獲得響應。這是一個不歸路。

在servlet中發送一些HTML /模板輸出也被認爲是不好的做法。你應該在JSP中這樣做。您可以將消息存儲在請求範圍中,並在JSP中使用EL來顯示它。

例如:

request.setAttribute("message", "some message"); // Will be available as ${message} 
request.getRequestDispatcher("/somepage.jsp").forward(request, response); 

somepage.jsp

<p>Message: ${message}</p> 
+0

感謝您的答覆。我試圖用它來打印「處理你的請求」作爲第一個響應,然後這個過程需要很長時間然後轉發到jsp頁面。 你可以建議我一種不使用AJAX的方法嗎? – karanits 2010-06-04 19:29:35

+0

如果不使用AJAX,您將不得不求助於元刷新頁面和會話範圍。您可以在[本站點](http://simple.souther.us/not-so-simple.html)的「長時間運行過程」部分找到一個示例。 – BalusC 2010-06-04 19:43:40

相關問題