更新時間:2023-12-28 來源:黑馬程序員 瀏覽量:
在Struts2框架中,通常開發人員所編寫的自定義攔截器類都會直接或間接地實現com.opensymphony.xwork2.interceptor.Interceptor接口。Interceptor接口中的主要代碼如下所示:
public interface Interceptor extends Serializable { void init(); void destroy(); String intercept(ActionInvocation invocation) throws Exception; }
從上述代碼中可以看出,該接口共提供了以下三個方法。
該方法在攔截器被創建后會立即被調用,它在攔截器的生命周期內只被調用一次。可以在該方法中對相關資源進行必要的初始化。
該方法與init()方法相對應,在攔截器實例被銷毀之前,將調用該方法釋放和攔截器相關的資源,它在攔截器的生命周期內,也只被調用一次。
該方法是攔截器的核心方法,用于添加真正執行攔截工作的代碼,實現具體的攔截操作,它返回一個字符串作為邏輯視圖,系統根據返回的字符串跳轉到對應的視圖資源。每攔截一個動作請求,該方法就會被調用一次。該方法的ActionInvocation參數包含了被攔截的Action的引用,可以通過該參數的invoke()方法,將控制權轉給下一個攔截器或者轉給Action的execute()方法。
除了實現Interceptor接口可以自定義攔截器以外,在實際開發過程中,更常用的一種方式是繼承抽象攔截器類AbstractIntercepter。該類實現了Interceptor接口,并且提供了init()方法和destroy()方法的空實現。使用時,可以直接繼承該抽象類,而不用實現那些不必要的方法。AbstractIntercepter類中定義的方法如下所示:
public abstract class AbstractInterceptor implements Interceptor { public void init() {} public void destroy() {} public abstract String intercept(ActionInvocation invocation) throws Exception; }
從上述代碼中可以看出,AbstractInterceptor類已經實現了Interceptor接口的所有方法,一般情況下,只需繼承AbstractInterceptor類,實現interceptor()方法就可以創建自定義攔截器。需要注意的是,只有當自定義的攔截器需要打開系統資源時,才需要覆蓋AbstractInterceptor類的init()方法和destroy()方法。與實現Interceptor接口相比,繼承AbstractInterceptor類的方法更為簡單。
本文版權歸黑馬程序員Java培訓學院所有,歡迎轉載,轉載請注明作者出處。謝謝!
作者:黑馬程序員Java培訓學院