免費Java入門課程:阿里雲大學——開發者課堂
當一個 Servlet 拋出一個異常時,Web 容器在使用了 exception-type 元素的 web.xml 中搜索與拋出異常類型相匹配的配置。
必須在 web.xml 中使用 error-page 元素來指定對特定異常 或 HTTP 狀態碼 做出相應的 Servlet 調用。java
web.xml 配置
假設,有一個 ErrorHandler 的 Servelt 在任何已定義的異常或錯誤出現時被調用。如下將是在 web.xml 中建立的項。web
<!-- servlet 定義 --><servlet> <servlet-name>ErrorHandler</servlet-name> <servlet-class>ErrorHandler</servlet-class></servlet><!-- servlet 映射 --><servlet-mapping> <servlet-name>ErrorHandler</servlet-name> <url-pattern>/ErrorHandler</url-pattern></servlet-mapping><!-- error-code 相關的錯誤頁面 --><error-page> <error-code>404</error-code> <location>/ErrorHandler</location></error-page><error-page> <error-code>403</error-code> <location>/ErrorHandler</location></error-page><!-- exception-type 相關的錯誤頁面 --><error-page> <exception-type> javax.servlet.ServletException </exception-type > <location>/ErrorHandler</location></error-page><error-page> <exception-type>java.io.IOException</exception-type > <location>/ErrorHandler</location></error-page>
若是您想對全部的異常有一個通用的錯誤處理程序,那麼應該定義下面的 error-page,而不是爲每一個異常定義單獨的 error-page 元素:app
<error-page> <exception-type>java.lang.Throwable</exception-type > <location>/ErrorHandler</location></error-page>
如下是關於上面的 web.xml 異常處理要注意的點:
1 Servelt ErrorHandler 與其餘的 Servelt 的定義方式同樣,且在 web.xml 中進行配置。
2 若是有錯誤狀態代碼出現,無論爲 404(Not Found 未找到)或 403(Forbidden 禁止),則會調用 ErrorHandler 的 Servlet。
3 若是 Web 應用程序拋出 ServletException 或 IOException,那麼 Web 容器會調用 ErrorHandler 的 Servlet。
4 您能夠定義不一樣的錯誤處理程序來處理不一樣類型的錯誤或異常。上面的實例是很是通用的,但願您能經過實例理解基本的概念。less
請求屬性 - 錯誤/異常
如下是錯誤處理的 Servlet 能夠訪問的請求屬性列表,用來分析錯誤/異常的性質。
1 javax.servlet.error.status_code
該屬性給出狀態碼,狀態碼可被存儲,並在存儲爲 java.lang.Integer 數據類型後可被分析。
2 javax.servlet.error.exception_type
該屬性給出異常類型的信息,異常類型可被存儲,並在存儲爲 java.lang.Class 數據類型後可被分析。
3 javax.servlet.error.message
該屬性給出確切錯誤消息的信息,信息可被存儲,並在存儲爲 java.lang.String 數據類型後可被分析。
4 javax.servlet.error.request_uri
該屬性給出有關 URL 調用 Servlet 的信息,信息可被存儲,並在存儲爲 java.lang.String 數據類型後可被分析。
5 javax.servlet.error.exception
該屬性給出異常產生的信息,信息可被存儲,並在存儲爲 java.lang.Throwable 數據類型後可被分析。
6 javax.servlet.error.servlet_name
該屬性給出 Servlet 的名稱,名稱可被存儲,並在存儲爲 java.lang.String 數據類型後可被分析。阿里雲
免費Java入門課程:阿里雲大學——開發者課堂url