国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

spring MVC 全局的異常處理

2019-11-14 20:51:34
字體:
來源:轉載
供稿:網友
sPRing MVC 全局的異常處理

1、使用SimpleMappingExceptionResolver實現異常處理

  在Spring的配置文件applicationContext.xml中增加以下內容:

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">      <!-- 定義默認的異常處理頁面,當該異常類型的注冊時使用 -->      <property name="defaultErrorView" value="error"></property>      <!-- 定義異常處理頁面用來獲取異常信息的變量名,默認名為exception -->      <property name="exceptionAttribute" value="ex"></property>      <!-- 定義需要特殊處理的異常,用類名或完全路徑名作為key,異常也頁名作為值 -->      <property name="exceptionMappings">          <props>              <prop key="cn.basttg.core.exception.BusinessException">error-business</prop>              <prop key="cn.basttg.core.exception.ParameterException">error-parameter</prop>                <!-- 這里還可以繼續擴展對不同異常類型的處理 -->          </props>      </property>  </bean> 

注:使用SimpleMappingExceptionResolver進行異常處理,具有集成簡單、有良好的擴展性、對已有代碼沒有入侵性等優點,但該方法僅能獲取到異常信息,若在出現異常時,對需要獲取除異常以外的數據的情況不適用。

2、 實現HandlerExceptionResolver 接口自定義異常處理器

  增加HandlerExceptionResolver 接口的實現類MyExceptionHandler,代碼如下:

public class MyExceptionHandler implements HandlerExceptionResolver {        public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,              Exception ex) {          Map<String, Object> model = new HashMap<String, Object>();          model.put("ex", ex);                    // 根據不同錯誤轉向不同頁面          if(ex instanceof BusinessException) {              return new ModelAndView("error-business", model);          }else if(ex instanceof ParameterException) {              return new ModelAndView("error-parameter", model);          } else {              return new ModelAndView("error", model);          }      }  }  

在Spring的配置文件applicationContext.xml中增加以下內容:

<bean id="exceptionHandler" class="cn.basttg.core.exception.MyExceptionHandler"/>  

注:使用實現HandlerExceptionResolver接口的異常處理器進行異常處理,具有集成簡單、有良好的擴展性、對已有代碼沒有入侵性等優點,同時,在異常處理時能獲取導致出現異常的對象,有利于提供更詳細的異常處理信息。

3 、使用@ExceptionHandler注解實現異常處理

  增加BaseController類,并在類中使用@ExceptionHandler注解聲明異常處理,代碼如下:

public class BaseController {      /** 基于@ExceptionHandler異常處理 */      @ExceptionHandler      public String exp(HttpServletRequest request, Exception ex) {                    request.setAttribute("ex", ex);                    // 根據不同錯誤轉向不同頁面          if(ex instanceof BusinessException) {              return "error-business";          }else if(ex instanceof ParameterException) {              return "error-parameter";          } else {              return "error";          }      }  }  

修改代碼,使所有需要異常處理的Controller都繼承該類,

注:使用@ExceptionHandler注解實現異常處理,具有集成簡單、有擴展性好(只需要將要異常處理的Controller類繼承于BaseController即可)、不需要附加Spring配置等優點,但該方法對已有代碼存在入侵性(需要修改已有代碼,使相關類繼承于BaseController),在異常處理時不能獲取除異常以外的數據。

4、未捕獲異常的處理

  修改web.xml文件,增加以下內容:

<!-- 出錯頁面定義 -->  <error-page>      <exception-type>java.lang.Throwable</exception-type>      <location>/500.jsp</location>  </error-page>  <error-page>      <error-code>500</error-code>      <location>/500.jsp</location>  </error-page>  <error-page>      <error-code>404</error-code>      <location>/404.jsp</location>  </error-page>    <!-- 這里可繼續增加服務器錯誤號的處理及對應顯示的頁面 --> 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 襄樊市| 宁陕县| 象州县| 屏南县| 万源市| 图片| 深水埗区| 四会市| 云安县| 海淀区| 甘谷县| 辽阳县| 临汾市| 中阳县| 松滋市| 霞浦县| 绥宁县| 台中市| 罗城| 禹州市| 平邑县| 灵山县| 嘉禾县| 海丰县| 湘阴县| 汤阴县| 鄂尔多斯市| 开封县| 永登县| 正安县| 巴林左旗| 耒阳市| 潍坊市| 江安县| 长阳| 永年县| 方正县| 乌鲁木齐县| 藁城市| 安康市| 大足县|