Struts中的異常處理機制
Struts中的異常處理,必須利用Struts內置的機制(只針對action的execute)和標準的servlet機制相結合,才能完美的實現。
1. 首先通過在配置文件中定義全局異常處理或者特定於action的異常處理句柄
2. 然後在process中執行action的excute時遇到異常就讀取其異常處理配置,並生成相應的ExceptionConfig對象。若ExceptionConfig爲null(即此action沒有配置異常處理),則直接拋出IoException或者ServletException到總控的dopost和doget,由容器負責處理(此時將會用到在web.xml中定義的異常處理對象)。
3. 根據ExceptionConfig生成ExceptionHandler,然後執行其execute方法。在execute中將產生actionerrors(包含由配置生成的actionerror列表)對象,並放到相應的scope(默認爲request)中(以Globals.EXCEPTION_KEY爲健),然後轉到錯誤處理葉面,以<html:error>顯示。
4. 在form bean 的驗證方法中產生的action errors也是以Globals.EXCEPTION_KEY爲健,但是存在request中。
5. struts的異常處理利用了其內置的資源文件和國際化機制。由於生成的actionerror是配置exception時的key和exception.getMessage()鍵值對,所以必須在message中放入足夠的信息,我們無法在發生異常時,得到異常本身的引用,這或許是struts 的不足之處!
6. 在擴展struts總控時發現process()方法拋出的是IOException, ServletException,這不是明擺着不讓我們擴展此方法嗎?擴展時有新的異常難道都得包裝成IOException, ServletException嗎?不明白作者的深意?