zoukankan      html  css  js  c++  java
  • SpringMVC中的拦截器、异常处理器

    一、SpringMVC框架中的拦截器 

        1. 拦截器的概述 

            1)SpringMVC框架中的拦截器用于对处理器进行预处理和后处理的技术

            2) 可以定义拦截器链,连接器链就是将拦截器按着一定的顺序结成一条链,在访问被拦截的方法时,拦截器链中的拦截器会按着定义的顺序执行。

            3). 拦截器和过滤器的区别:

                         * 过滤器是Servlet规范的一部分,任何框架都可以使用过滤器技术。 

                        *  拦截器是SpringMVC框架独有的。 

                        *  过滤器配置了/*,可以拦截任何资源。 

                        *  拦截器只会对控制器中的方法进行拦截。 

              4)要自定义拦截器,需要实现HandlerInterceptor接口。

        2. 自定义拦截器步骤 

             1) 创建类,实现HandlerInterce

              

    public class MyInterceptor implements HandlerInterceptor {
        /**
         * 预处理,controller方法执行前
         * return true 放行,执行下一个拦截器,如果没有,执行controller中的方法
         * return false 不放行
         * @param request
         * @param response
         * @param handler
         * @return
         * @throws Exception
         */
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("MyInterceptor执行了---------前");
           // request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request,response);
            return true;
        }
    
        /**
         * 后处理的方法,controller方法执行之后,success.jsp执行之前
         * @param request
         * @param response
         * @param handler
         * @param modelAndView
         * @throws Exception
         */
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("MyInterceptor执行了---------后");
        }
    
        /**
         * success.jsp执行之后,该方法执行
         * @param request
         * @param response
         * @param handler
         * @param ex
         * @throws Exception
         */
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("MyInterceptor执行了---------最后");
        }
    }

           2)在springmvc.xml中配置拦截器类

     <!--配置拦截器-->
        <mvc:interceptors>
            <!--配置拦截器-->
            <mvc:interceptor>
                <!--要拦截的方法-->
                <mvc:mapping path="/user/*"/>
    <!--            &lt;!&ndash;不要拦截的集体方法&ndash;&gt;-->
    <!--            <mvc:exclude-mapping path=""/>-->
                <!--配置拦截器的对象-->
                <bean class="cn.li.interceptor.MyInterceptor"/>
            </mvc:interceptor>
      
        </mvc:interceptors>

          执行步骤:预处理的方法-----true放行-----> collection方法---------->后处理方法------------->jsp页面------------>最终处理方法 

    二、SpringMVC的异常处理

           1.异常处理思路

               1)Controller调用service,service调用dao,异常都是向上抛出的,最终有DispatcherServlet找异常处理器进行异常的处理。 

            2  SpringMVC的异常处理

               1)自定义异常

                   

    public class SysException extends Exception {
        //存储提示信息
        private String message;
        public SysException(String message) {
            this.message = message;
        }
        @Override
        public String getMessage() {
            return message;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    }

              2)自定义异常处理器

               

    public class SysExceptionResolver implements HandlerExceptionResolver {
        /**
         * 处理异常的逻辑
         * @param httpServletRequest
         * @param httpServletResponse
         * @param o
         * @param e :当前抛出的异常
         * @return
         */
        @Override
        public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
           //获取到异常对象
            SysException exception=null;
            if(e instanceof SysException){
                exception= (SysException) e;
            }else {
                e=new SysException("系统正在维护");
            }
            ModelAndView mv =new ModelAndView();
            mv.addObject("errorMsg",e.getMessage());
            mv.setViewName("error");
            return mv;
        }

         3)在springmvc.xml中配置异常处理器

            

     <!--配置异常处理器-->
        <bean id="sysExceptionResolver" class="cn.li.exception.SysExceptionResolver"></bean>
  • 相关阅读:
    定时器Timer的使用
    Queue和BlockingQueue的使用以及使用BlockingQueue实现生产者-消费者
    ReentrantReadWriteLock读写锁的使用
    利用Lucene与Nutch构建简单的全文搜索引擎
    再见了,DM
    互联网公司高并发图片(缩略图)处理中间层服务架构设计一
    poj 3131 双向搜索+hash判重
    [置顶] linux常用命令大全
    堆排序
    iOS UIView非常用方法及属性详解
  • 原文地址:https://www.cnblogs.com/cqyp/p/12526971.html
Copyright © 2011-2022 走看看