异常处理

异常处理概述

  • 异常包括编译时异常和运行时异常,前者通过捕获异常而获取异常信息,后者主要通过规范代码开发,测试等手段减少运行时异常的发生
  • 在开发中不管,dao层,service层,Controller层都有可能抛出异常
  • 在springmvc中,能将所有类型的异常处理从各处理过程解耦出来,既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护

异常处理思路

这里写图片描述
- 系统的dao、service、controller出现异常都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理
- springmvc提供全局异常处理器(==一个系统只有一个异常处理器==)进行统一异常处理

springMvc自带的简单异常处理器

  • springmvc中自带了一个异常处理器叫SimpleMappingExceptionResolver,该处理器实现了==HandlerExceptionResolver 接口==,全局异常处理器都需要实现该接口
  • 使用这个异常处理首先需要在springmvc的配置文件中配置这里写图片描述
<!-- springmvc提供的简单异常处理器 -->
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
     <!-- 定义默认的异常处理页面 -->
    <property name="defaultErrorView" value="/WEB-INF/jsp/error.jsp"/>
    <!-- 定义异常处理页面用来获取异常信息的变量名,也可不定义,默认名为exception --> 
    <property name="exceptionAttribute" value="ex"/>
    <!-- 定义需要特殊处理的异常,这是重要点 --> 
    <property name="exceptionMappings">
        <props>
            <!-- 可以定义多个特殊异常处理类 -->
            <prop key="com.td.exception.UserException">/WEB-INF/jsp/error.jsp</prop>
            <prop key="com.td.exception.CustomerException">/WEB-INF/jsp/error1.jsp</prop>
        </props>
        <!-- 还可以定义其他的自定义异常 -->
    </property>
</bean>
  • 根据上面的配置,有默认的处理页面,如果要满足我们的需求,需要自定义特殊的异常处理类这里写图片描述
    • 定义异常类型需要继承Exception
  • 根据需要抛出异常这里写图片描述
  • ==总结==:使用上面的SimpleMappingExceptionResolver进行异常处理,具有继承简单,有良好的扩展性(可以自定义特殊异常处理类,异常显示页面),对已经写好的代码没有入侵性(比如:给 代码添加注解),但是这种方式仅仅能获取到异常信息,如果需要获取异常信息之外的是不可能的

自定义全局异常处理器

  • 全局异常处理器处理思路:
    • 解析出异常类型
    • 如果是系统自定义的异常类型,直接取出异常信息,在错误页面显示
    • 如果该异常类型不是系统自定义的异常,构造一个自定义的异常类型
  • springmvc提供一个HandlerExceptionResolver接口,自定义全局异常处理器必须要实现这个接口这里写图片描述
  • 在springmvc的配置文件中,配置这个自定义的全局异常处理器这里写图片描述
  • 还是访问上面的Controller这里写图片描述
  • 结果:当抛出的是全局异常处理器中自定的异常的时候,会跳转到错误页面,携带错误的信息,如果不是那么重新构造了一个异常,还是跳转到同一个错误页面,但是错误信息是:未知错误,如果没有异常,正常往下执行。
  • ==总结==:可以看出在自定义的异常处理器中能获取导致出现异常的对象,有利于提供更详细的异常处理信息,建议使用这种

@ExceptionHandler注解实现异常处理

  • 增加BaseController类,并在类中使用@ExceptionHandler注解声明异常处理这里写图片描述
  • 所有需要异常处理的controller要继承BaseController,这里写图片描述
  • ==总结==:这种方式不需要在springmvc配置文件中配置,但是这种方式对代码有入侵性,需要继承BaseController,在异常处理的时候,不能获取除了异常以外的数据

未能捕获的异常的处理

  • 对于一些没能捕获的异常,建议在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>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值