zoukankan      html  css  js  c++  java
  • 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)访问:

  • 相关阅读:
    js 数组去重的几种方式及原理
    js replace
    gulp的使用方法
    gulp 安装部署
    gulp 的5个方法
    fiddler 监听手机的http请求
    vsCood
    browser-sync使用方法
    browser-sync 安装
    npm 移除第三方包
  • 原文地址:https://www.cnblogs.com/jlustone/p/7515478.html
Copyright © 2011-2022 走看看