• 使用springMVC进行统一的异常处理


    无论做什么项目,进行异常处理都是非常有必要的,而且你不能把一些只有程序员才能看懂的错误代码抛给用户去看,所以这时候进行统一的异常处理,展现一个比较友好的错误页面就显得很有必要了。跟其他MVC框架一样,springMVC也有自己的异常处理机制。
    springMVC提供的异常处理主要有两种方式,一种是直接实现自己的HandlerExceptionResolver,另一种是使用注解的方式实现一个专门用于处理异常的Controller——ExceptionHandler。

     

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

    Java代码  收藏代码
    1. import javax.servlet.http.HttpServletRequest;  
    2. import javax.servlet.http.HttpServletResponse;  
    3.   
    4. import org.springframework.web.servlet.HandlerExceptionResolver;  
    5. import org.springframework.web.servlet.ModelAndView;  
    6.   
    7. public class ExceptionHandler implements HandlerExceptionResolver {  
    8.   
    9.     @Override  
    10.     public ModelAndView resolveException(HttpServletRequest request,  
    11.             HttpServletResponse response, Object handler, Exception ex) {  
    12.         // TODO Auto-generated method stub  
    13.         return new ModelAndView("exception");  
    14.     }  
    15.   
    16. }  

     上述的resolveException的第4个参数表示对哪种类型的异常进行处理,如果想同时对多种异常进行处理,可以把它换成一个异常数组。

    定义了这样一个异常处理器之后就要在applicationContext中定义这样一个bean对象,如:

    Xml代码  收藏代码
    1. <bean id="exceptionResolver" class="com.tiantian.xxx.web.handler.ExceptionHandler"/>  
     

    2、使用@ExceptionHandler进行处理

    使用@ExceptionHandler进行处理有一个不好的地方是进行异常处理的方法必须与出错的方法在同一个Controller里面

    如:

    Java代码  收藏代码
    1. import org.springframework.stereotype.Controller;  
    2. import org.springframework.web.bind.annotation.ExceptionHandler;  
    3. import org.springframework.web.bind.annotation.RequestMapping;  
    4.   
    5. import com.tiantian.blog.web.servlet.MyException;  
    6.   
    7. @Controller  
    8. public class GlobalController {  
    9.   
    10.       
    11.     /** 
    12.      * 用于处理异常的 
    13.      * @return 
    14.      */  
    15.     @ExceptionHandler({MyException.class})  
    16.     public String exception(MyException e) {  
    17.         System.out.println(e.getMessage());  
    18.         e.printStackTrace();  
    19.         return "exception";  
    20.     }  
    21.       
    22.     @RequestMapping("test")  
    23.     public void test() {  
    24.         throw new MyException("出错了!");  
    25.     }  
    26.       
    27.       
    28. }  

     这里在页面上访问test方法的时候就会报错,而拥有该test方法的Controller又拥有一个处理该异常的方法,这个时候处理异常的方法就会被调用

     

     

     

    当发生异常的时候,上述两种方式都使用了的时候,第一种方式会将第二种方式覆盖

  • 相关阅读:
    【打印】windows打印控件,Lodop.js介绍
    【MySQL】MySQL查询数据库各表的行数
    【MySQL】MySQL中查询出数据表中存在重复的值list
    【php】php5.0以上,instanceof 用法
    日期转换:Cannot format given Object as a Date (SimpleDateFormat的parse和format)
    Groovy 正则表达式 匹配点号
    什么是开发框架
    SoapUI 增大使用内存
    Groovy API link
    Groovy 跳出each循环
  • 原文地址:https://www.cnblogs.com/chenying99/p/2437198.html
Copyright © 2020-2023  润新知