Spring MVC也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必 须实现HandlerInterceptor接口
1.自定义实现类实现 HandlerInterceptor接口
1 public class MyInterceptor implements HandlerInterceptor{ 2 3 @Override 4 public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception { 5 6 7 System.out.println("执行了preHandle"); 8 return true; 9 } 10 11 @Override 12 public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) 13 throws Exception { 14 15 System.out.println("执行了postHandle"); 16 } 17 18 @Override 19 public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) 20 throws Exception { 21 22 System.out.println("执行了afterCompletion"); 23 } 24 }
2.在springmvc配置文件中配置相对应的拦截器
<mvc:interceptors>
<!--配置自定义拦截器 ,所有的路径都拦截 -->
<bean class="com.neuedu.springmvc.filter.MyFilter"></bean>
</mvc:interceptors>
– preHandle():该方法在目标方法之前被调用,
若返回值为true,则继续调用后续的拦截器和目标方法
若返回值为false,则不会再调用后续的拦截器和目标方法
可以考虑做权限,日志或者事务等!
– postHandle():调用目标方法之后,但渲染视图之前被调用
可以对请求域中的属性或者视图做出修改!
– afterCompletion():渲染视图之后被调用,
可以在该方法中进行一些资源清理的操作。
关于拦截器的配置:
1 <mvc:interceptors> 2 <!--配置自定义拦截器 ,所有的路径都拦截 --> 3 <bean class="com.neuedu.springmvc.filter.MyFilter"></bean> 4 <!-- 关于拦截器的配置问题 ,可以通过<mvc:interceptor>来配置使用哪个拦截器来【不】拦截的路径--> 5 <mvc:interceptor> 6 <!-- 用<mvc:mapping>标签指定要拦截的路径 --> 7 <mvc:mapping path="/employ"/> 8 <!-- 指定使用哪个拦截器进行拦截 --> 9 <bean class="com.neuedu.springmvc.filter.SecondFilter"></bean> 10 </mvc:interceptor> 11 </mvc:interceptors>
1.class中为拦截器类的全类名,上述配置的结果是:拦截器MyFilter拦截所有路径,拦截器SecondFilter仅拦截path处指定的路径,即/employ
2.拦截器有执行顺序,在配置中越靠上的,拦截器的优先级越高。 3.
1、配置指定拦截的路径: <mvc:mapping path="/employ"/> 2、配置指定不拦截的路径: <mvc:exclude-mapping path="/testException"/> 注意:指定不拦截的路径时: 要将指定的拦截路径一同写上,且必须以如下形式书写(拦截路径写在不拦截路径之上): <mvc:mapping path="/emp"/> <mvc:exclude-mapping path="/testException"/> ( <mvc:mapping path="/emp"/>若在下面或不写,均会报错)
4.多拦截器执行流程:
以上面配置为例(假设结果均为true):
【MyFilter】preHandle——>【SecondFilter】preHandle——>目标方法——>【SecondFilter】postHandle
——>【MyFilter】postHandle——>视图渲染(把jsp页面标签一类的翻译为HTML的过程,将jsp中EL中的数据放到 HTML中)——>【SecondFilter】afterCompletion——>【MyFilter】afterCompletion
注意:
filter使用与interceptor类似,不过filter将配置文件写在web.xml;而interceptor是将文件配置在springmvc.xml中。。。
两者均常用在鉴定筛选信息。