• springmvc 全局异常解决方案


    系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。

    系统的dao、service、controller出现都通过throwsException向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图:

    1.自定义异常类:

    package cn.itcast.ssm.exception;  
      
    public class CustomerException extends Exception{  
        private String message;//异常信息  
        public CustomerException(String message){  
            this.message=message;  
        }  
        public String getMessage() {  
            return message;  
        }  
        public void setMessage(String message) {  
            this.message = message;  
        }  
    }  

    2.定义一个全局异常处理器实现HandlerExceptionResolver接口

    思路:系统遇到异常,在程序中手动抛出,dao抛给service、service给controller、controller抛给前端控制器,前端控制器调用全局异常处理器。

    全局异常处理器:解析出异常类型,如果该异常类型是系统 自定义的异常,直接取出异常信息,在错误页面展示,如果该异常类型不是系统 自定义的异常,构造一个自定义的异常类型(信息为“未知错误”)

    package cn.itcast.ssm.exception;  
      
    import javax.servlet.http.HttpServletRequest;  
    import javax.servlet.http.HttpServletResponse;  
      
    import org.springframework.web.servlet.HandlerExceptionResolver;  
    import org.springframework.web.servlet.ModelAndView;  
      
    public class CustomerExceptionResolver implements HandlerExceptionResolver{  
        public ModelAndView resolveException(HttpServletRequest request,  
                HttpServletResponse response, Object handler, Exception ex) {  
              
    //      解析出异常类型  
    //      如果该 异常类型是系统 自定义的异常,直接取出异常信息,在错误页面展示  
    //      如果该 异常类型不是系统 自定义的异常,构造一个自定义的异常类型(信息为“未知错误”)  
            CustomerException customerException=null;  
            if(ex instanceof CustomerException){  
                customerException=(CustomerException)ex;  
            }else{  
                customerException=new CustomerException("未知错误!");  
            }  
            String message = customerException.getMessage();  
            ModelAndView modelAndView=new ModelAndView();  
            modelAndView.addObject("message", message);  
            modelAndView.setViewName("error");  
            return modelAndView;  
        }  
      
    }  

    如果出现错误就转发到错误页面error.jsp,直接在error.jsp使用EL表达式获取异常信息显示:${message} 

    3.在sprimgmvc.xml中定义全局异常处理器类(与普通的handler配置基本相同)

    <!-- 全局异常处理 -->  
    <bean class="cn.itcast.ssm.exception.CustomerExceptionResolver"></bean>  

    4.进行测试:对于修改页面抛出抛出异常信息:

    1).controller层抛出异常

    2).service层抛出异常信息 

    3)访问:

  • 相关阅读:
    Cocoa中对日期和时间的处理 NSDate
    Fragment(一)--Fragment用法常见问题
    Volley源码解析(三) 有缓存机制的情况走缓存请求的源码分析
    # Volley源码解析(二) 没有缓存的情况下直接走网络请求源码分析#
    Android笔记--Bitmap(三) 针对不用Android版本的位图管理
    Java 语言中一个字符占几个字节?
    编码格式
    Volley解析(一)--Volley的使用
    Android笔记--Bitmap(二)内存管理
    Android笔记--Bitmap
  • 原文地址:https://www.cnblogs.com/jlustone/p/7515478.html
Copyright © 2020-2023  润新知