Spring MVC异常处理

 

 

概述:

 

  在 Spring MVC 应用的开发中,不管是对底层数据库操作,还是业务层或控制层操作,都会不可避免地遇到各种可预知的、不可预知的异常需要处理。  


  如果每个过程都单独处理异常,那么系统的代码耦合度高,工作量大且不好统一,以后维护的工作量也很大。

  当用户访问网页的时候,不能让用户看的你的错误信息,我们一般就会将这些可能发生的异常提前添加好解决的方案,以免用户有不好的体验。


  如果能将所有类型的异常处理从各层中解耦出来,这样既保证了相关处理过程的功能单一,又实现了异常信息的统一处理和维护。
 


  Spring MVC 框架支持这样的实现。
Spring MVC 统一异常处理有以下 3 种方式:

      •   使用 Spring MVC 提供的简单异常处理器 SimpleMappingExceptionResolver。
      •   实现 Spring 的异常处理接口 HandlerExceptionResolver 自定义自己的异常处理器。
      •   使用 @ExceptionHandler 注解实现异常处理

 

第一种:Web.xml中设置异常相应页面

这种情况当发生异常的404或者500类型的异常就会跳转到事先准备好的页面

复制代码
 <error-page>
    <error-code>404</error-code>
<!-- (里面写你的页面所存放的路径)-->
    <location>/jsp/404.jsp</location>
  </error-page>
    <error-page>
        <error-code>404</error-code>
<!-- (里面写你的页面所存放的路径)-->
        <location>/jsp/500.jsp</location>
    </error-page>
复制代码

第二种:设置默认异常处理器

复制代码
<!--   默认异常处理器-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="defaultErrorView" value="500"/>          <!--默认跳转的视图-->
    <property name="exceptionAttribute" value="exx"/>     <!--将异常信息放入作用域中-->
    <property name="exceptionMappings">             
        <props>
            <prop key="自定义的异常类">需要跳转的页面</prop>      <!--异常类需要继承Execption重写两个构造方法-->
        </props>
    </property>
</bean>
复制代码

第三种:使用@ExceptionHandler进行处理异常

在一个Controller控制器中定义此方法,一旦此控制器中的其他方法出现异常,就会执行这个方法

复制代码
    @ExceptionHandler
    public ModelAndView ExceptionController(Exception ex){
        ModelAndView modelAndView=new ModelAndView("500");
        //保存异常信息到试图当中
        modelAndView.addObject("ex",ex);
        return modelAndView;
    }
复制代码

@ExceptionHandler方法其实也可以处理其他控制器的异常

  就是把上面的方法放到一个类中,在类的上面使用@ControllerAdvice注解来声明这个类是一个异常处理类

复制代码
package com.yjc.controller;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;

@ControllerAdvice
public class ThrowsControllerAdvice {
 @ExceptionHandler
    public ModelAndView ExceptionController(Exception ex){
        ModelAndView modelAndView=new ModelAndView("500");
        //保存异常信息到试图当中
        modelAndView.addObject("ex",ex);
        return modelAndView;
    }

}
复制代码
 
 
posted @ 2019-11-11 17:05  败给时光  阅读(137)  评论(0编辑  收藏  举报