除了錯誤處理機制以外,一個表示層框架必須提供本地異常信息的顯示和反饋機制。一個可行的方式是捕獲實際的異常和錯誤內容到日志文件中然后發送一個有意義的信息幫助用戶決定適當的操作。在jsp中沒有捕獲的異常,都將由jsp1.2規范定義的錯誤頁面機制處理。類似的,在servlets中沒有處理的異常將由web.xml定義的errorpage屬性處理。struts提供了一個簡單的機制,這個機制使用相同的錯誤頁面機制處理jsp和servlet容器的未處理的異常。struts-config.xml文件例子略。
異常處理機制是建立在錯誤處理機制的基礎上的,因此也是使用消息資源提供本地消息信息。下面的圖示解釋了struts涉及到異常處理機制的類關系。
分派的角色
就像在RequestProcessor一節討論的一樣,request processor調用request handler的execute方法。任何request handler拋出的異常都被RequestProcessor捕獲然后在strutsconfig.xml中找到可能的
異常處理AppException
在request handlers中這是一個創建exceptions的基類。它封裝了異常發生原因屬性()和相關的ActionError對象。一個AppException的子類可以提供合適的構造函數,通過可選的屬性名和對象參數,用消息key正確初始化對象。消息key可以從和異常對應的ExceptionConfig對象中獲得。涉及到AppException的API是構造函數列表(可以被子類調用),AppException作為ExceptionHandler.execute的方法參數傳遞的。
轉換異常到ActionErrors中
RequestProcessor查詢ExceptionConfig的異常處理定義。RequestProcessor創建特定的ExceptionHandler并調用它的execute方法并傳AppException作為參數。org.apache.struts.action.ExceptionHandler的一個默認的異常處理是預先配置在ExceptionConfig對象中的。ExceptionHandler從AppException對象獲得ActionError對象,然后根據ErrorsTag創建ActionErrors對象使用。如果異常不是AppException類或其繼承類,ExceptionHandler會用定義的