• 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>
    复制代码

  • 相关阅读:
    用C++实现从键盘输入两个数a和b,求两数中的最大值
    MongoDB学习笔记-1
    linux 配置ip地址
    linux 配置jdk 环境变量
    VMware Linux 共享文件夹 虚拟机无共享文件解决方法
    数据库动态参数
    js
    js分页
    mysql存储过程
    webconfig 中配置上传文件大小
  • 原文地址:https://www.cnblogs.com/HHR-SUN/p/7218698.html
Copyright © 2020-2023  润新知