最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于SpringMVC的全局異常處理器介紹

 更新時間:2017年07月19日 10:45:11   投稿:jingxian  
下面小編就為大家?guī)硪黄赟pringMVC的全局異常處理器介紹。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

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

在企業(yè)開發(fā)中,各種的Runtime異??赡軙屛覀儽罎?,但是還有一部分異常在此之外,因此我們就要捕獲它,然后進行操作提示(將錯誤提示返回到ModelAndView)

下來呢,我貼一部分代碼

首先呢,創(chuàng)建一個自定義的異常類

/** 
 * @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;
 }
}

創(chuàng)建一個全局異常處理器的類,讓它實現(xiàn)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中,最后轉至頁面,當然嚴謹一點的,會將異常信息添加到數(shù)據(jù)庫中,方便查看

由于本文章只是一個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的全局異常處理器介紹就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • MybatisPlusInterceptor依賴變紅如何解決,無法識別問題

    MybatisPlusInterceptor依賴變紅如何解決,無法識別問題

    這篇文章主要介紹了MybatisPlusInterceptor依賴變紅如何解決,無法識別問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Spring 加載多份配置文件的問題及解決方案

    Spring 加載多份配置文件的問題及解決方案

    在Spring項目中,有時候需要加載多份配置文件以簡化復雜的配置管理,解決這一問題的方法是使用spring.config.import屬性,通過這種方式,可以在主配置文件中指定額外的配置文件路徑,支持文件、classpath或URL形式的路徑,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • Java中避免過多if-else的幾種方法

    Java中避免過多if-else的幾種方法

    這篇文章主要介紹了Java中避免過多if-else的幾種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Java基于socket服務實現(xiàn)UDP協(xié)議的方法

    Java基于socket服務實現(xiàn)UDP協(xié)議的方法

    這篇文章主要介紹了Java基于socket服務實現(xiàn)UDP協(xié)議的方法,通過兩個簡單實例分析了java通過socket實現(xiàn)UDP發(fā)送與接收的技巧,需要的朋友可以參考下
    2015-05-05
  • 詳解JAVA中獲取文件MD5值的四種方法

    詳解JAVA中獲取文件MD5值的四種方法

    這篇文章主要介紹了JAVA中獲取文件MD5值的四種方法,獲取文件MD5值主要分為三個步驟,第一步獲取文件的byte信息,第二步通過MessageDigest類進行MD5加密,第三步轉換成16進制的MD5碼值,需要的朋友可以參考下
    2022-08-08
  • Mybatis中 XML配置詳解

    Mybatis中 XML配置詳解

    這篇文章主要介紹了Mybatis中 XML配置詳解的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-01-01
  • vue2向springboot傳值接收不到的解決方法

    vue2向springboot傳值接收不到的解決方法

    本文主要介紹了vue2向springboot傳值接收不到的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • 利用java反射機制實現(xiàn)自動調用類的簡單方法

    利用java反射機制實現(xiàn)自動調用類的簡單方法

    下面小編就為大家?guī)硪黄胘ava反射機制實現(xiàn)自動調用類的簡單方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • SpringBoot內置Tomcat啟動方式

    SpringBoot內置Tomcat啟動方式

    Spring Boot通過啟動類上的@EnableAutoConfiguration注解,自動生成并加載ServletWebServerFactoryAutoConfiguration類,該類通過@Import注解導入TomcatServletWebServerFactory類,該類在getWebServer()方法中創(chuàng)建并啟動TomcatServletWebServer對象
    2024-12-12
  • Java實現(xiàn)“年-月-日 上午/下午時:分:秒”的簡單代碼

    Java實現(xiàn)“年-月-日 上午/下午時:分:秒”的簡單代碼

    當前的日期輸出的方法有很多,本文為大家介紹下在java中是如何實現(xiàn)“年-月-日 上午/下午時:分:秒”,感興趣的朋友不妨參考下
    2015-08-08

最新評論

迁安市| 新昌县| 吉隆县| 绥宁县| 奉新县| 庐江县| 乐山市| 和田县| 东乡| 英吉沙县| 乌兰县| 云南省| 青海省| 酒泉市| 伽师县| 嘉荫县| 云南省| 连山| 康乐县| 三明市| 济南市| 蓝山县| 凤凰县| 黄龙县| 瓦房店市| 罗甸县| 鄂伦春自治旗| 华宁县| 新源县| 保康县| 淮阳县| 迁安市| 晋宁县| 潞西市| 谷城县| 宁远县| 大英县| 洛南县| 介休市| 昆明市| 吴桥县|