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 的执行流程 理解记忆总比 死记硬背的好

  • 相关阅读:
    【Python基础知识】【语法】【入门】
    linux-记录一次VMWare安装linux的问题
    mysql-记录一次CentOS7压缩包安装mysql的过程
    java-记录一次新服务器搭建网站过程
    docker-mysql-记录一次中文乱码的问题。
    spring-事务总结
    spring-aop总结
    maven-spring-boot-first-version-learn编译运行的问题
    maven-导入4.0.0.BOOTSTRAP-SNAPSHOT遇到的问题。
    maven-添加spring-express snapshot版本依赖问题
  • 原文地址:https://www.cnblogs.com/920913cheng/p/10170937.html
Copyright © 2011-2022 走看看