java三大器之一 -拦截器
拦截器的定义
java里的拦截器是动态拦截action调用的对象。提供一种机制可以定义在action执行的前后执行的代码,也可以action执行前阻止其执行,同时提供了一种可以提取action中可重用部分的方式。在aop中拦截器用在某个方法或字段被访问之前,在拦截后在其之前或之后执行一些操作。
拦截器实现
定义一个java类,实现Interceptor接口,或者继承抽象类AbstractInterceptor
在配置文件中注册拦截器。
在需要action中引用上述定义的拦截器,如果定义为默认拦截器,不加特殊说明,所有action都会被这个拦截器拦截。
拦截器与框架的结合
1、拦截器和spring
在spring框架中,通过实现HanderInterceptorAdaper抽象类来实现拦截器,HanderInterceptorAdaper继承了抽象接口HanderInterceptorAdaper。
HandlerInterceptorAdaper代码
package org.springframework.web.servlet.handler;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public abstract class HandlerInterceptorAdapter implements HandlerInterceptor{
// 在业务处理器处理请求之前被调用
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception{
return true;
}
// 在业务处理器处理请求完成之后,生成视图之前执行
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception{
}
// 在DispatcherServlet完全处理完请求之后被调用,可用于清理资源
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception{
}
}
拦截器的配置
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截所有的请求,这个必须写在前面,也就是写在【不拦截】的上面 -->
<mvc:mapping path="/**" />
<!-- 但是排除下面这些,也就是不拦截请求 -->
<mvc:exclude-mapping path="/login.html" />
<mvc:exclude-mapping path="/account/login.do" />
<mvc:exclude-mapping path="/account/regist.do" />
<bean class="com.msym.cloudnote.interceptors.SessionInterceptor" />
</mvc:interceptor>
</mvc:interceptors>