zoukankan      html  css  js  c++  java
  • springMVC学习(六)一异常处理

    统一异常处理

    Java中的异常可以分为两类

    • 编译时期异常

    • 运行期异常

    对于运行期异常我们是无法掌控的,只能通过代码质量、在系统测试时详细测试等排除运行时异常,而对于编译时期的异常,我们可以在代码手动处理异常可以try/catch捕获,可以向上抛出。

    前端控制器DispatcherServlet在进行HandlerMapping、调用HandlerAdapter执行Handler过程中,如果遇到异常,在系统中自定义统一的异常处理器,写系统自己的异常处理代码

    开发步骤:

    • 自定义异常,继承 Exception

    public class CustomException extends Exception {
       //异常信息
       private String message;
       public CustomException(String message){
           super(message);
           this.message = message;
      }
       //Getter and Setter
    }
    • 定义统一异常处理器类,实现 HandlerExceptionResolver

    public class CustomExceptionResolver implements HandlerExceptionResolver  {
       //前端控制器DispatcherServlet在进行HandlerMapping、调用HandlerAdapter执行Handler过程中,如果遇到异常就会执行此方法
       //handler 最终要执行的Handler,它的真实身份是HandlerMethod
       //Exception ex就是接收到异常信息
       @Override
       public ModelAndView resolveException(HttpServletRequest request,
               HttpServletResponse response, Object handler, Exception ex) {
           //输出异常
           ex.printStackTrace();

           //统一异常处理代码
           //针对系统自定义的CustomException异常,就可以直接从异常类中获取异常信息,将异常处理在错误页面展示
           //异常信息
           String message = null;
           CustomException customException = null;
           //如果ex是系统 自定义的异常,直接取出异常信息
           if(ex instanceof CustomException){
               customException = (CustomException)ex;
          }else{
               //针对非CustomException异常,对这类重新构造成一个CustomException,异常信息为“未知错误”
               customException = new CustomException("未知错误");
          }

           //错误 信息
           message = customException.getMessage();

           request.setAttribute("message", message);


           try {
               //转向到错误 页面
               request.getRequestDispatcher("/WEB-INF/jsp/error.jsp").forward(request, response);
          } catch (ServletException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
          } catch (IOException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
          }

           return new ModelAndView();
      }

    }
    • 配置统一异常处理器

        <!-- 定义统一异常处理器 -->
       <bean class="cn.itcast.ssm.exception.CustomExceptionResolver"/>

     

  • 相关阅读:
    spring 自定义事件发布及监听(简单实例)
    解析spring中的BeanFactory(看完会有收获)
    如何提高锁的性能
    spring MVC模式拦截所有入口方法的入参出参打印
    java基于feemarker 生成word文档(超级简单)
    数据库事务特性汇总
    如何让window.open()以post请求方式调用(巧妙解法)
    a标签添加背景图片的解决办法
    深入理解Django Admin的list_display, list_filter和raw_id_fields,filter_horizontal选项
    django配置log日志
  • 原文地址:https://www.cnblogs.com/yjh1995/p/14164379.html
Copyright © 2011-2022 走看看