概述本章講述Struts2的工作原理。讀者如果曾經學習過Struts1.x或者有過Struts1.x的開發經驗,那么千萬不要想當然地以為這一章可以跳過。實際上Struts1.x與Struts2并無我們想象的血緣關系。雖然Struts2的開發小組極力保留Struts1.x的習慣,但因為Struts2的核心設計完全改變,從思想到設計到工作流程,都有了很大的不同。
OGNL是Object Graphic Navigation Language(對象圖導航語言)的縮寫,它是一個開源項目。 Struts 2框架使用OGNL作為默認的表達式語言。相對EL表達式,它提供了平時我們需要的一些功能。
struts1.2和struts2區別Action類1.Struts1要求Action類要擴展自一個抽象基類。Struts1的一個共有的問題是面向抽象類編程而不是面向接口編程。2.Struts2的Action類實現了一個Action接口,連同其他接口一起來實現可選擇和自定義的服務。Struts2提供一個名叫ActionSupport的基類來實現一般使用的接口。雖然,Action接口不是必須的。任何使用execute方法的POJO對象可以被當作Struts2的Action對象來使用。
JSON插件提供了一種名為json的ResultType,一旦為某個Action指定了一個類型為json的Result,則該Result無需映射到任何視圖資源。將下載到的jsonplugin-0.7.jar文件復制到Web應用的WEB-INF路徑下,即可完成JSON插件的安裝。 JSON插件提供了一種名為json的ResultType,一旦為某個Action指定了一個類型為json的Result,則該Result無需映射到任何視圖資源。因為JSON插件會負責將Action里的狀態信息序列化成JSON格式的數據,并將該數據返回給客戶端頁面的JavaScript。
Struts2 Taglib抽象了不同表示技術,現在Struts2主要支持三種表示技術:JSP,FreeMarker和Velocity。但部分的Tag在三種表示技術下都可以使用,但是也有部分只能在某一種情況下使用。 Tab可以分為兩類:通用標簽和UI標簽。
Struts2框架中的Action是業務控制器,是Struts2框架的核心。用戶提交的所有請求,都是通過Action進行業務邏輯處理的。在Struts2框架中,Action是實現企業應用的關鍵部分。
Interceptor的接口定義沒有什么特別的地方,除了init和destory方法以外,intercept方法是實現整個攔截器機制的核心方法。而它所依賴的參數ActionInvocation則是我們之前章節中曾經提到過的著名的Action調度者。
Struts2是在WebWork2基礎發展而來的。和struts1一樣, Struts2也屬于MVC框架。不過有一點大家需要注意的是:盡管Struts2和struts1在名字上的差別不是很大,但Struts2和struts1在代碼編寫風格上幾乎是不一樣的。那么既然有了struts1,為何還要推出struts2。
spring2.5.5+struts2+ibatis 搭建
Struts1 要求Action類繼承一個抽象基類。Struts1 的一個普遍問題是使用抽象類變成而不是接口。Struts2 Action類可以實現一個Action接口,也可實現其他接口,可以實現其他接口,是可選和制定的服務成為可能。Struts2 提供一個ActionSupport基類去實現常用的接口。Action接口不是必須的,任何有execute標識的POJO對象都可以用做Struts2的Action對象。
Struts2架構圖,請求首先通過Filter chain,Filter主要包括ActionContextCleanUp,它主要清理當前線程的ActionContext和Dispatcher;FilterDispatcher主要通過AcionMapper來決定需要調用哪個Action。