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