系統中異常包含兩種:預期異常和運行時異常RuntimeException,前者經過捕獲異常從而獲取異常信息,後者主要經過規範化代碼開發、測試手段減小運行時異常的發生。前端
系統的dao、service、controller出現異常都經過throws Exception向上拋出,最後由SpringMVC前端控制器交由異常異常處理器ExceptionResoler進行異常處理。spring
SpringMVC提供全局異常處理器(一個系統只有一個異常處理器)進行統一異常處理。mvc
自定義異常類:測試
對不一樣的異常類型定義異常類。集成Exception。自定義異常類,針對預期的異常,須要在程序中拋出此類的異常。this
public class SelfException extends Exception{ public String message; public SelfException(String message){ super(message); this.message=message; } public String getMessage(){ return message; } public void setMessage(String message){ this.message=message; } }
全局異常處理器:編碼
全局異常處理器處理思路:解析異常類型。
若該異常類是系統自定義的異常,直接取出異常信息,在錯誤頁面展現。
若該異常類型不是系統自定義的異常,則構造一個自定義的異常類型(信息爲「未知錯誤」)spa
編碼:SpringMVC提供了一個HandlerExceptionResolver接口。code
public class SelfExceptionResolver implements HandlerExceptionResolver{ public ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex){ //handler就是處理器適配器要執行handler對象(只有method) String message=null; if(ex instanceof SelfException){ message=((SelfException)ex).getMessage(); }else{ message="未知錯誤"; } //或 SelfException self=null; if(ex instanceof SelfException){ self=(SelfException)ex; }else{ self=new SelfException("未知錯誤"); } String message=self.getMessage(); ModelAndView mav=new ModelAndView(); //將錯誤信息傳到頁面 mav.addObject("msg",message); //執行錯誤頁面 mav.setViewName("error"); return mav; } }
在springmvc.xml中配置全局異常處理器。xml
<!-- 全局異常處理器 只要實現HandlerExceptionResolver接口就是全局異常處理器 --> <bean class="cn.ccir.test.exception.SelfExceptionResolver"></bean>