1.单个拦截器
package com.gb.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class RoleInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("preHandle===1");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("postHandle===1");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("afterCompletion===1");
}}
ds-servlet.xml配置文件中拦截器配置
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.gb.interceptor.RoleInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
拦截基本流程:
一个请求 ---->先经过核心控制器(DispatcherrServlet),
然后经过处理器映射(HandlerMapping 地址与处理器之间的映射关系),加载配置文件时,创建HandlerMapping,这时候就有了地址与处理器之间的映射关系。.
然后到处理器适配器(HandlerAdapter,包含拦截器)得到对应的处理器适配器,就可以处理请求了。(适配器就相当于一个有很多东西,需要啥他就给你按照一定的模式返回你想要的东西)
2.多个拦截器:
遵循 ”责任链“ 模式,即三个拦截器 1 2 3prehandler返回都是true 的时候,然后执行postHandler、afterCompletion。prehandler 的执行顺序是 1 2 3,postHandler、afterCompletion执行都是 3 2 1。
当有其中有一个的preHander为false的时候,就只执行preHandler,其余的不会执行。
3.拦截路径问题:
遵循 ant-stype,这不是正则表达式! 百度搜索ant** 查看博文
/** ---> 这个代表匹配所有的路径,与 /* 不相同的是 /只是匹配一个目录下的所有文件目录。
例如: /test/a/b/c 通过/匹配 ,/test......通过/匹配
4.system.currentTimesMillis 用来测试性能 ,看执行时间
网友评论