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>
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-------------"); }}
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-------------"); }}
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"; }}
5、执行任意一个jsp页面,查看程序的执行结果:
6、当有多个拦截器时,我们查看这些拦截器的执行顺序,拦截器会根据配置的顺序首先执行preHandle的方法: