一、Struts2 的簡介
1. 雖然 struts2 號稱是一個全新的框架,但是這僅僅是相對于 struts1 而言的.
2. Struts2 和 struts1 相比,確實有很多革命性的改進(jìn),但是并不是新發(fā)布的新框架
3. 是另一個框架 WebWork 基礎(chǔ)上發(fā)展起來的.
4. Struts2 沒有繼承 struts1 的血統(tǒng),而是繼承 webWork 的血統(tǒng).
5. struts2是 WebWork 的升級,而不是一個全新的框架,穩(wěn)定性和性能等各方面都有很好的保證
6. 而且吸收了 struts1 和 WebWork 兩者的優(yōu)勢,因此是一個非常值得期待的框架
二、 Apache Struts2 是一個可擴(kuò)展的 Java EE WEB框架. 框架設(shè)計的目標(biāo)貫穿整個開發(fā)的周期
三、 Struts2 和 Struts1 的不同
1. Action類:
i. Struts1 要求 Action 類繼承一個抽象基類. Struts1 的一個普遍的問題是使用抽象類編程而不是接口
ii. Struts2 Action 類可以實現(xiàn)一個 Action 接口,也可實現(xiàn)其他的接口,使可選和定制的服務(wù)稱為可能.
iii. Struts2 提供了一個 ActionSupport 基類去實現(xiàn)常用的接口; Action接口不是必須的,任何有 execute 標(biāo)識的POJO
對象都可以用作 Struts2 的 Action 對象
2. 線程模式:
i. Struts1 Action 是單例的模式并且必須是線程安全的,因為僅有 Action 的一個實例來處理所有的請求.單例的策略限制了
ii. Struts1 Action 能做的事情,并且要在開發(fā)的時候特別的小心. Action 資源必須是線程安全或者同步的
iii. Struts2 Action 對象為每一個請求產(chǎn)生一個實例,因此沒有線程安全的問題
3. Servlet依賴:
i. Struts1 Action 依賴于 Servlet API,因為當(dāng)一個Action被調(diào)用 HttpServletRequest 和 HttpServletResponse 被傳遞給 execute() 方法
ii. Struts2 Action 不依賴于容器,允許 Action 脫離容器單獨的被測試.如果需要的話 Struts2 Action 仍然可以訪問初始的 request 和 response
iii. 但是,其他的元素減少或者消除了直接訪問 HttpServletRequest 和 HttpServletResponse 的必要性
4. 可測性:
i. Struts1 Action 測試的一個主要的問題是 execute 方法暴露了 Servlet API (使得測試要依賴容器).一個第三方的擴(kuò)展
ii. Struts TestCase -- 提供了一套 Struts1 的模擬對象 (來進(jìn)行測試)
iii. Struts2 Action 可以通過初始化, 設(shè)置屬性,調(diào)用方法來測試 "依賴注入" 支持也使得測試更加的容易
5. 捕獲輸入:
i. Struts1 Action 使用ActionForm對象來捕獲輸入.所有的 ActionForm 必須繼承一個基類.因為其他的JavaBean 不能用作
ii. ActionForm ,開發(fā)者經(jīng)常創(chuàng)建多余的類捕獲輸入.動態(tài)的 Bean (DynaBeans) 可以作為創(chuàng)建傳統(tǒng)的ActionForm選擇,但是,開發(fā)者可能是在重新描述(創(chuàng)建)已經(jīng)存在的 JavaBean
iii. 會導(dǎo)致冗余的 JavaBean)
iv. Struts2 Action 直接使用 Action 屬性作為輸入的屬性,消除了對第二個輸入對象的需求. Action 屬性能夠通過web頁面上的
taglibs 訪問. Struts2 也支持 ActionForm 模式
6. 表達(dá)式語言:
i. Struts1 整合了 JSTL ,因此使用 JSTL EL .這種EL 的基本的對象圖遍歷,但是對集合和索引屬性的支持很弱
ii. Struts2 可以使用 JSTL ,但是也支持一個更強大的和靈活的表達(dá)式語言 -- "Object Graph Notation Language" (OGNL)
7. 綁定值到頁面 (view) :
i. Struts1 使用標(biāo)準(zhǔn) JSP 機制把對象綁定到頁面來訪問
ii. Struts2 使用 "ValueStack" 技術(shù),使 taglib 能夠訪問值而不需要把你的頁面 (view) 和對象綁定起來
iii. ValueStack 策略允許通過一些列的名稱相同但是類型不同的屬性重用頁面 (view)
8. 類型的轉(zhuǎn)換 :
i. Struts1 ActionForm 屬性通常都是 String 類型的. Struts1使用 Commons-Beanutils 進(jìn)行類型的轉(zhuǎn)換,每個類一個轉(zhuǎn)換器,對每一個實例來說是不可配置的
ii. Struts2 使用OGNL 進(jìn)行類型的轉(zhuǎn)換. 提供基本的和常用的對象的轉(zhuǎn)換器
9. 校驗 :
i. Struts1 支持在 ActioNForm 的 validate 方法中手動的校驗,或者通過 Commons Validator 的擴(kuò)展來校驗.同一個類可以有不同的校驗內(nèi)容,但不能校驗子對象
ii. Struts2 支持通過 validate 方法和 XWork 校驗框架來進(jìn)行校驗. XWork 校驗框架使用為屬性類類型定義的校驗和內(nèi)容校驗
來支持 chain 校驗子屬性
10. Action 執(zhí)行的控制 :
i. Struts1 支持每一個模塊有單獨的 Request Processors (生命周期);但是模塊中的所有的 Action 必須功效那個相同的生命周期
ii. Struts2 支持通過攔截器堆棧 (Interceptor Stacks) 為每一個 Action 創(chuàng)建不同的生命周期.
iii. 堆棧能夠根據(jù)需要和不同的 Action 一起使用
四、 Eclipse 中繼承 Struts2
1. commons-logging-1.0.4.jar
Struts2框架的日志包
2. freemarker-2.3.8.jar
Struts2的 UI 標(biāo)簽的模板
3. ognl-2.6.11.jar
對象導(dǎo)航語言包
4. struts2-core.2.0.11.jar
Struts框架的核心包
5. xwork-2.0.4.jar
XWork類庫,Struts2 基于此構(gòu)建
五、案例
1. 基于 Struts2 創(chuàng)建一個簡單的登陸項目
2. 導(dǎo)入 Struts2 核心支持包
3. 在 web.xml 中配置 FilterDispatcher
4. 開發(fā) DAO
5. 開發(fā) action
6. 編寫前臺顯示的頁面
7. 創(chuàng)建 struts.xml
六、 Struts2 處理用戶輸入信息
1. 利用 action 類的屬性接受用戶輸入
2. 利用領(lǐng)域?qū)ο蠼邮苡脩糨斎?/span>
3. 使用 ModelDriver 模式接受用戶輸入