zoukankan      html  css  js  c++  java
  • 【Spring学习笔记-MVC-17】Spring MVC之拦截器

     
    作者:ssslinppp      

    1. 拦截器简介及应用场景


     

    2. 拦截器接口及拦截器适配器




     

    3. 运行流程图


    正常运行

    中断流程






     

    4. 程序实例


    控制层:

    @Controller
    @RequestMapping(value = "/test")
    public class TestController {
        
        @RequestMapping(value = "/interceptor12")
        public String interceptor12() {
            System.out.println("Controller层方法-interceptor12");
            return "index";
        }
        
        @RequestMapping(value = "/interceptor34")
        public String interceptor34() {
            System.out.println("Controller层方法-interceptor34");
            return "index";
        }
    }  

    总共定义了5个拦截器

    每个拦截器中只是打印消息,各拦截器类似,程序如下:

    public class MyInterceptor1 extends HandlerInterceptorAdapter {
        @Override
        public boolean preHandle(HttpServletRequest request,
                HttpServletResponse response, Object handler) throws Exception {
            System.out.println("MyInterceptor1-preHandle()");
            return true;
        }
     
        @Override
        public void postHandle(HttpServletRequest request,
                HttpServletResponse response, Object o, ModelAndView mav)
                throws Exception {
            System.out.println("MyInterceptor1-postHandle()");
        }
     
        @Override
        public void afterCompletion(HttpServletRequest request,
                HttpServletResponse response, Object o, Exception excptn)
                throws Exception {
            System.out.println("MyInterceptor1-afterCompletion()");
        }
     
    }  

    配置拦截器

    <!-- 定义拦截器 -->
        <mvc:interceptors>
            <mvc:interceptor>
                <!-- 拦截指定请求 -->
                <mvc:mapping path="/test/interceptor12" />
                <bean class="com.ll.Interceptor.MyInterceptor1" />
            </mvc:interceptor>
            
            <!-- 拦截所有的请求 -->
            <mvc:interceptor>
                <mvc:mapping path="/test/*" />
                <bean class="com.ll.Interceptor.MyInterceptorAll" />
            </mvc:interceptor>
            
            <mvc:interceptor>
                <mvc:mapping path="/test/interceptor12" />
                <bean class="com.ll.Interceptor.MyInterceptor2" />
            </mvc:interceptor>
            
            <mvc:interceptor>
                <mvc:mapping path="/test/interceptor34" />
                <bean class="com.ll.Interceptor.MyInterceptor3" />
            </mvc:interceptor>
            
            <mvc:interceptor>
                <mvc:mapping path="/test/interceptor34" />
                <bean class="com.ll.Interceptor.MyInterceptor4" />
            </mvc:interceptor>
        </mvc:interceptors>   

    特别注意拦截器的配置顺序,如下:
    1. MyInterceptor1;
    2. MyInterceptorAll;
    3. MyInterceptor2;
    4. MyInterceptor3;
    5. MyInterceptor4;
    其中,MyInterceptor1和MyInterceptor2拦截interceptor12请求,MyInterceptor3和MyInterceptor4拦截interceptor34请求,MyInterceptorAll拦截所有请求。


     
     
     

     

    7. 其他


     
     
  • 相关阅读:
    【Python】【解决】UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 1: ordinal not in range(128)
    【小技巧】强制重启无线网卡,解决“区域中找不到无线网络,请确定您计算机上的无线开关已启用”问题
    【小技巧】9针USB转串口简易连通性测试,附25针转9针
    【ACM】HDU1008 Elevator 新手题前后不同的代码版本
    【Android】命令行jarsigner签字和解决找不到证书链错误
    LeetCode 【47. Permutations II】
    LeetCode 【46. Permutations】
    Python asyncio库的学习和使用
    LeetCode 【190. Reverse Bits】
    LeetCode 【21. Merge Two Sorted Lists】
  • 原文地址:https://www.cnblogs.com/kelelipeng/p/11359579.html
Copyright © 2011-2022 走看看