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>