我有一個簡單的(Servlet,JSP和JSTL)Web應用程序,其主要功能是顯示從後端服務器檢索的圖像。控制器servlet將用戶轉發給JSP,然後JSP使用另一個Servlet在相同的JSP上顯示結果圖像。再往下,在JSP具有類似於行:如何處理來自圖像生成Servlet的異常?
<a href="<c:out value='${imageURL}'/>"><img src="<c:out value='${imageURL}'/>" alt="image view" border="1"></a>
其中調用了圖像生成的servlet使其產生圖像的GET請求。
我的問題是:如何處理由此圖像生成servlet引發的異常?
我已經定義了一個錯誤頁面(在web.xml中)來處理我的web應用程序中的ServletException,但這不適用於此圖像生成Servlet,並導致在我的Tomcat服務器日誌中顯示以下錯誤:
SEVERE: Exception Processing ErrorPage[exceptionType=javax.servlet.ServletException, location=/WEB-INF/ExceptionPage.jsp]
java.lang.IllegalStateException: Cannot reset buffer after response has been committed
在這種情況下我的追求是什麼?
我希望能夠處理從此圖像生成Servlet拋出的異常,並在主UI上顯示一些錯誤或將用戶轉發到另一個錯誤頁面。
感謝您的解釋 - 現在有道理!我希望能夠流傳一個罐頭404.gif圖像;問題在於我的圖像Servlet可能會返回GIF,PNG,TIFF或PDF - 因此,只有一種類型的異常會生成很多圖像 - 商業邏輯在生成圖像時可能會拋出三種異常中的任何一種。 我喜歡你的想法,不寫任何東西到響應,直到我100%確定業務邏輯沒有拋出異常。 – ssahmed555 2010-05-17 19:18:32
只需根據圖像擴展名設置「Content-Type」標頭即可。你可以爲'404.gif'修復它,或者使用'getServletContext()。getMimeType(filename)'來做這件事。您可以從[本文](http://balusc.blogspot.com/2007/04/imageservlet.html)中獲得一些想法。 – BalusC 2010-05-17 19:19:30