zoukankan      html  css  js  c++  java
  • SpringMVC12拦截器

    创建对应的登陆界面

    复制代码
      <body>
          <form action="login"  method="post">
                       姓名:  <input type="text" name="userName"/>
           <input type="submit" value="新增"/>
          </form>
      </body>
    复制代码

    创建对应的controller

    复制代码
    @Controller
    public class LoginController  {
        
        /**
         * 默认用户登录时候的方法
         */
        @RequestMapping("/login")
        public String  addStudent(String userName,HttpSession session) {
            System.out.println("进入了  login");
            session.setAttribute("name", userName);
           return   "/user/list";  //转发
        }
        
    }
    复制代码
    复制代码
    @Controller
    @RequestMapping("/user")
    public class UserController {
    
        
        @RequestMapping("/list")
        public ModelAndView list(){
            System.out.println("进入了List");
              ModelAndView  mv=new ModelAndView();
              mv.addObject("name", "大家辛苦了!").setViewName("/success.jsp");
            return  mv;
        }
    }
    复制代码

    创建对应的拦截器

    复制代码
    public class MyInterceptor implements HandlerInterceptor {
    
        /**
         * 在处理器映射器 映射出所要执行的处理器类时,已经将拦截器和处理器组合成一个处理器执行链!并返回给了中央调度器!
         * 
         * preHandle:预处理
         * request:请求
         * response:响应
         * handler:即将执行的controller
         * 
         * 01.preHandle  return是false的时候 不会执行后续的操作   只有一个拦截器的时候
         * 02.有两个拦截器   而且两个preHandle都是return===false
         *     只输出第一个拦截器中的语句!后续不会执行
         * 03.有两个拦截器  第一个拦截器中preHandle的return===true
         *      执行的方法:
         *         001.第1个拦截器的preHandle
         *         002.第2个拦截器的preHandle
         *         003.第1个拦截器的afterCompletion
         *         004.没有执行controller
         * 04.有两个拦截器  两个拦截器中preHandle的return===true
         *         001.第1个拦截器的preHandle
         *         002.第2个拦截器的preHandle
         *         003.执行controller
         *         004.第2个拦截器的postHandle
         *         005.第1个拦截器的postHandle
         *         006.第2个拦截器的afterCompletion
         *         007.第1个拦截器的afterCompletion
         */
        @Override
        public boolean preHandle(HttpServletRequest request,
                HttpServletResponse response, Object handler) throws Exception {
            System.out.println("进入了 MyInterceptor1的   preHandle=====》");
            return true;
        }
    
        /**
         * Controller执行之后的方法  
         * 如果有多个拦截器
         * 那么  执行顺序和 perHandle相反!
         * 
         * ModelAndView:就是从controller中返回的数据!
         * 我们可以操作!
         */
        @Override
        public void postHandle(HttpServletRequest request,
                HttpServletResponse response, Object handler,
                ModelAndView modelAndView) throws Exception {
            System.out.println("进入了 MyInterceptor1的   postHandle=====》");
            System.out.println(modelAndView.getViewName());
        }
    
        /**
         * afterCompletion:后处理
         * 想要执行必须满足一个条件!  本类中的perHandle  执行并且返回true!
         */
        @Override
        public void afterCompletion(HttpServletRequest request,
                HttpServletResponse response, Object handler, Exception ex)
                throws Exception {
            System.out.println("进入了 MyInterceptor1的   afterCompletion=====》");
            
        }
    
        
    
    }
    复制代码
    复制代码
    public class MyInterceptor2 implements HandlerInterceptor {
    
        @Override
        public boolean preHandle(HttpServletRequest request,
                HttpServletResponse response, Object handler) throws Exception {
            System.out.println("进入了 MyInterceptor2的   preHandle=====》");
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request,
                HttpServletResponse response, Object handler,
                ModelAndView modelAndView) throws Exception {
            System.out.println("进入了 MyInterceptor2的   postHandle=====》");
            
        }
    
        
        @Override
        public void afterCompletion(HttpServletRequest request,
                HttpServletResponse response, Object handler, Exception ex)
                throws Exception {
            System.out.println("进入了 MyInterceptor2的   afterCompletion=====》");
            
        }
    
        
    
    }
    复制代码

    在xml文件中配置

    复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop" 
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/tx 
            http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.springframework.org/schema/aop 
            http://www.springframework.org/schema/aop/spring-aop.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd
            ">
      <!-- 配置springmvc的组件  -->
      <context:component-scan base-package="cn.bdqn.controller"/>
      <!-- 开启 注解的方式-->
      <mvc:annotation-driven/>
      
      <!-- 配置拦截器     拦截  user/下面的请求-->
      <mvc:interceptors>
           <mvc:interceptor>
               <mvc:mapping path="/user/**"/>
               <bean  class="cn.bdqn.interceptor.MyInterceptor"/>
           </mvc:interceptor>
           <mvc:interceptor>
               <mvc:mapping path="/user/**"/>
               <bean  class="cn.bdqn.interceptor.MyInterceptor2"/>
           </mvc:interceptor>
      </mvc:interceptors>
      
    </beans>
    复制代码

  • 相关阅读:
    [转载]kafka分布式消息机制
    mysql partition(mysql range partition,对历史数据建分区)
    【转载】MySQL Show命令总结
    【转载】hive优化之一
    【转载】SQL必知必会点
    先行发生原则Happens-before
    指令重排序
    并发编程常见面试题
    CAS无锁机制
    锁机制
  • 原文地址:https://www.cnblogs.com/HHR-SUN/p/7218698.html
Copyright © 2011-2022 走看看