springMVC—异常处理

来源:互联网 发布:sql having用法例子 编辑:程序博客网 时间:2024/05/29 13:12

springMVC——异常处理 

        springMVC提供的异常处理主要有两种方式,一种是直接实现自己的HandlerExceptionResolver,另一种是使用注解的方式实现一个专门用于处理异常的Controller——ExceptionHandler。


        1、实现自己的HandlerExceptionResolver,HandlerExceptionResolver是一个接口,springMVC本身已经对其有了一个自身的实现——DefaultExceptionResolver,该解析器只是对其中的一些比较典型的异常进行了拦截处理。

        

    package handlerExceptionResolver;            import javax.servlet.http.HttpServletRequest;      import javax.servlet.http.HttpServletResponse;            import org.springframework.web.servlet.HandlerExceptionResolver;      import org.springframework.web.servlet.ModelAndView;            //全局异常处理器      public class handlerExceptionResolver implements HandlerExceptionResolver{                //系统抛出的异常          @Override          public ModelAndView resolveException(HttpServletRequest request,                  HttpServletResponse response, Object handler, Exception ex) {              //handler就是处理器适配器要执行的Handler对象(只有method)              //解析出异常类型。                            //如果该 异常类型是系统 自定义的异常,直接取出异常信息,在错误页面展示。              CustomException customException=null;              if(ex instanceof CustomException){                  customException=(CustomException)ex;                                }else{                  //如果该 异常类型不是系统 自定义的异常,构造一个自定义的异常类型(信息为“未知错误”)。                  customException=new CustomException("未知错误");              }                    //错误信息              String message=customException.getMessage();                            ModelAndView modelAndView=new ModelAndView();                            //将错误信息传到页面              modelAndView.addObject("message",message);                            //指向到错误界面              modelAndView.setViewName("error");                            return modelAndView;          }                 }  

         然后在项目的配置文件中添加:

     <bean id="exceptionResolver" class="所在包名.MyHandlerExceptionResolver"/>

        这样就完成了异常的捕捉和处理。


        2.我们介绍了第一种捕捉处理异常方式,但是第一种方式需要在配置文件中进行配置,有的时候我们会觉得配置文件内容太多太乱,那么我们就可以借助@ExceptionHandler注解来实现零配置的异常捕捉和处理。

        首先,在我们项目的包com.demo.web.controllers中为controller建立一个父类BaseController,内容如下:

        

package com.demo.web.controllers;import java.sql.SQLException;import javax.servlet.http.HttpServletRequest;import org.springframework.web.bind.annotation.ExceptionHandler;public abstract class BaseController {      @ExceptionHandler    public String exception(HttpServletRequest request, Exception e) {                  //添加自己的异常处理逻辑,如日志记录           request.setAttribute("exceptionMessage", e.getMessage());                    // 根据不同的异常类型进行不同处理        if(e instanceof SQLException)             return "testerror";           else            return "error";      }      }
          其次,修改项目中HelloWorldController让它继承于BaseController以便进行测试:

         

@Controllerpublic class HelloWorldController extends BaseController{    
//@AuthPassport@RequestMapping(value={"/index","/hello"})public ModelAndView index() throws SQLException{        throw new SQLException("数据库异常。");        /*ModelAndView modelAndView = new ModelAndView();      modelAndView.addObject("message", "Hello World!");      modelAndView.setViewName("index");      return modelAndView;*/}
}
      这样就完成了异常的捕捉和处理。








原创粉丝点击