




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Struts的體系結構
2002-12-6
5272
Struts的體系結構
(StrutsFrameworkArchitecture)
胡長城(銀狐999)
關鍵字
Struts,Framework,Architecture,Componennt,MVC
預備知識
在開始學習Struts以前,以下的知識點,需要有所了解:模型-視圖-控制的軟件構架模式,JSP/Servlet的web層應用,J2EE體系結構。如果對客戶標簽類(CustomerTagLib)有所了解也許更容易理解Struts本身的TagLib。概述
本文主要從概念上講解什么是strutsframework,它的框架結構,組件結構,以及簡單的配置講解。對于其應用請參考后面的“struts安裝及應用”和“struts實用案例分析”。
文章的包括了如下四大部分:
一、Framework的概念和體系簡介(FrameworkConceptionandArchitecture)
二、Struts的概念和體系結構(StrutsConceptionandArchitecture)
三、Struts的工作原理和組件(StrutsComponennts)
四、Struts配置文件簡介(StrutsDeploymentDescription)一、Framework概念
一直以來我們都說struts是一個webframework。那么讓我么先來看看什么是Framework。(我想用“框架”一詞來翻譯framework,可是后來越來越發(fā)現不太理想和完備,所以就直接用Framework一詞)
Framework概念并不是很新了,伴隨著軟件開發(fā)的發(fā)展,在多層的軟件開發(fā)項目中,可重用、易擴展的,而且是經過良好測試的軟件組件,越來越為人們所青睞。這意味著人們可以將充裕的時間用來分析、構建業(yè)務邏輯的應用上,而非繁雜的代碼工程。于是人們將相同類型問題的解決途徑進行抽象,抽取成一個應用框架。這也就是我們所說的Framework。
Framework的體系提供了一套明確機制,從而讓開發(fā)人員很容易的擴展和控制整個framework開發(fā)上的結構。通常,framework的結構中都有一個“命令和控制”組件("commandandcontrol"component)——FrameworkFactoryandManager。
圖片(2):Framework體系
通過基于請求響應(Request-Response)模式的應用framework,基本上有如下幾個表現邏輯結構組成。
(1)控制器(Controller)——控制整個framework中各個組件的協(xié)調工作。
(2)業(yè)務邏輯層(BusinessLogic)——這是framework所希望解決問題的關鍵。當然對framwork本身來說,這里僅僅只是概念和幾個提夠服務的基礎組件,真正的實現與客戶的業(yè)務邏輯接軌,還需要開發(fā)人員在framework上再次擴展。
(3)數據邏輯層(DataLogic)——絕大應用系統(tǒng)都需要涉及到數據交互,這一層次主要包括了數據邏輯和數據訪問接口。對于數據邏輯來說,如果你了解數據建模(DataModeling)可能就很容易理解。下面就進入我們的正題——Struts的結構二、Struts的概念和體系結構
Struts有一組相互協(xié)作的類(組件)、Serlvet以及jsptaglib組成。基于struts構架的web應用程序基本上符合JSPModel2的設計標準,可以說是MVC設計模式的一種變化類型。根據上面對framework的描述,我們很容易理解為什么說Struts是一個webframwork,而不僅僅是一些標記庫的組合。但Struts也包含了豐富的標記庫和獨立于該框架工作的實用程序類。
Struts有其自己的控制器(Controller),同時整合了其他的一些技術去實現模型層(Model)和視圖層(View)。在模型層,Struts可以很容易的與數據訪問技術相結合,包括EJB,JDBC和ObjectRelationBridge。在視圖層,Struts能夠與JSP,VelocityTemplates,XSL等等這些表示層組件想結合。2.1Struts的與WebApp的關系既然struts叫做webframework,那么其肯定主要基于web層的應用系統(tǒng)開發(fā)。按照J2EEArchitecture的標準,struts應當和jsp/servlet一樣,存在于webcontainer一層。如圖片(3)所顯示
圖片(3):Struts與WebApp的關系2.2Struts的體系結構
我們說strutsframework是MVC模式的體現,下面我們就從分別從模型、視圖、控制來看看struts的體系結構(Architecture)。圖片(4)顯示了strutsframework的體系結構響應客戶請求時候,各個部分工作的原理。
圖片(4):Struts體系結構個實例,所以你必須確定你的Action類運行在一個多線程的環(huán)境中。下圖顯示了一個execute()方法如何被訪問:
圖片(6):Action實例的execute()方法
注意,客戶自己繼承的Action子類,必須重寫execute()方法,因為Action類在默認情況下是返回null的。
3.3StrutsActionMapping
上面講到了一個客戶請求是如何被控制器轉發(fā)和處理的,但是,控制器如何知道什么樣的信息轉發(fā)到什么樣的Action類呢?這就需要一些與動作和請求信息相對應的映射配置說明。在struts中,這些配置映射信息是存儲在特定的XML文件(比如struts-config.xml)。
這些配置信息在系統(tǒng)啟動的時候被讀入內存,供strutsframework在運行期間使用。在內存中,每一個<action>元素都與org.apache.struts.action.ActionMapping類的一個實例對應。下表就顯示了一個登陸的配置映射。上面的配置表示:當可以通過/logonAction.do(此處假設配置的控制器映射為*.do)提交請求信息的時候,控制器將信息委托com.test.LogonAction處理。調用LogonAction實例的execute()方法。同時將Mapping實例和所對應的LogonFormBean信息傳入。其中name=LogonForm,使用的form-bean元素所聲明的ActionFormBean。有關form-bean的申明如下顯示。元素<forward>則表示了當Action實例的execute()方法運行完畢或,控制器根據Mapping可將響應信息轉到適當的地方。如上面現實,如果客戶登陸成功,則調用welcomeforward,將成功信息返回到/welcome.jsp頁面。在你的execute()方法的結尾可以使用下面的實例代碼而返回welcomeforward。當然你的welcomeforward必須在action元素屬性中定義,正如上面所聲明的那樣。在此稍稍說一下有關global-forwards的概念。其在配置文件中描述了整個應用系統(tǒng)可以使用的ActionForward,而不是僅僅是一個特定的Action。
3.4StrutsActionFormBean
在上面講解ActionServlet,ActionClasses和ActionMapping的時候,我們都提到了ActionFormBean的概念。一個應用系統(tǒng)的消息轉移(或者說狀態(tài)轉移)的非持久性數據存儲,是由ActionFormBean的負責保持的。
ActionForm的主要功能就是為Action的操作提供與客戶表單相映射的數據(如果在客戶指定的情況下,還包括對數據進行校驗)。Action負責對系統(tǒng)數據狀態(tài)的保持,而Action則負責根據業(yè)務邏輯的需要,對數據狀態(tài)進行修改,在改變系統(tǒng)狀態(tài)后,ActionForm則自動的回寫新的數據狀態(tài)并保持。
注意:在struts1.1中,ActionForm的校驗功能,逐漸被剝離出來(當然依然可以使用)。使用了validatorframework對整個應用系統(tǒng)的表單數據驗證進行統(tǒng)一管理。相信信息請參考:/~dwinterfeldt
在ActionForm的使用中,Struts提倡使用到值對象(ValueObject)。這樣將客戶或開發(fā)人員,對數據狀態(tài)與對象狀態(tài)能夠更加清晰的理解和使用。
對于每一個客戶請求,Strutsframework在處理ActionForm的時候,一般需要經歷如下幾個步驟:
(1)檢查Action的映射,確定Action中已經配置了對ActionForm的映射
(2)根據name屬性,查找formbean的配置信息
(3)檢查Action的formbean的使用范圍,確定在此范圍下,是否已經有此formbean的實例。
(4)假如當前范圍下,已經存在了此formbean的實例,而是對當前請求來說,是同一種類型的話,那么就重用。
(5)否則,就重新構建一個formbean的實例
(6)formbean的reset()方法備調用
(7)調用對應的setter方法,對狀態(tài)屬性賦值
(8)如果validatede的屬性北設置為true,那么就調用formbean的validate()方法。
注意:直接從ActionFrom類繼承的reset()和validate()方法,并不能實現什么處理功能,所以有必要自己重新覆蓋。
如果validate()方法沒有返回任何錯誤,控制器將ActionForm作為參數,傳給Action實例的execute()方法并執(zhí)行。
有必要提一下有關org.apache.struts.action.DynaActionForm。這是struts1.1新增的特性。其繼承自ActionForm,在struts早先版本中,我們必須人為的構造特定的ActionFrom子類,但是利用DynaActionForm,可以依據屬性集而動態(tài)的創(chuàng)建frombean。有關其詳細資料,請參考···
四、Struts的其他組件
Strutsframework本身提供了很多可擴展的組件或subframework,方便的開發(fā)人員在其構架上構建web層的應用系統(tǒng)。比如upload,collections,logging等等。讓我們來看看兩個比較重要的組件:validationgframework和strutstaglib。有關其他組件請參考Struts用戶手冊(/struts/userGuide)。
在stuts1.0中有些很不錯的概念和組件,比如benaUtils,Collections等等,后來被JakartaCommons項目組吸收而獨立處strutsframework。但是struts依然需要依賴這些組件才能正常的工作。
4.1ValidationFrameworkforStruts
在struts1.1中,新增了validationframework。增加了對form數據提交的驗證。將原本需要在ActionFromBean的validate()進行的驗證通過配置文件的描述進行驗證。
有關其詳細信息,請參考/~dwinterfeldt。個人建議對于小型應用系統(tǒng)可以采用這種配置方式,但是對于應用系統(tǒng)中有大量web層表單應用的系統(tǒng),并且業(yè)務需求變動比較大的,使用validationframework可能會加重開發(fā)難度、系統(tǒng)維護難度??梢越梃bvalidationframework的JavascriptValidatorTag。4.2StrutsTagLib
struts提供了一組可擴展的自定義標簽庫(TagLib),可以簡化創(chuàng)建用戶界面的過程。目前包括:BeanTags,HTMLTags,LogicTags,NestedTags,TemplateTags這幾個Taglib。有關StrutsTaglib的結構和使用,可以參考前面有關CutomerTagLib的介紹,有關起詳細資料,請參考4.3BeanUtils
這個組件的全稱是BeanIntrospectionUtilites。是屬于JakartaCommons項目組的。主要是幫助構建javabean的屬性操作的(getter,setter),已經提供一種動態(tài)定義和訪問bean的屬性。有關詳細信息,請參考。
/commons/beanutils.html
如果各位對這方面有很興趣,可以參考一些有關java反射(Reflectio)方面的資料。4.4Collections
這個組件主要是提供了一些集合或列表對象,在原有的javacollectionsframework的基礎上進行了擴展。詳細資料請參考:
/commons/collections.html以及
/viewcvs/~checkout~/jakarta-commons/collections/STATUS.html?rev=1.134.5Digester
這個組件翻譯成中文的意思是“匯編”。其主要功能是根據xml配置文件,初始化系統(tǒng)的一些java類對象。Digester幫助你指定XML與java對象之間映射模型,而且允許客戶話定制映射規(guī)則(rules)。詳細資料請參考
/commons/digester.html4.6其他相關組件
由于篇幅問題,還有一些組件就不一一介紹了,包括DatabaseConnectionPool,Upload,Logging,Pool,Services?;趕truts用戶手冊都有詳細介紹,請參考。五、Struts配置文件簡介(DeploymentDescription)
strutsframework根據配置文件指定(更確切的說,是控制器),才使得ServletAction,ActionMapping,Action,ActionForm這幾個不同層次的組件相互交互,協(xié)調的工作。前面也提到了,這些配置文件是在系統(tǒng)啟動的時候,讀入導內存中,供控制器使用的。
Strutsframework主要包括三部分的配置描述,一個是指定有關StrutsController及其相關的的配置描述(InitializationParameters),一個時對strutstaglib的描述,一個是struts組件(ActionMapping,Action,ActionForm)之間相互映射協(xié)調的關系5.1有關StrutsController及其相關的的配置描述
因為StrutsController的主要類ActionServlet是繼承自HttpServlet,所以必須像配置一個Servlet那樣配置ActionServlet類及其訪問映射。詳細信息請參考:
/struts/userGuide/building_controller.html#dd_config5.2有關strutstaglib的配置描述
如果你的webapplication打算使用Struts的taglib,那么你有必要在web.xml中對strutstaglib進行配置描述。有關詳細的描述和說明請參考
/struts/userGuide/building_controller.html#dd_config_taglib5.3有關StrutsActionMapping的配置描述
Struts本身有一個配置文件,通常情況為struts-config.xml。有關其DTD文檔的描述,請參考/struts/dtds/struts-config_1_1.dtd
(或struts-config_1_0.dtd)
一般struts-config(version1.1)包含了如下幾個部分:
(1)form-bean
(2)global-forwards
(3)action-mappings
(4)data-sources
有關詳細信息請參閱
/struts/userGuide/building_control
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 移動設備租賃市場用戶行為研究考核試卷
- 煙草生產線自動化控制技術考核試卷
- 管道工程行業(yè)政策導向與發(fā)展趨勢考核試卷
- 船舶貨運與物流供應鏈整合考核試卷
- 球類產品智能制造與工業(yè)考核試卷
- 航空公司航班運行數據分析考核試卷
- 清掃工具銷售與渠道拓展策略考核試卷
- 腈綸纖維制造考核試卷
- 機器人服務行業(yè)智能語音交互技術考核試卷
- 版權評估運營補充協(xié)議
- 華大新高考聯(lián)盟2025屆高三4月教學質量測評化學+答案
- 2025年中國防曬護理洗發(fā)露市場調查研究報告
- 建筑材料租賃標準合同范本7篇
- 2025-2030中國太陽能照明系統(tǒng)行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 國家電網招聘考試(金融類)專業(yè)考試歷年真題及答案
- (部編版)語文四年級上冊課外閱讀“天天練”100篇,附參考答案
- 靜療護理典型案例
- GB/T 19203-2003復混肥料中鈣、鎂、硫含量的測定
- 中醫(yī)醫(yī)師指導醫(yī)術實踐活動情況表
- (2015年第105號)已使用化妝品原料名稱目錄調整內容
- 西安電務段電子信息設備維護管理辦法
評論
0/150
提交評論