1.異常處理的思路html
系統中異常包括兩類:預期異常和運行時異常 RuntimeException,前者經過捕獲異常從而獲取異常信息,
後者主要經過規範代碼開發、測試經過手段減小運行時異常的發生。
系統的 dao、 service、 controller 出現都經過 throws Exception 向上拋出,最後由 springmvc 前端
控制器交由異常處理器進行異常處理,最終返回一個比較友好的錯誤提示頁面
頁面前端
index.jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <body> <h2>異常處理</h2> <a href="user/testException">測試異常處理</a> </body> </html> success.jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h3>跳轉成功</h3> </body> </html> 控制器 @Controller @RequestMapping("/user") public class UserController { @RequestMapping("testException") public String testException() throws Exception{ System.out.println("run testException()..."); //模擬異常 int a = 10/0; return "success"; } }
沒有作異常處理,異常會一步一步往上拋,到了瀏覽器就會出現不友好的頁面,頁面直接顯示錯誤java
想要解決,上面說到,controller向上拋異常給前端控制器沒有問題,這裏就須要寫一個異常處理器組件,而且配置好spring
三個步驟瀏覽器
1.編寫異常類(作提示信息)mvc
public class MyException extends Exception{ private String message; public MyException(String message) { this.message = message; } public void setMessage(String message) { this.message = message; } @Override public String getMessage() { return message; } }
2.編寫異常處理類app
public class MyExceptionResolver implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) { e.printStackTrace(); MyException myException = null; //若是拋出的是自定義異常,則直接轉換 if(e instanceof MyException){ myException = (MyException) e; }else{ //若是不是,則從新構造一個自定義異常 myException = new MyException("系統正在維護..."); } ModelAndView mv = new ModelAndView(); mv.addObject("errorMsg", myException.getMessage()); mv.setViewName("error"); return mv; } }
3.配置異常處理器,在springmvc.xml中配置jsp
<!--配置自定義異常處理器--> <bean class="com.cong.exception.MyExceptionResolver" id="myExceptionResolver"></bean>
修改一下控制器ide
@Controller @RequestMapping("/user") public class UserController { @RequestMapping("testException") public String testException() throws MyException{ System.out.println("run testException()..."); //模擬異常 try { int a = 10/0; }catch (Exception e){ //sprint exception message e.printStackTrace(); //拋出異常 throw new MyException("出現自定義異常..."); } return "success"; } }
錯誤提示頁面測試
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <html> <head> <title>錯誤頁面</title> </head> <body> <h3>執行出錯</h3> ${errorMsg} </body> </html>
結果