拦截器的实现
- 编写拦截器类实现HandlerInterceptor接口;
- 将拦截器注册进springmvc框架中;
- 配置拦截器的拦截规则;
其他实现方法
WebRequestInterceptor接口:与上一个的区别是参数区别和prehandle的方法没有返回值。没有上一个功能全,因此常用第一个。
拦截器的使用场景
处理所有请求共性问题:
- 乱码问题:用request,response参数去设置编码;
- 解决权限验证问题(是否登陆,取session对象查看);
拦截器与过滤器的区别
拦截器Interceptor依赖于框架容器,基于反射机制,只过滤请求;过滤器Filter依赖于Servlet容器,基于回调函数,过滤范围大。
例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class TestInterceptor implements HandlerInterceptor {
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("TestInterceptor.preHandle()"); return true; }
@Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("TestInterceptor.postHandle()"); }
@Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("TestInterceptor.afterCompletion()"); } }
|
注册方式: 在springmvc的Dispatcherservlet配置文件中加入拦截器代码。
1 2 3 4 5 6 7 8 9 10 11 12
| <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/courses/view2/*"/> <bean class="com.cc.mvcdemo.interceptor.TestInterceptor"></bean> </mvc:interceptor> <bean class="com.cc.mvcdemo.interceptor.TestInterceptorTwo"></bean> </mvc:interceptors>
|