在開發時,我們經常會遇到異常,通常可以分爲預期異常與運行時異常兩類,有一些異常是系統異常,而有一些異常卻是一些未知的錯誤,在SpringMVC中,可以通過異常處理器的配置對這兩種異常進行處理。
思路:在dao層、Service層、Controller層依次通過異常拋出(throws Ecception),最後通過springmvc的前端控制器交給異常處理器進行處理。
在SpringMVC中,我們可以通過全局異常處理器對異常進行統一的處理。
步驟如下:
自定義異常類
在開發中會出現很多的異常信息,那麼我們需要自己針對不同的異常類型進行定義,而後通過異常處理器獲取異常信息進行拋出顯示,此類繼承於Exception,則系統拋出的異常均可捕獲到,通過此類即可對系統產生的異常進行捕獲展示,如下(繼承於Exception):
package com.sw.exception;
/*
*@Author swxctx
*@time 2017年5月26日
*@Explain:自定義異常類,針對與其的異常在系統中拋出
*/
public class DataException extends Exception{
private static final long serialVersionUID = 1L;
public String messages;//異常信息
public DataException(String messages) {
super(messages);
this.messages = messages;
}
public String getMessages() {
return messages;
}
public void setMessages(String messages) {
this.messages = messages;
}
}
全局異常處理器
全局的異常處理器主要完成如下功能:
1、解析異常信息
2、判斷異常信息是否爲系統自帶的異常信息,若爲系統自定義異常信息,那麼通過自定義異常類直接取出異常信息進行顯示,如果不是則構造一個自定義異常類型。
在SpringMVC中提供了一個HandlerExceptionResolver,通過繼承該接口,我們就可以對異常信息進行相關的處理,代碼如下:
package com.sw.exception;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
/*
*@Author swxctx
*@time 2017年5月26日
*@Explain:全局異常處理器
*/
public class DataExceptionResolver implements HandlerExceptionResolver{
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception exception) {
DataException dataException = null;
//是否爲系統異常
if (exception instanceof DataException) {
//拋出系統異常
dataException = (DataException) exception;
}else{
//未知異常
dataException = new DataException("未知異常...");
}
//錯誤信息
String messages = dataException.getMessages();
ModelAndView modelAndView = new ModelAndView();
//錯誤信息傳到頁面
modelAndView.addObject("messages", messages);
//跳轉到錯誤頁面
modelAndView.setViewName("error");
return modelAndView;
}
}
如上代碼所示,通過繼承接口,首選對異常信息進行解析,判斷其是不是系統異常,如果是系統異常則通過之前定義的異常類獲取異常信息拋出到頁面,如果不是,則自定義了"未知異常..."拋出。
springmvc.xml配置
在配置文件中我們只需要引入全局異常處理器即可:
<!-- 全局異常處理器 -->
<bean class="com.sw.exception.DataExceptionResolver"></bean>
Jsp頁面異常信息顯示
系統發生異常後,需要通過頁面顯示錯誤,如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
${messages }
</body>
</html>
結語:通過上述的配置,在系統運行時若出現系統異常,則會通過異常類獲取異常信息顯示系統的異常信息,如果是未知異常,那麼則會在頁面顯示“未知異常”字樣,總之,將異常分爲兩類進行處理就可以了。