
具體說明如下:
每個攔截器都是實現了com.opensymphony.xwork2.interceptor.Interceptor接口的java類;Struts會依次調用為某個Action而注冊的每一個攔截器的interecept()方法;每次調用interecept()方法,Struts均會傳遞一個ActionInvocation接口的實例;ActionInvocation接口代表一個給定Action的執行狀態,攔截器可以從該類的對象中獲得與該Action相關的Action對象和Result對象;在完成攔截器自己的任務之后,攔截器將調用ActionInvocation對象的invoke()方法前進到Action處理流程的下一個環節;AbstractInterceptor類實現了Interceptor接口,并為init()方法和destroy()方法提供了空白實現。可以直接實現Interceptor接口或選擇繼承于AbstractInterceptor抽象類。核心示例代碼如下:
package com.qiaobc.struts.interceptors;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class MyInterceptor extends AbstractInterceptor { PRivate static final long serialVersionUID = 1L; @Override public String intercept(ActionInvocation invocation) throws Exception { System.out.println("before invocation.invoke() ..."); String result = invocation.invoke(); System.out.println("after invocation.invoke() ..."); return result; }}可以在struts.xml文件中配置自定義的攔截器類,核心配置代碼如下:
<interceptors> <interceptor name="test" class="com.qiaobc.struts.interceptors.MyInterceptor"></interceptor> </interceptors><action name="testToken" class="com.qiaobc.struts.token.TokenAction"> <interceptor-ref name="test"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> <result>/success.jsp</result> <result name="invalid.token">/token-error.jsp</result></action>注意:在自定義攔截器中可以選擇不調用ActionInvocation的invoke()方法,則后續攔截器和Action方法將不會被調用;同時,Struts會渲染自定義攔截器intercept()方法返回值所對應的result。
新聞熱點
疑難解答