簡體   English   中英

包含jsp頁面,其中包含來自servlet的錯誤重定向

[英]include jsp page with error redirects from servlet

我正在嘗試從servlet中包含一個jsp頁面:

  RequestDispatcher rd = ctx.getRequestDispatcher( jspPage );
  rd.include( req, wrapper );   

但我得到以下異常:

java.lang.IllegalStateException: Cannot forward after response has been committed

問題在於JSP頁面通過JSP錯誤標記指定了自己的默認錯誤頁面。 JSP錯誤頁面也可以拋出一個異常,該異常將涓流到web.xml中指定的應用程序級別錯誤頁面。 因此,當我嘗試包含的jsp頁面拋出異常,並且錯誤頁面也拋出異常時,include失敗。

我必須優雅地處理這個案例,因為我在頁面上包含用戶編寫的模塊,而錯誤的模塊應該向用戶顯示異常,而不是使用IllegalStateException進行炸彈。 有任何想法嗎?

您可以嘗試將用戶的瀏覽器重定向到錯誤頁面嗎? 您可能需要在會話中保存要顯示給用戶的任何錯誤信息,因此錯誤頁面可以顯示它。

唯一的問題是編寫重定向消息可能會失敗,因為內容已經從錯誤的“頁面”傳遞出來。 不確定它是非常防彈的:)

可能增加緩沖區大小可能會使其在更多頁面上工作。

正如您在上一個問題中的評論中暗示的那樣 ,更改響應為時已晚 在響應中有X個字節后,響應頭將被提交給客戶端,這是一個不歸路的點。 你需要重寫你的JSP。 它們應該只包含標記和表示邏輯,而不包含任何可以拋出異常的業務邏輯。

如果您真的無法將JSP中的錯誤業務代碼重構為完全可靠的servlet /業務類,那么它們屬於哪里,那么最好的辦法是增加服務器配置中的HTTP響應緩沖區大小並祈禱無處flush()在JSP中發生異常之前調用並且當您的webapp忙碌時,不會出現OutOfMemoryError失敗。

相關問題:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM