1. 程式人生 > >淘淘商城39-springmvc配置全域性異常處理

淘淘商城39-springmvc配置全域性異常處理

1.處理思路

專案執行過程中肯定會出現一些問題,當出現異常的時候,我們往往在Controller層捕獲並處理了,但這樣做不利於我們統一管理,所以需要一個前端控制器對異常進行統一處理。

全域性異常處理器中的處理邏輯:

捕獲整個系統中發生的異常。

  1. 異常寫入日誌檔案
  2. 及時通知開發人員。發郵件、簡訊。
  3. 展示一個友好的錯誤頁面,例如:您的網路故障,請重試。

2.建立全域性異常處理器

package com.taotao.search.exception;

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

public class GlobalExceptionReslover implements HandlerExceptionResolver {

	Logger logger = LoggerFactory.getLogger(GlobalExceptionReslover.class);
	
	@Override
	public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
			Exception ex) {
		//寫日誌檔案
		logger.error("系統發生異常", ex);
		//發郵件、發簡訊
		//Jmail:可以查詢相關的資料
		//需要在購買簡訊。呼叫第三方介面即可。
		//展示錯誤頁面
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.addObject("message", "系統發生異常,請稍後重試");
		modelAndView.setViewName("error/exception");
		return modelAndView;
	}

}

3.配置log4j

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

4.配置springmvc.xml

<!-- 全域性異常處理 -->
<bean class="com.taotao.search.exception.GlobalExceptionReslover"></bean>

5.測試訪問

在controller新增一個異常

會被全域性異常處理器攔截

在taotao-search-web專案會出現一個logs資料夾,下面有server.log日誌檔案