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

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

 更新時(shí)間:2017年07月19日 10:45:11   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇基于SpringMVC的全局異常處理器介紹。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

近幾天又溫習(xí)了一下SpringMVC的運(yùn)行機(jī)制以及原理

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

在企業(yè)開(kāi)發(fā)中,各種的Runtime異??赡軙?huì)讓我們崩潰,但是還有一部分異常在此之外,因此我們就要捕獲它,然后進(jìn)行操作提示(將錯(cuò)誤提示返回到ModelAndView)

下來(lái)呢,我貼一部分代碼

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

/** 
 * @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)建一個(gè)全局異常處理器的類,讓它實(shí)現(xiàn)HandlerExceptionResolver 接口。相信,基礎(chǔ)好一點(diǎn)的同學(xué)可以看出來(lái)我代碼的意思(注釋)

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 {

 // 異常對(duì)象
 ExceptionCustom exceptionCustom = null;

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

 /**
  * 全局處理異常
  */
 public ModelAndView resolveException(HttpServletRequest request,
   HttpServletResponse response, Object handler, Exception ex) {
  //轉(zhuǎn)化為自定義異常
  exceptionCustom = (ExceptionCustom) ex;
  //判斷是否是本地異常
  if (ex instanceof ExceptionCustom) {
   logger.info(ex.getMessage());
  } else {
   …拋出錯(cuò)誤
  }
  //獲取異常信息
  String message = exceptionCustom.getMessage();
  ModelAndView mv = new ModelAndView();
  //將異常返回到Model
  mv.addObject("xx", message);
  // 指向錯(cuò)誤頁(yè)面
  mv.setViewName("error");
  return null;
 }

}

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

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

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

 

然后從異常里面獲取異常信息,將異常信息返回到MV中,最后轉(zhuǎn)至頁(yè)面,當(dāng)然嚴(yán)謹(jǐn)一點(diǎn)的,會(huì)將異常信息添加到數(shù)據(jù)庫(kù)中,方便查看

由于本文章只是一個(gè)Demo,所以沒(méi)有考慮到很多因素

下來(lái),說(shuō)說(shuō)配置文件

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

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

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

之前注入的bean的id我隨便寫(xiě)了一個(gè)名稱,然后spring解析的時(shí)候報(bào)錯(cuò)了,

之后看了源碼的時(shí)候,才知道原來(lái)是這么回事

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.
   }
  }

看完這段代碼的同學(xué)應(yīng)該就知道為什么把bean 的id 設(shè)置成handlerExceptionResolver了吧

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

所以說(shuō),全局異常處理器的bean的id不能隨便的設(shè)置。

以上這篇基于SpringMVC的全局異常處理器介紹就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MybatisPlusInterceptor依賴變紅如何解決,無(wú)法識(shí)別問(wèn)題

    MybatisPlusInterceptor依賴變紅如何解決,無(wú)法識(shí)別問(wèn)題

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

    Spring 加載多份配置文件的問(wèn)題及解決方案

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

    Java中避免過(guò)多if-else的幾種方法

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

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

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

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

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

    Mybatis中 XML配置詳解

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

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

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

    利用java反射機(jī)制實(shí)現(xiàn)自動(dòng)調(diào)用類的簡(jiǎn)單方法

    下面小編就為大家?guī)?lái)一篇利用java反射機(jī)制實(shí)現(xiàn)自動(dòng)調(diào)用類的簡(jiǎn)單方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • SpringBoot內(nèi)置Tomcat啟動(dòng)方式

    SpringBoot內(nèi)置Tomcat啟動(dòng)方式

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

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

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

最新評(píng)論

封开县| 庄河市| 玉屏| 通化市| 长治市| 宁陕县| 延长县| 西林县| 珲春市| 武隆县| 朝阳市| 兴安县| 饶阳县| 吉安县| 日喀则市| 年辖:市辖区| 郓城县| 白沙| 长岭县| 新兴县| 新宾| 敦化市| 濮阳县| 资兴市| 石阡县| 酒泉市| 西乌| 阳泉市| 苍南县| 永兴县| 凯里市| 巧家县| 英超| 基隆市| 吕梁市| 鄂尔多斯市| 惠水县| 罗甸县| 利川市| 霍邱县| 阿拉善右旗|