springMVC—异常处理

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以便进行测试:

         

@Controller
public 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;*/
}
}       这样就完成了异常的捕捉和处理。








猜你喜欢

转载自blog.csdn.net/chaoyue1861/article/details/73692974