我昨天也沿着類似的方式詢問了question。在那個問題中,我被建議有一個全局過濾器(我已經有過)。如何在JSP中捕獲和拋出錯誤
所以我有一個JSP像下面
....code...code
..tags...html...code
Object [] res = iBatisDAO.getReport_pging(null,null,0,null); //call to DB
...more code...
...tags...end
在上面的代碼,我故意傳遞null是因爲我希望它失敗,當它失敗我希望它去我們集中的錯誤頁面。我有我的web.xml
<error-page>
<exception-type>com.ibatis.common.jdbc.exception.NestedSQLException</exception-type>
<location>/errorpages/Error.jsp</location>
</error-page>
<error-page>
<exception-type>org.springframework.dao.DataAccessException</exception-type>
<location>/errorpages/Error.jsp</location>
</error-page>
<error-page>
<exception-type>javax.servlet.ServletException</exception-type>
<location>/errorpages/Error.jsp</location>
</error-page>
<error-page>
<exception-type>java.sql.SQLException</exception-type>
<location>/errorpages/Error.jsp</location>
</error-page>
<error-page>
<exception-type>org.springframework.jdbc.UncategorizedSQLException</exception-type>
<location>/errorpages/Error.jsp</location>
</error-page>
'控制'通過我有一個全局過濾器來到上述JSP。它有chain.doFilter()
包裹在try/catch
區塊。當exception
發生它重定向到Error.jsp。
當錯誤發生時...它不會被中央錯誤頁面捕獲,也不會被過濾器捕獲。我認爲過濾器沒有捕獲它,因爲當過濾器'調用'jsp ...那裏沒有錯誤。
我知道調用DB在JSP內部是壞的,但我正在處理大量的遺留代碼。
在這種情況下,我能做些什麼來讓錯誤進入集中錯誤頁面?而且,JSP沒有導入錯誤頁面。我不希望導入一個錯誤頁面到所有JSP的選項,我想有一個更通用的解決方案。
它被映射到那個。但是因爲發生了異常內部的JSP ...過濾器如何捕獲該異常?... – drake 2010-03-10 13:33:46
@drake JSP被轉換爲一個Servlet。所以它發生在一個servlet中,在'chain.doFilter()'之後處理。請給出由異常生成的堆棧跟蹤。 – Bozho 2010-03-10 13:58:38
異常消息是:'org.springframework.jdbc.UncategorizedSQLException:SqlMapClient操作;未歸類SQL []的SQLException; SQL狀態[null];錯誤代碼[17004];'我在web.xml中捕獲的內容。現在我注意到,代碼是在chain.doFilter的catch塊中進行的,但是,在我嘗試執行'response.sendRedirect'時,在該catch塊中,它因爲響應已經設置而失敗。有沒有解決的辦法? – drake 2010-03-10 16:13:26