SpringMVC多个拦截器方法的执行顺序

 时间:2026-02-13 10:28:02

1、在我们程序中定下如下两个拦截器:

<mvc:interceptors>

                <mvc:interceptor>

                        <mvc:mapping path="/springmvc/helloworld"></mvc:mapping>

                        <bean class="com.gwolf.springmvc.interceptors.SecondInterceptor"></bean>

                </mvc:interceptor>

                

                <bean class="com.gwolf.springmvc.interceptors.FirstInterceptor"></bean>

        </mvc:interceptors>

SpringMVC多个拦截器方法的执行顺序

2、声明第一个拦截器:

package com.gwolf.springmvc.interceptors;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

public class FirstInterceptor implements HandlerInterceptor {

        @Override

        public boolean preHandle(HttpServletRequest request,

                        HttpServletResponse response, Object handler) throws Exception {

                System.out.println("FirstInterceptor preHandle--------");

                return true;

        }

        @Override

        public void postHandle(HttpServletRequest request,

                        HttpServletResponse response, Object handler,

                        ModelAndView modelAndView) throws Exception {

                System.out.println("FirstInterceptor postHandle--------");

        }

        @Override

        public void afterCompletion(HttpServletRequest request,

                        HttpServletResponse response, Object handler, Exception ex)

                        throws Exception {

                System.out.println("FirstInterceptor afterCompletion-------------");

        }

}

SpringMVC多个拦截器方法的执行顺序

3、声明第二个拦截器SecondInterceptor:

package com.gwolf.springmvc.interceptors;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

public class SecondInterceptor implements HandlerInterceptor {

        @Override

        public boolean preHandle(HttpServletRequest request,

                        HttpServletResponse response, Object handler) throws Exception {

                System.out.println("SecondInterceptor preHandle--------");

                return true;

        }

        @Override

        public void postHandle(HttpServletRequest request,

                        HttpServletResponse response, Object handler,

                        ModelAndView modelAndView) throws Exception {

                System.out.println("SecondInterceptor postHandle--------");

        }

        @Override

        public void afterCompletion(HttpServletRequest request,

                        HttpServletResponse response, Object handler, Exception ex)

                        throws Exception {

                System.out.println("SecondInterceptor afterCompletion-------------");

        }

}

SpringMVC多个拦截器方法的执行顺序

4、声明一个springmvc控制层:

package com.gwolf.springmvc.handlers;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RequestParam;

import com.gwolf.springmvc.domain.Person;

@Controller

@RequestMapping("/springmvc")

public class HelloWorldController {

        

        /**

         *使用@RequestMapping 注解来映射请求的URL

         *

         *返回值会通过视图解析器解析为实际的物理视图,对于InternalResourceViewResolver

         *视图解析器,会做如下的解析:通过prefix+returnVal+后缀 这样的方式得到实际的物理视图,然后

         *做转发操作。

         * /WEB-INF/views/success.jsp

         * @return

         */

        

        @RequestMapping(value="/helloworld/{id}",method=RequestMethod.GET)

        public String hello(@PathVariable Integer id) {

                System.out.println("test rest get:" + id);

                

                return "success";

        }

        

        @RequestMapping(value="/helloworld",method=RequestMethod.POST)

        public String hello(Person person) {

                System.out.println(person);

                return "success";

        }

        

        @RequestMapping(value="/helloworld/{id}",method=RequestMethod.DELETE)

        public String helloDelete(@PathVariable Integer id) {

                System.out.println("test rest delete:" + id);

                

                return "success";

        }

        

        @RequestMapping(value="/helloworld/{id}",method=RequestMethod.PUT)

        public String helloPUt(@PathVariable Integer id) {

                System.out.println("test rest put:" + id);

                

                return "success";

        }

}

SpringMVC多个拦截器方法的执行顺序

5、执行任意一个jsp页面,查看程序的执行结果:

SpringMVC多个拦截器方法的执行顺序

6、当有多个拦截器时,我们查看这些拦截器的执行顺序,拦截器会根据配置的顺序首先执行preHandle的方法:

SpringMVC多个拦截器方法的执行顺序

SpringMVC多个拦截器方法的执行顺序

  • soapUI Error Unauthorized 测试SOAP接口未授权
  • 【Codesys视频教程】让第一个程序“运行”起来
  • 以太网转can网关- 调试软件的使用说明
  • 新国标(GB36246-2018)在招投标中的运用
  • 小米11ultra怎么开启反向充电
  • 热门搜索
    交友宣言怎么写 cf怎么卡光头 奈何boss又如何电视剧 如何缓解痛经 图片怎么压缩变小 黑龙江旅游攻略 房产税如何计算 怎么换qq空间背景 如何保护视力 我的世界怎么切换模式