Struts2框架核心之攔截器&標籤庫
4、Struts2框架核心之攔截器&標籤庫
上接Struts2與頁面間的資料互動(2)--OGNL表示式&ValueStack:https://blog.csdn.net/biggerchong/article/details/84573784
目錄
4.1 什麼是Struts2的攔截器?
Filter:
過濾器,過濾客戶端向伺服器傳送的所有請求。
Interceptor:
攔截器,起到攔截客戶端對Action的訪問;Interceptor是更加細粒度的攔截Action中的具體方法。Interceptor是Struts2中的核心功能,Struts2就是依賴於Interceptor來實現其核心功能的。
Interceptor在Struts2中的執行流程:
客戶端向伺服器傳送一個Action的請求,執行核心過濾器(doFilter方法);
在doFilter方法中呼叫executeAction()方法;
在executeAction()內部呼叫dispatcher.serviceAction()方法;
在dispatcher.serviceAction()內部建立一個Action代理,最終執行的是Action代理中的execute();
在execute()中呼叫ActionInvocation()的invoke()方法;
在invoke()中來執行一組攔截器(完成部分功能),再遞迴遍歷其他攔截器;
當攔截器全部執行完畢,就會執行目標Action,根據Action的返回結果進行頁面跳轉。
以上整體示意圖如下:
攔截器這裡只有弄清了其真正原理才能得心應手來操作,這裡先提供一個連結:https://blog.csdn.net/xwnxwn/article/details/7086567,之後等博主本人深入學習Struts2之後會附上詳細解讀Struts2框架的原理系列。
4.2 為什麼使用Struts2的攔截器?
Struts2的攔截器是Struts2框架設計的核心所在,利用攔截器可以使我們更加方便的來控制訪問許可權,攔截器比過濾器更加的精確,能夠允許我們直接過濾到指定的Action中的指定Method,使得許可權管理更加合理高效且方便。
4.3 怎樣使用Struts2的攔截器?
4.3.1 編寫攔截器類
編寫一個類實現Interceptor介面,或者繼承AbstractInterceptor類,或者繼承MethodFilterInterceptor類等;一般我們不使用Interceptor介面的方法,應為這種方法讓我們必須實現Interceptor中的init等無關的方法。
攔截器myInterceptor:
攔截器myInteceptor2:
4.3.2 對攔截器進行配置
定義攔截器來配置
說明:當配置中有global-result時要放在interceptors之後,在action中新增攔截器時不要忘記struts2的預設攔截器defaultStack,一旦我們在action中使用自定義攔截器後struts2預設攔截器就失效了,需要手動配置一下。
定義攔截器棧來配置
攔截效果圖:
4.4 Struts2的標籤庫
4.4.1 通用標籤庫(常用)
判斷標籤
<s:if>、<s:elseif>、<s:else>
<s:iterator>
其他常用的標籤
- <s:property/>
- <s:debug/>
- <s:date /> ---在頁面上進行日期格式化。
4.4.2 UI標籤庫(有爭議)
傳統表單標籤:
UI表單標籤:
從傳統表單與UI表單的效果圖對比可知,UI表單佈局更加工整、使用者體驗也更佳,編寫較為方便,但是業界對UI標籤的評價不一,UI標籤的最大優點是支援資料回顯,這是因為UI標籤能自動讀取值棧中相應的資料回顯,而傳統表單則需要自己來手動回顯。
如果您已經完成博主下的Struts2系列共4篇部落格,恭喜您已經入門struts2框架了,接下來將會更新Struts2實戰之J2EE網購整合,敬請期待!
----謝謝閱讀! ----知飛翀