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

2025-10-18 00:47:29

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多个拦截器方法的执行顺序

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢