struts2之自定義攔截器及攔截器生命週期分析
阿新 • • 發佈:2019-02-18
一,概述
本文主要是關於怎樣自定義攔截器及通過自定義的攔截器來了解攔截器的生命週期.二,自定義攔截器
1)寫一個攔截器類HelloInterceptor,它實現了Interceptor介面.2)寫一個Actio類HelloAction.package cn.bighuan.a_interceptor; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; /** * 自定義一個攔截器 * * @author bighuan * */ public class HelloInterceptor implements Interceptor { // 啟動時候執行 public HelloInterceptor() { System.out.println("建立了攔截器物件..."); } // 啟動時候執行 @Override public void init() { System.out.println("HelloInterceptor.init():執行了攔截器的初始化方法"); } // 攔截器業務處理方法:(在訪問Action時候執行?在execute之前執行?) @Override public String intercept(ActionInvocation invocation) throws Exception { System.out.println("2,執行Action之前"); // 呼叫下一個攔截器或Action:相當於Servlet過濾器中的chain.doFilter(...) // 獲取的是execute方法的返回值 String resultFlag = invocation.invoke(); System.out.println("4,攔截器,業務處理-結束:" + resultFlag); return resultFlag; // return null; } @Override public void destroy() { System.out.println("HelloInterceptor.destroy():攔截器銷燬了..."); } }
3)在struts.xml檔案進行配置,主要要注意攔截器的配置.(步驟在下面程式碼中)package cn.bighuan.a_interceptor; import com.opensymphony.xwork2.ActionSupport; public class HelloAction extends ActionSupport { public HelloAction() { System.out.println("1,HelloAction.HelloAction():HelloAction例項建立了"); } @Override public String execute() throws Exception { System.out.println("3,HelloAction.execute():執行了請求處理的方法"); return super.execute(); } }
4)啟動伺服器,訪問action. a)剛啟動伺服器的時候,控制檯輸出如下內容:<package name="hello_interceptor" extends="struts-default"> <!-- 攔截器配置 --> <interceptors> <!-- 配置使用者自定義的攔截器 --> <interceptor name="helloInterceptor" class="cn.bighuan.a_interceptor.HelloInterceptor"> </interceptor> <!-- 自定義一個棧:要引用預設棧,否則預設棧功能就沒有了,自定義的攔截器 --> <interceptor-stack name="helloStack"> <!-- 引用預設棧,注意:預設棧一定要放到第一行 --> <interceptor-ref name="defaultStack"></interceptor-ref> <!-- 引用自定義的攔截器 --> <interceptor-ref name="helloInterceptor"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 執行攔截棧中的所有攔截器 --> <default-interceptor-ref name="helloStack"></default-interceptor-ref> <!-- Action配置 --> <action name="hello" class="cn.bighuan.a_interceptor.HelloAction"> <result name="success">/index.jsp</result> </action> </package>
建立了攔截器物件...
HelloInterceptor.init():執行了攔截器的初始化方法
b)當訪問action時,控制檯輸出如下內容:
1,HelloAction.HelloAction():HelloAction例項建立了
2,執行Action之前
3,HelloAction.execute():執行了請求處理的方法
4,攔截器,業務處理-結束:success
d)當伺服器關閉的時候,控制檯輸出如下:
HelloInterceptor.destroy():攔截器銷燬了...