springmvc在處理請求過程中出現異常信息交由異常處理器進行處理,自定義異常處理器可以實現一個系統的異常處理邏輯。為了區別不同的異常通常根據異常類型自定義異常類,這裏我們創建一個自定義系統異常,如果controller、service、dao拋出此類異常說明是系統預期處理的異常信息。
阿新 • • 發佈:2018-12-31
ansi req -type this spring 進行 name ext code controller、service、dao拋出此類異常說明是系統預期處理的異常信息。
springmvc在處理請求過程中出現異常信息交由異常處理器進行處理,自定義異常處理器可以實現一個系統的異常處理邏輯。
1.1 異常處理思路
系統中異常包括兩類:預期異常和運行時異常RuntimeException,前者通過捕獲異常從而獲取異常信息,後者主要通過規範代碼開發、測試通過手段減少運行時異常的發生。
系統的dao、service、controller出現都通過throws Exception向上拋出,最後由springmvc前端控制器交由異常處理器進行異常處理,如下圖:
1.2 自定義異常類
為了區別不同的異常通常根據異常類型自定義異常類,這裏我們創建一個自定義系統異常,如果
package com.huida.exception; public class CustomException extends Exception{ private String message;; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; }//構造函數 public CustomException(String message){ super(message); this.message=message; } }
1.3 自定義異常處理器
package com.huida.exception; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerExceptionResolver;import org.springframework.web.servlet.ModelAndView; public class CustomeExceptionReslover implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object object, Exception e) { //obj 指定發生異常的地方:包名+類名+方法名(參數) CustomException customException; //如果拋出的是我們自定義的異常則直接轉化 if (e instanceof CustomException) { customException = (CustomException) e; } else { customException = new CustomException("系統錯誤,請聯系管理員"); } ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("error", customException.getMessage()); modelAndView.setViewName("error"); return modelAndView; } }
1.4 錯誤頁面
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@taglib uri="http://java.sun.com/jstl/core" prefix="c"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>錯誤頁面</title> </head> <body> 您的操作出現的異常是:${error} </body> </html>
1.5 異常處理器配置
在springmvc.xml中添加:
<!-- 異常處理器 --> <bean id="handlerExceptionResolver" class="com.huida.exception.CustomeExceptionReslover"> </bean>
1.6 異常測試
若商品信息為空,則拋出異常。
//註入Service @Autowired private ItemService itemService; @RequestMapping(value="/list" ,method=RequestMethod.GET) //RequestMethod.POST 指定這個方法只可以post方法訪問。 public ModelAndView itemList() throws Exception{ //調用業務層 List<Items> list=itemService.list(); if(null==null){ throw new CustomException("商品為空"); } ModelAndView modelAndView=new ModelAndView(); modelAndView.addObject("itemList",list); modelAndView.setViewName("itemList"); return modelAndView; }
我們在對list.action進行訪問的時候,由於我們使null==null,所以顯示頁面為:
在Service中拋出異常方法同上。
springmvc在處理請求過程中出現異常信息交由異常處理器進行處理,自定義異常處理器可以實現一個系統的異常處理邏輯。為了區別不同的異常通常根據異常類型自定義異常類,這裏我們創建一個自定義系統異常,如果controller、service、dao拋出此類異常說明是系統預期處理的異常信息。