1. 程式人生 > >SpringMVC全域性異常處理

SpringMVC全域性異常處理

當使用ssm框架構建系統時,可以構建一個全域性異常處理器,它是SpingMVC定義的一個異常處理器,一個系統中只能配置一個。

使用方法: 自定義一個異常處理類,需要實現一個介面HandlerExceptionResolver,並實現裡面的resolveException方法,最後,需要在spingMVC配置檔案中對這個異常處理類進行配置,將這個類載入到spring容器中。

在編碼過程中,如果dao層出現了異常,可以直接拋向service,再從service層拋往controller層,在controller層出現異常之後,程式會自動進入到異常處理類裡面的resolveException方法,在這個方法中,可以進行相關的處理,如:將錯誤資訊使用log4j輸出到日誌檔案,跳轉到一個有好的異常頁面等。

自定義異常類:

/**
 * 全域性異常處理器
 * 
 * @author Administrator
 */
public class GlobalExceptionReslove implements HandlerExceptionResolver {

	//獲取log4j的物件
	private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionReslove.class);
	
	@Override
	public ModelAndView resolveException(HttpServletRequest request,
			HttpServletResponse response, Object object, Exception ex) {
		
		//控制檯輸出錯誤資訊
		ex.printStackTrace();
		
		//寫入日誌檔案
		logger.error("系統發生異常", ex);
		
		//這裡可以將異常資訊傳送郵件或者傳送簡訊給相關處理人
		
		//展示友好的錯誤頁面
		ModelAndView mv = new ModelAndView();
		mv.addObject("message", "系統發生異常,請稍後重試...");
		mv.setViewName("error/exception");
		
		return mv;
	}
}

SpringMVC配置檔案的配置:

<!-- 配置全域性異常處理器 -->
<bean class="cn.dss.exception.GlobalExceptionReslove"/>

這裡使用了log4j來對日誌進行處理,它的使用方法時: 1.需要在src/main/resources下面建立一個log4j.properties檔案,一定要是在這個目錄下,使用這個檔名,這樣log4j能自動載入這個配置檔案 2.log4j.properties的內容

log4j.rootLogger=INFO,A3,STDOUT

log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.ConversionPattern=[%p] [%l] %10.10c - %m%n

log4j.appender.A3=org.apache.log4j.RollingFileAppender
log4j.appender.A3.file=logs/server.log
log4j.appender.A3.MaxFileSize=1024KB
log4j.appender.A3.MaxBackupIndex=10
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=\n\n[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS} method\:%l%n%m%n

3.加入相關的依賴

<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-log4j12</artifactId>
	<version>1.6.4</version>
</dependency>