中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用SpringMVC怎么實現一個全局異常處理器

發布時間:2020-11-26 17:35:18 來源:億速云 閱讀:163 作者:Leah 欄目:編程語言

本篇文章給大家分享的是有關使用SpringMVC怎么實現一個全局異常處理器,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

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

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

 /**
 * @Fields serialVersionUID : 
 */ 
 private static final long serialVersionUID = 1L;
 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
 * @version V1.0
 */
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 id="handlerExceptionResolver" class = "xxxx(包名).SimpleExceptionResolver"/>

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

之前注入的bean的id我隨便寫了一個名稱,然后spring解析的時候報錯了,

之后看了源碼的時候,才知道原來是這么回事

1SpringMVC 在org.springframework.web.servlet.DispatcherServlet類中聲明了
public static final String HANDLER_EXCEPTION_RESOLVER_BEAN_NAME = "handlerExceptionResolver";
private void initHandlerExceptionResolvers(ApplicationContext context) {
  this.handlerExceptionResolvers = null;

  if (this.detectAllHandlerExceptionResolvers) {
   // Find all HandlerExceptionResolvers in the ApplicationContext, including ancestor contexts.
   Map<String, HandlerExceptionResolver> matchingBeans = BeanFactoryUtils
     .beansOfTypeIncludingAncestors(context, HandlerExceptionResolver.class, true, false);
   if (!matchingBeans.isEmpty()) {
    this.handlerExceptionResolvers = new ArrayList<HandlerExceptionResolver>(matchingBeans.values());
    // We keep HandlerExceptionResolvers in sorted order.
    OrderComparator.sort(this.handlerExceptionResolvers);
   }
  }
  else {
   try {
    HandlerExceptionResolver her =
      context.getBean(HANDLER_EXCEPTION_RESOLVER_BEAN_NAME, HandlerExceptionResolver.class);
    this.handlerExceptionResolvers = Collections.singletonList(her);
   }
   catch (NoSuchBeanDefinitionException ex) {
    // Ignore, no HandlerExceptionResolver is fine too.
   }
  }

看完這段代碼的同學應該就知道為什么把bean 的id 設置成handlerExceptionResolver了吧

HandlerExceptionResolver her =context.getBean(HANDLER_EXCEPTION_RESOLVER_BEAN_NAME, HandlerExceptionResolver.class);

所以說,全局異常處理器的bean的id不能隨便的設置。

以上就是使用SpringMVC怎么實現一個全局異常處理器,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

财经| 内黄县| 桐乡市| 游戏| 宁城县| 大庆市| 九江县| 新乡市| 成都市| 曲阜市| 丰都县| 靖安县| 永修县| 长岭县| 尚志市| 威远县| 滕州市| 桃园市| 郸城县| 河北区| 江川县| 黎城县| 濮阳市| 蓬溪县| 哈尔滨市| 即墨市| 长葛市| 连山| 岳普湖县| 海门市| 蓬溪县| 华容县| 两当县| 卢龙县| 永宁县| 芷江| 尖扎县| 安龙县| 双峰县| 韶山市| 宝清县|