springMvc异常处理方式

本文详细介绍了SpringMVC中的四种异常处理方式,包括使用SimpleMappingExceptionResolver、实现HandlerExceptionResolver接口、使用@ExceptionHandler注解及未捕获异常的处理。每种方式的优缺点及应用场景均有阐述。
摘要由CSDN通过智能技术生成

springMvc三种全局异常处理方式

一、使用 Spring MVC 提供的简单异常处理器 SimpleMappingExceptionResolver

优缺点:使用 SimpleMappingExceptionResolver 进行异常处理,具有集成简单、有 良好的扩展性、对已有代码没有入侵性等优点,但该方法仅能获取到异常信息, 若在出现异常时,对需要获取除异常以外的数据的情况不适用。

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <!--默认异常视图-->
        <property name="defaultErrorView" value="error"></property>
        <!--前台信息-->
        <property name="exceptionAttribute" value="ex"></property>
        <property name="exceptionMappings">
            <props>
                <prop key="com.mage.exception.TestException">error1</prop>
                <prop key=""></prop>
            </props>
        </property>
        
</bean>

二、实现 Spring 的异常处理接口 HandlerExceptionResolver 自定义自己的异常处理器

使用实现 HandlerExceptionResolver 接口的异常处理器进行异常处理,具 有集成简单、有良好的扩展性、对已有代码没有入侵性等优点,同时,在异常处理时能获取导致出现异常的对象,有利于提供更详细的异常处理信息。

@Component
public class GlobalException implements HandlerExceptionResolver{
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception ex) {
        ModelAndView modelAndView=new ModelAndView();
        modelAndView.setViewName("error");
        modelAndView.addObject("ex","我是默认异常");
        if(ex instanceof TestException){
            TestException testException= (TestException) ex;
            modelAndView.setViewName("error1");
            modelAndView.addObject("ex",testException.getMsg());
        }
    }
}

三、使用@ExceptionHandler 注解实现异常处理

使用@ExceptionHandler 注解实现异常处理,具有集成简单、有扩展性好(只 需要将要异常处理的 Controller 类继承于 BaseController 即可)、不需要附加 Spring 配置等优点,但该方法对已有代码存在入侵性(需要修改已有代码,使相关类继承于 BaseController),在异常处理时不能获取除异常以外的数据。

public class BaseController {
  @ExceptionHandler
  public String exc(HttpServletRequest request,HttpServletResponse
  response,Exception ex){
    request.setAttribute("ex", ex);
     if(ex instanceof ParamsException){
      return "error_param";
   }
    if(ex instanceof BusinessException){
      return "error_business";
   }
    return "error";
 }
}

四、未捕获异常的处理

对于 Unchecked Exception 而言,由于代码不强制捕获,往往被忽略,如果运行期产生了Unchecked Exception,而代码中又没有进行相应的捕获和处理,则我们可能不得不面对尴尬的 404、 500……等服务器内部错误提示页面。 我们需要一个全面而有效的异常处理机制。目前大多数服务器也都支持在 Web.xml 中通过(Websphere/Weblogic)或者(Tomcat)节点配置特定异常情况的显示页面。修改 web.xml 文件,增加以下内容:

 <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、付费专栏及课程。

余额充值