zoukankan      html  css  js  c++  java
  • springmvc学习(五)

     这次主要是记录一下 springmvc 关于异常处理 和 拦截的回顾

    1. 关于springmvc  异常处理:springmvc 提供了 HandlerExceptionResolver  异常处理解析接口 实现该接口

          @RequestMapping(value = "exceptionMethod")
          public void exceptionMethod() throws MyExcption {
              try {
                  System.out.println(1 / 0);
              } catch (Exception e) {
                  throw new MyExcption("除数不能为零");
              }
          }
      public class MyHandlerException implements HandlerExceptionResolver {
          
          @Override
          public ModelAndView resolveException(HttpServletRequest req, HttpServletResponse res, Object parm, Exception ext) {
              String msg = "访问异常";
              ModelAndView mv = new ModelAndView();
              mv.addObject("result", msg);
              mv.setViewName("hello");
              return mv;
          }

      所有的异常 都会经过该异常处理解析,不过不管是何种异常 返回的都是 同一样的页面 提示 ,为了有更好的 错误信息反馈  我们可以修改一下  创建一个自定义的异常:

      public class MyHandlerException implements HandlerExceptionResolver {
          
          
          @Override
          public ModelAndView resolveException(HttpServletRequest req, HttpServletResponse res, Object parm, Exception ext) {
              String msg = "访问异常";
              if (ext instanceof MyExcption) {
                  msg = ((MyExcption) ext).getMsg();
              }
              ModelAndView mv = new ModelAndView();
              mv.addObject("result", msg);
              mv.setViewName("exception");
              return mv;
          }
      public class MyExcption extends Exception {
          public String msg;
      
          public String getMsg() {
              return msg;
          }
      
          public void setMsg(String msg) {
              this.msg = msg;
          }
      
          public MyExcption() {
          }
      
          public MyExcption(String msg) {
              this.msg = msg;
          }
      }

      这样 就会根据自定义提示的异常 返回相应的 错误页面提示

    2. 拦截器:springmvc 同样也提供了一个 处理请求拦截的处理器接口HandlerInterceptor 实现该接口:
      public class MyInterceptor implements HandlerInterceptor {
      
          @Override
          public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
                  throws Exception {
          }
      
          @Override
          public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
                  throws Exception {
      
          }
      
          @Override
          public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
              return true;
          }

      先经过 preHandle 方法 过滤 请求,比如权限验证 是否登录,返回true的时候 表示 放行,在返回modeAndView的时候  执行 postHadnle  最后在执行afterComoletion方法 在springmvc.xml中配置拦截器

      <mvc:interceptors>
              <mvc:interceptor>
                  <mvc:mapping path="/**" />
                  <mvc:exclude-mapping path="/login/**" />
                  <bean class="com.springmvc.interceptor.MyInterceptor"></bean>
              </mvc:interceptor>
          </mvc:interceptors>

      exclude-mapping 表示 不需要拦截的路径(有兴趣的可以去看一下 多个拦截器的时候 请求是如何执行的 以及springmVC Restful )

       springmvc 面试的时候 遇到过:谈一下  springmvc 如何执行一个请求的,记住springmvc 的 三大组件(处理器映射器,处理器适配器,视图解析器) 自然而然的就清楚了 springmvc 的执行流程 理解记忆总比 死记硬背的好

  • 相关阅读:
    KVM源代码阅读--内核版本3.17.4
    最新的裸机联想笔记本装win7系统/SSD(固态硬盘)上安装win7系统/联想K4450A i7装win7系统
    Vmaware复制后的虚拟机不能上网问题解决
    KVM基于X86硬件辅助的虚拟化技术实现机制【转】
    KVM和QEMU简介
    笔记--[基于完全虚拟化的安全监控技术研究_张丽(2013)]
    win8预装系统环境下安装win7问题以及双操作系统安装解决
    VM 操作系统实例化(基于 KVM 的虚拟化研究及应用--崔泽永(2011))的论文笔记
    VMware vsphere Hypervisor、VMware vsphere和VMware Workstation小记
    虚拟化、(完)全虚拟化、半虚拟化和准虚拟化技术个人总结
  • 原文地址:https://www.cnblogs.com/920913cheng/p/10170937.html
Copyright © 2011-2022 走看看