關於SpringMVC的全局異常處理器


近幾天又溫習了一下SpringMVC的運行機制以及原理

我理解的springmvc,是設計模式MVC中C層,也就是Controller(控制)層,常用的注解有@Controller、@RequestMapping、@Autowared、@Component,今天呢,我所要寫的是SpringMVC的全局異常處理器,關聯的接口有HandlerExceptionResolver(Eclipse用戶可以按Ctrl+Shift+T進行搜索該接口),什么是全局異常處理器?為什么要用它呢?

在企業開發中,各種的Runtime異常可能會讓我們崩潰,但是還有一部分異常在此之外,因此我們就要捕獲它,然后進行操作提示(將錯誤提示返回到ModelAndView)

下來呢,我貼一部分代碼

首先呢,創建一個自定義的異常類

/**  
* @Title: ExceptionCustom.java
* @Description: 本地異常
*
@author ChoviWu
*
@version V1.0
*/
public class ExceptionCustom extends Exception{

/**
* @Fields serialVersionUID :
*/ private String message;

/**
*
@return the message
*/
public String getMessage() {
return message;
}

/**
*
@param message the message to set
*/
public void setMessage(String message) {
this.message = message;
}

public ExceptionCustom() {
super();
// TODO Auto-generated constructor stub
}

public ExceptionCustom(String message) {
super(message);
this.message = message;
}
}

 

創建一個全局異常處理器的類,讓它實現HandlerExceptionResolver 接口。相信,基礎好一點的同學可以看出來我代碼的意思(注釋)

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

/**
* @Title: SimpleException.java
* @Description:全局異常處理器
*
@author ChoviWu*/
public class SimpleExceptionResolver implements HandlerExceptionResolver {

// 異常對象
ExceptionCustom exceptionCustom = null;

private Logger logger = Logger.getLogger(SimpleExceptionResolver.class
.getSimpleName());

/**
* 全局處理異常
*/
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
//轉化為自定義異常
exceptionCustom = (ExceptionCustom) ex;
//判斷是否是本地異常
if (ex instanceof ExceptionCustom) {
logger.info(ex.getMessage());
}
else {
…拋出錯誤

}
//獲取異常信息
String message = exceptionCustom.getMessage();
ModelAndView mv
= new ModelAndView();
//將異常返回到Model
mv.addObject("xx", message);
// 指向錯誤頁面
mv.setViewName("error");
return null;
}

}

解釋一下,在判斷一個異常是否是其他異常的時候,先看它是否屬於本地異常(Exception)的exceptionCustom ,如果是本地異常,則拋出本地異常信息

if (ex instanceof ExceptionCustom) {
logger.info(ex.getMessage());
} else {
…拋出未知錯誤
}

如果不是本地異常,則拋出未知異常

 

然后從異常里面獲取異常信息,將異常信息返回到MV中,最后轉至頁面,當然嚴謹一點的,會將異常信息添加到數據庫中,方便查看

由於本文章只是一個Demo,所以沒有考慮到很多因素

下來,說說配置文件

配置文件,先貼上代碼,然后再做解釋

<!-- 全局異常處理器 -->
<bean class = "xxxx(包名).SimpleExceptionResolver"/>

注意:首先,這個bean將配置在自己的web層.xml(spring-web.xml),當啟動tomcat,加載web.xml后需加載spring-web.xml

  由於本人之前沒有寫過類似的博客,所以某些內容可能不是很到位,讀者有自己的觀點可以提出來,大家一起討論

本作品聲明原創,內容可能不是很到位,請在評論區評論並提出自己的建議,博主看到會虛心聽取的。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: