拦截器与过滤器区别
过滤器 是Servlet规范中的一部分,任何java web工程都可以用
拦截器 是SpringMVC框架自己的,只有SpringMVC工程才可以用
过滤器 是url-pattern中配置了 "/*" 之后,可以对所有要访问的资源拦截
拦截器 只会拦截访问的控制器方法,如果访问的是jsp,html,css,image或者Js是不会进行拦截的。
定义拦截类
继承 HandlerInterceptor 类
public class mInterceptor implements HandlerInterceptor {
/**
* 预处理,controller之前执行
* return true 放行,执行下一个拦截器,没有则进入controller方法
* return false 不放行
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("mInterceptor....");
return true;
}
/**
* 后处理方法 controller之后执行
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle...");
}
/**
* success.jsp执行后,执行该方法
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion...");
}
}
springmvc.xml配置 拦截器
<!--配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!--配置拦截的具体方法-->
<mvc:mapping path="/user/*"/>
<!--不要拦截的方法
<mvc:exclude-mapping path=""/>-->
<!--配置拦截对象-->
<bean class="org.example.interceptor.mInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
<!--开启SpringMVC注解支持-->
<mvc:annotation-driven/>
调试代码 controller.java
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/testInterceptor")
public String testInterceptor(){
System.out.println("testInterceptor执行了。。。");
return "success";
}
}