當前位置:編程學習大全網 - 源碼破解 - Struts2簡介

Struts2簡介

  壹 什麽是Struts ?

 雖然Struts 號稱是壹個全新的框架 但這僅僅是相對Struts 而言 Struts 與Struts 相比 確實有很多革命性的改進 但它並不是新發布的新框架 而是在另壹個赫赫有名的框架 WebWork基礎上發展起來的 從某種程度上來講 Struts 沒有繼承Struts 的血統 而是繼承WebWork的血統 或者說 WebWork衍生出了Struts 而不是Struts 衍生了Struts 因為Struts 是WebWork的升級 而不是壹個全新的框架 因此穩定性 性能等各方面都有很好的保證 而且吸收了Struts 和WebWork兩者的優勢 因此 是壹個非常值得期待的框架

 Apache Struts 是壹個優雅的 可擴展的JAVA EE web框架 框架設計的目標貫穿整個開發周期 從開發到發布 包括維護的整個過程

 Apache Struts 即是之前大家所熟知的WebWork 在經歷了幾年的各自發展後 WebWork和Struts社區決定合二為壹 也即是Struts

  Struts 和Struts 的不同

  Action 類

 ◆Struts 要求Action類繼承壹個抽象基類 Struts 的壹個普遍問題是使用抽象類編程而不是接口

 ◆Struts Action類可以實現壹個Action接口 也可實現其他接口 使可選和定制的服務成為可能 Struts 提供壹個ActionSupport基類去實現 常用的接口 Action接口不是必須的 任何有execute標識的POJO對象都可以用作Struts 的Action對象

  線程模式

 ◆Struts Action是單例模式並且必須是線程安全的 因為僅有Action的壹個實例來處理所有的請求 單例策略限制了Struts Action能作的事 並且要在開發時特別小心 Action資源必須是線程安全的或同步的

 ◆Struts Action對象為每壹個請求產生壹個實例 因此沒有線程安全問題 (實際上 servlet容器給每個請求產生許多可丟棄的對象 並且不會導致性能和垃圾回收問題)

  Servlet 依賴

 ◆Struts Action 依賴於Servlet API 因為當壹個Action被調用時HttpServletRequest 和 HttpServletResponse 被傳遞給execute方法

 ◆Struts Action不依賴於容器 允許Action脫離容器單獨被測試 如果需要 Struts Action仍然可以訪問初始的request和response 但是 其他的元素減少或者消除了直接訪問HttpServetRequest 和 HttpServletResponse的必要性

  可測性

 ◆測試Struts Action的壹個主要問題是execute方法暴露了servlet API(這使得測試要依賴於容器) 壹個第三方擴展——Struts TestCase——提供了壹套Struts 的模擬對象(來進行測試)

 ◆Struts Action可以通過初始化 設置屬性 調用方法來測試 依賴註入 支持也使測試更容易

  捕獲輸入

 ◆Struts 使用ActionForm對象捕獲輸入 所有的ActionForm必須繼承壹個基類 因為其他JavaBean不能用作ActionForm 開發者經常創建多余的類捕獲輸入 動態Bean(DynaBeans)可以作為創建傳統ActionForm的選擇 但是 開發者可能是在重新描述(創建)已經存在的JavaBean(仍然會導致有冗余的javabean)

 ◆ Struts 直接使用Action屬性作為輸入屬性 消除了對第二個輸入對象的需求 輸入屬性可能是有自己(子)屬性的rich對象類型 Action屬性能夠通過web頁面上的taglibs訪問 Struts 也支持ActionForm模式 rich對象類型 包括業務對象 能夠用作輸入/輸出對象 這種ModelDriven 特性簡化了taglib對POJO輸入對象的引用

  表達式語言

 ◆Struts 整合了JSTL 因此使用JSTL EL 這種EL有基本對象圖遍歷 但是對集合和索引屬性的支持很弱

 ◆Struts 可以使用JSTL 但是也支持壹個更強大和靈活的表達式語言—— Object Graph Notation Language (OGNL)

  綁定值到頁面(view)

 ◆ Struts 使用標準JSP機制把對象綁定到頁面中來訪問

 ◆Struts 使用 ValueStack 技術 使taglib能夠訪問值而不需要把妳的頁面(view)和對象綁定起來 ValueStack策略允許通過壹系列名稱相同但類型不同的屬性重用頁面(view)

 類型轉換 ◆Struts ActionForm 屬性通常都是String類型 Struts 使用Commons Beanutils進行類型轉換 每個類壹個轉換器 對每壹個實例來說是不可配置的

 ◆Struts 使用OGNL進行類型轉換 提供基本和常用對象的轉換器

 校驗 ◆Struts 支持在ActionForm的validate方法中手動校驗 或者通過Commons Validator的擴展來校驗 同壹個類可以有不同的校驗內容 但不能校驗子對象

 ◆Struts 支持通過validate方法和XWork校驗框架來進行校驗 XWork校驗框架使用為屬性類類型定義的校驗和內容校驗 來支持chain校驗子屬性Action執行的控制 ◆Struts 支持每壹個模塊有單獨的Request Processors(生命周期) 但是模塊中的所有Action必須***享相同的生命周期

 ◆Struts 支持通過攔截器堆棧(Interceptor Stacks)為每壹個Action創建不同的生命周期 堆棧能夠根據需要和不同的Action壹起使用

  Struts 的工作流程圖

 

  工作流程圖

 工作流程當接收到壹個request Interceptor做壹些攔截或者初始的工作當外部的ervletrequest到來時初始到了servlet容器 傳遞給壹個標準的過濾器鏈ActionContextCleanUp這個在集成插件方面非常有用Other filters(SitMesh etc)

 調用FilterDispatecher會去查找相應的ActionMapper如果找到了相應的ActionMapper它將會將控制權限交給ActionProxy ActionProxy將會通過ConfigurationManager來查找配置struts xml下壹步將會 通過ActionInvocation來負責命令模式的實現(包括調用壹些攔截Interceptor框架在調用action之前)

 壹旦action返回 會查找相應的Result Result類型可以是 jsp或者freeMark 等這些組件和ActionMapper壹起返回給請求的url(註意攔截器的執行順序)

lishixinzhi/Article/program/Java/ky/201311/28090

  • 上一篇:文字的另類玩法遊戲
  • 下一篇:韓國有哪些著名的演員
  • copyright 2024編程學習大全網