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)访问:

  • 相关阅读:
    ADF中遍历VO中的行数据(Iterator)
    程序中实现两个DataTable的Left Join效果(修改了,网上第二个DataTable为空,所处的异常)
    ArcGIS api for javascript——鼠标悬停时显示信息窗口
    ArcGIS api for javascript——查询,然后单击显示信息窗口
    ArcGIS api for javascript——查询,立刻打开信息窗口
    ArcGIS api for javascript——显示多个查询结果
    ArcGIS api for javascript——用图表显示查询结果
    ArcGIS api for javascript——查询没有地图的数据
    ArcGIS api for javascript——用第二个服务的范围设置地图范围
    ArcGIS api for javascript——显示地图属性
  • 原文地址:https://www.cnblogs.com/jlustone/p/7515478.html
Copyright © 2011-2022 走看看