版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Struts的體系結(jié)構(gòu)
2002-12-6
5272
Struts的體系結(jié)構(gòu)
(StrutsFrameworkArchitecture)
胡長(zhǎng)城(銀狐999)
關(guān)鍵字
Struts,Framework,Architecture,Componennt,MVC
預(yù)備知識(shí)
在開(kāi)始學(xué)習(xí)Struts以前,以下的知識(shí)點(diǎn),需要有所了解:模型-視圖-控制的軟件構(gòu)架模式,JSP/Servlet的web層應(yīng)用,J2EE體系結(jié)構(gòu)。如果對(duì)客戶標(biāo)簽類(CustomerTagLib)有所了解也許更容易理解Struts本身的TagLib。概述
本文主要從概念上講解什么是strutsframework,它的框架結(jié)構(gòu),組件結(jié)構(gòu),以及簡(jiǎn)單的配置講解。對(duì)于其應(yīng)用請(qǐng)參考后面的“struts安裝及應(yīng)用”和“struts實(shí)用案例分析”。
文章的包括了如下四大部分:
一、Framework的概念和體系簡(jiǎn)介(FrameworkConceptionandArchitecture)
二、Struts的概念和體系結(jié)構(gòu)(StrutsConceptionandArchitecture)
三、Struts的工作原理和組件(StrutsComponennts)
四、Struts配置文件簡(jiǎn)介(StrutsDeploymentDescription)一、Framework概念
一直以來(lái)我們都說(shuō)struts是一個(gè)webframework。那么讓我么先來(lái)看看什么是Framework。(我想用“框架”一詞來(lái)翻譯framework,可是后來(lái)越來(lái)越發(fā)現(xiàn)不太理想和完備,所以就直接用Framework一詞)
Framework概念并不是很新了,伴隨著軟件開(kāi)發(fā)的發(fā)展,在多層的軟件開(kāi)發(fā)項(xiàng)目中,可重用、易擴(kuò)展的,而且是經(jīng)過(guò)良好測(cè)試的軟件組件,越來(lái)越為人們所青睞。這意味著人們可以將充裕的時(shí)間用來(lái)分析、構(gòu)建業(yè)務(wù)邏輯的應(yīng)用上,而非繁雜的代碼工程。于是人們將相同類型問(wèn)題的解決途徑進(jìn)行抽象,抽取成一個(gè)應(yīng)用框架。這也就是我們所說(shuō)的Framework。
Framework的體系提供了一套明確機(jī)制,從而讓開(kāi)發(fā)人員很容易的擴(kuò)展和控制整個(gè)framework開(kāi)發(fā)上的結(jié)構(gòu)。通常,framework的結(jié)構(gòu)中都有一個(gè)“命令和控制”組件("commandandcontrol"component)——FrameworkFactoryandManager。
圖片(2):Framework體系
通過(guò)基于請(qǐng)求響應(yīng)(Request-Response)模式的應(yīng)用framework,基本上有如下幾個(gè)表現(xiàn)邏輯結(jié)構(gòu)組成。
(1)控制器(Controller)——控制整個(gè)framework中各個(gè)組件的協(xié)調(diào)工作。
(2)業(yè)務(wù)邏輯層(BusinessLogic)——這是framework所希望解決問(wèn)題的關(guān)鍵。當(dāng)然對(duì)framwork本身來(lái)說(shuō),這里僅僅只是概念和幾個(gè)提夠服務(wù)的基礎(chǔ)組件,真正的實(shí)現(xiàn)與客戶的業(yè)務(wù)邏輯接軌,還需要開(kāi)發(fā)人員在framework上再次擴(kuò)展。
(3)數(shù)據(jù)邏輯層(DataLogic)——絕大應(yīng)用系統(tǒng)都需要涉及到數(shù)據(jù)交互,這一層次主要包括了數(shù)據(jù)邏輯和數(shù)據(jù)訪問(wèn)接口。對(duì)于數(shù)據(jù)邏輯來(lái)說(shuō),如果你了解數(shù)據(jù)建模(DataModeling)可能就很容易理解。下面就進(jìn)入我們的正題——Struts的結(jié)構(gòu)二、Struts的概念和體系結(jié)構(gòu)
Struts有一組相互協(xié)作的類(組件)、Serlvet以及jsptaglib組成。基于struts構(gòu)架的web應(yīng)用程序基本上符合JSPModel2的設(shè)計(jì)標(biāo)準(zhǔn),可以說(shuō)是MVC設(shè)計(jì)模式的一種變化類型。根據(jù)上面對(duì)framework的描述,我們很容易理解為什么說(shuō)Struts是一個(gè)webframwork,而不僅僅是一些標(biāo)記庫(kù)的組合。但Struts也包含了豐富的標(biāo)記庫(kù)和獨(dú)立于該框架工作的實(shí)用程序類。
Struts有其自己的控制器(Controller),同時(shí)整合了其他的一些技術(shù)去實(shí)現(xiàn)模型層(Model)和視圖層(View)。在模型層,Struts可以很容易的與數(shù)據(jù)訪問(wèn)技術(shù)相結(jié)合,包括EJB,JDBC和ObjectRelationBridge。在視圖層,Struts能夠與JSP,VelocityTemplates,XSL等等這些表示層組件想結(jié)合。2.1Struts的與WebApp的關(guān)系既然struts叫做webframework,那么其肯定主要基于web層的應(yīng)用系統(tǒng)開(kāi)發(fā)。按照J(rèn)2EEArchitecture的標(biāo)準(zhǔn),struts應(yīng)當(dāng)和jsp/servlet一樣,存在于webcontainer一層。如圖片(3)所顯示
圖片(3):Struts與WebApp的關(guān)系2.2Struts的體系結(jié)構(gòu)
我們說(shuō)strutsframework是MVC模式的體現(xiàn),下面我們就從分別從模型、視圖、控制來(lái)看看struts的體系結(jié)構(gòu)(Architecture)。圖片(4)顯示了strutsframework的體系結(jié)構(gòu)響應(yīng)客戶請(qǐng)求時(shí)候,各個(gè)部分工作的原理。
圖片(4):Struts體系結(jié)構(gòu)個(gè)實(shí)例,所以你必須確定你的Action類運(yùn)行在一個(gè)多線程的環(huán)境中。下圖顯示了一個(gè)execute()方法如何被訪問(wèn):
圖片(6):Action實(shí)例的execute()方法
注意,客戶自己繼承的Action子類,必須重寫(xiě)execute()方法,因?yàn)锳ction類在默認(rèn)情況下是返回null的。
3.3StrutsActionMapping
上面講到了一個(gè)客戶請(qǐng)求是如何被控制器轉(zhuǎn)發(fā)和處理的,但是,控制器如何知道什么樣的信息轉(zhuǎn)發(fā)到什么樣的Action類呢?這就需要一些與動(dòng)作和請(qǐng)求信息相對(duì)應(yīng)的映射配置說(shuō)明。在struts中,這些配置映射信息是存儲(chǔ)在特定的XML文件(比如struts-config.xml)。
這些配置信息在系統(tǒng)啟動(dòng)的時(shí)候被讀入內(nèi)存,供strutsframework在運(yùn)行期間使用。在內(nèi)存中,每一個(gè)<action>元素都與org.apache.struts.action.ActionMapping類的一個(gè)實(shí)例對(duì)應(yīng)。下表就顯示了一個(gè)登陸的配置映射。上面的配置表示:當(dāng)可以通過(guò)/logonAction.do(此處假設(shè)配置的控制器映射為*.do)提交請(qǐng)求信息的時(shí)候,控制器將信息委托com.test.LogonAction處理。調(diào)用LogonAction實(shí)例的execute()方法。同時(shí)將Mapping實(shí)例和所對(duì)應(yīng)的LogonFormBean信息傳入。其中name=LogonForm,使用的form-bean元素所聲明的ActionFormBean。有關(guān)form-bean的申明如下顯示。元素<forward>則表示了當(dāng)Action實(shí)例的execute()方法運(yùn)行完畢或,控制器根據(jù)Mapping可將響應(yīng)信息轉(zhuǎn)到適當(dāng)?shù)牡胤健H缟厦娆F(xiàn)實(shí),如果客戶登陸成功,則調(diào)用welcomeforward,將成功信息返回到/welcome.jsp頁(yè)面。在你的execute()方法的結(jié)尾可以使用下面的實(shí)例代碼而返回welcomeforward。當(dāng)然你的welcomeforward必須在action元素屬性中定義,正如上面所聲明的那樣。在此稍稍說(shuō)一下有關(guān)global-forwards的概念。其在配置文件中描述了整個(gè)應(yīng)用系統(tǒng)可以使用的ActionForward,而不是僅僅是一個(gè)特定的Action。
3.4StrutsActionFormBean
在上面講解ActionServlet,ActionClasses和ActionMapping的時(shí)候,我們都提到了ActionFormBean的概念。一個(gè)應(yīng)用系統(tǒng)的消息轉(zhuǎn)移(或者說(shuō)狀態(tài)轉(zhuǎn)移)的非持久性數(shù)據(jù)存儲(chǔ),是由ActionFormBean的負(fù)責(zé)保持的。
ActionForm的主要功能就是為Action的操作提供與客戶表單相映射的數(shù)據(jù)(如果在客戶指定的情況下,還包括對(duì)數(shù)據(jù)進(jìn)行校驗(yàn))。Action負(fù)責(zé)對(duì)系統(tǒng)數(shù)據(jù)狀態(tài)的保持,而Action則負(fù)責(zé)根據(jù)業(yè)務(wù)邏輯的需要,對(duì)數(shù)據(jù)狀態(tài)進(jìn)行修改,在改變系統(tǒng)狀態(tài)后,ActionForm則自動(dòng)的回寫(xiě)新的數(shù)據(jù)狀態(tài)并保持。
注意:在struts1.1中,ActionForm的校驗(yàn)功能,逐漸被剝離出來(lái)(當(dāng)然依然可以使用)。使用了validatorframework對(duì)整個(gè)應(yīng)用系統(tǒng)的表單數(shù)據(jù)驗(yàn)證進(jìn)行統(tǒng)一管理。相信信息請(qǐng)參考:/~dwinterfeldt
在ActionForm的使用中,Struts提倡使用到值對(duì)象(ValueObject)。這樣將客戶或開(kāi)發(fā)人員,對(duì)數(shù)據(jù)狀態(tài)與對(duì)象狀態(tài)能夠更加清晰的理解和使用。
對(duì)于每一個(gè)客戶請(qǐng)求,Strutsframework在處理ActionForm的時(shí)候,一般需要經(jīng)歷如下幾個(gè)步驟:
(1)檢查Action的映射,確定Action中已經(jīng)配置了對(duì)ActionForm的映射
(2)根據(jù)name屬性,查找formbean的配置信息
(3)檢查Action的formbean的使用范圍,確定在此范圍下,是否已經(jīng)有此formbean的實(shí)例。
(4)假如當(dāng)前范圍下,已經(jīng)存在了此formbean的實(shí)例,而是對(duì)當(dāng)前請(qǐng)求來(lái)說(shuō),是同一種類型的話,那么就重用。
(5)否則,就重新構(gòu)建一個(gè)formbean的實(shí)例
(6)formbean的reset()方法備調(diào)用
(7)調(diào)用對(duì)應(yīng)的setter方法,對(duì)狀態(tài)屬性賦值
(8)如果validatede的屬性北設(shè)置為true,那么就調(diào)用formbean的validate()方法。
注意:直接從ActionFrom類繼承的reset()和validate()方法,并不能實(shí)現(xiàn)什么處理功能,所以有必要自己重新覆蓋。
如果validate()方法沒(méi)有返回任何錯(cuò)誤,控制器將ActionForm作為參數(shù),傳給Action實(shí)例的execute()方法并執(zhí)行。
有必要提一下有關(guān)org.apache.struts.action.DynaActionForm。這是struts1.1新增的特性。其繼承自ActionForm,在struts早先版本中,我們必須人為的構(gòu)造特定的ActionFrom子類,但是利用DynaActionForm,可以依據(jù)屬性集而動(dòng)態(tài)的創(chuàng)建frombean。有關(guān)其詳細(xì)資料,請(qǐng)參考···
四、Struts的其他組件
Strutsframework本身提供了很多可擴(kuò)展的組件或subframework,方便的開(kāi)發(fā)人員在其構(gòu)架上構(gòu)建web層的應(yīng)用系統(tǒng)。比如upload,collections,logging等等。讓我們來(lái)看看兩個(gè)比較重要的組件:validationgframework和strutstaglib。有關(guān)其他組件請(qǐng)參考Struts用戶手冊(cè)(/struts/userGuide)。
在stuts1.0中有些很不錯(cuò)的概念和組件,比如benaUtils,Collections等等,后來(lái)被JakartaCommons項(xiàng)目組吸收而獨(dú)立處strutsframework。但是struts依然需要依賴這些組件才能正常的工作。
4.1ValidationFrameworkforStruts
在struts1.1中,新增了validationframework。增加了對(duì)form數(shù)據(jù)提交的驗(yàn)證。將原本需要在ActionFromBean的validate()進(jìn)行的驗(yàn)證通過(guò)配置文件的描述進(jìn)行驗(yàn)證。
有關(guān)其詳細(xì)信息,請(qǐng)參考/~dwinterfeldt。個(gè)人建議對(duì)于小型應(yīng)用系統(tǒng)可以采用這種配置方式,但是對(duì)于應(yīng)用系統(tǒng)中有大量web層表單應(yīng)用的系統(tǒng),并且業(yè)務(wù)需求變動(dòng)比較大的,使用validationframework可能會(huì)加重開(kāi)發(fā)難度、系統(tǒng)維護(hù)難度??梢越梃bvalidationframework的JavascriptValidatorTag。4.2StrutsTagLib
struts提供了一組可擴(kuò)展的自定義標(biāo)簽庫(kù)(TagLib),可以簡(jiǎn)化創(chuàng)建用戶界面的過(guò)程。目前包括:BeanTags,HTMLTags,LogicTags,NestedTags,TemplateTags這幾個(gè)Taglib。有關(guān)StrutsTaglib的結(jié)構(gòu)和使用,可以參考前面有關(guān)CutomerTagLib的介紹,有關(guān)起詳細(xì)資料,請(qǐng)參考4.3BeanUtils
這個(gè)組件的全稱是BeanIntrospectionUtilites。是屬于JakartaCommons項(xiàng)目組的。主要是幫助構(gòu)建javabean的屬性操作的(getter,setter),已經(jīng)提供一種動(dòng)態(tài)定義和訪問(wèn)bean的屬性。有關(guān)詳細(xì)信息,請(qǐng)參考。
/commons/beanutils.html
如果各位對(duì)這方面有很興趣,可以參考一些有關(guān)java反射(Reflectio)方面的資料。4.4Collections
這個(gè)組件主要是提供了一些集合或列表對(duì)象,在原有的javacollectionsframework的基礎(chǔ)上進(jìn)行了擴(kuò)展。詳細(xì)資料請(qǐng)參考:
/commons/collections.html以及
/viewcvs/~checkout~/jakarta-commons/collections/STATUS.html?rev=1.134.5Digester
這個(gè)組件翻譯成中文的意思是“匯編”。其主要功能是根據(jù)xml配置文件,初始化系統(tǒng)的一些java類對(duì)象。Digester幫助你指定XML與java對(duì)象之間映射模型,而且允許客戶話定制映射規(guī)則(rules)。詳細(xì)資料請(qǐng)參考
/commons/digester.html4.6其他相關(guān)組件
由于篇幅問(wèn)題,還有一些組件就不一一介紹了,包括DatabaseConnectionPool,Upload,Logging,Pool,Services?;趕truts用戶手冊(cè)都有詳細(xì)介紹,請(qǐng)參考。五、Struts配置文件簡(jiǎn)介(DeploymentDescription)
strutsframework根據(jù)配置文件指定(更確切的說(shuō),是控制器),才使得ServletAction,ActionMapping,Action,ActionForm這幾個(gè)不同層次的組件相互交互,協(xié)調(diào)的工作。前面也提到了,這些配置文件是在系統(tǒng)啟動(dòng)的時(shí)候,讀入導(dǎo)內(nèi)存中,供控制器使用的。
Strutsframework主要包括三部分的配置描述,一個(gè)是指定有關(guān)StrutsController及其相關(guān)的的配置描述(InitializationParameters),一個(gè)時(shí)對(duì)strutstaglib的描述,一個(gè)是struts組件(ActionMapping,Action,ActionForm)之間相互映射協(xié)調(diào)的關(guān)系5.1有關(guān)StrutsController及其相關(guān)的的配置描述
因?yàn)镾trutsController的主要類ActionServlet是繼承自HttpServlet,所以必須像配置一個(gè)Servlet那樣配置ActionServlet類及其訪問(wèn)映射。詳細(xì)信息請(qǐng)參考:
/struts/userGuide/building_controller.html#dd_config5.2有關(guān)strutstaglib的配置描述
如果你的webapplication打算使用Struts的taglib,那么你有必要在web.xml中對(duì)strutstaglib進(jìn)行配置描述。有關(guān)詳細(xì)的描述和說(shuō)明請(qǐng)參考
/struts/userGuide/building_controller.html#dd_config_taglib5.3有關(guān)StrutsActionMapping的配置描述
Struts本身有一個(gè)配置文件,通常情況為struts-config.xml。有關(guān)其DTD文檔的描述,請(qǐng)參考/struts/dtds/struts-config_1_1.dtd
(或struts-config_1_0.dtd)
一般struts-config(version1.1)包含了如下幾個(gè)部分:
(1)form-bean
(2)global-forwards
(3)action-mappings
(4)data-sources
有關(guān)詳細(xì)信息請(qǐng)參閱
/struts/userGuide/building_control
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- racemic-6-7-Dihydroxy-cannabichromene-生命科學(xué)試劑-MCE-9913
- 2-Isopropyl-5-methylanisole-生命科學(xué)試劑-MCE-4177
- 2025年度解除租賃合同簡(jiǎn)易協(xié)議書(shū)(體育場(chǎng)館)
- 二零二五年度城市商業(yè)圈門(mén)市房租賃與商業(yè)資源整合合同
- 二零二五年度電子租房合同附租客租賃滿意度調(diào)查
- 2025年度員工離職補(bǔ)償及保密協(xié)議
- 二零二五年度社區(qū)車位使用權(quán)共有管理協(xié)議書(shū)
- 施工現(xiàn)場(chǎng)施工防火制度
- 教育機(jī)構(gòu)電力供應(yīng)的未來(lái)趨勢(shì)-分布式變電站
- 音樂(lè)學(xué)院師資隊(duì)伍的音樂(lè)教育與創(chuàng)新發(fā)展
- 2025-2030年中國(guó)電動(dòng)高爾夫球車市場(chǎng)運(yùn)行狀況及未來(lái)發(fā)展趨勢(shì)分析報(bào)告
- 河南省濮陽(yáng)市2024-2025學(xué)年高一上學(xué)期1月期末考試語(yǔ)文試題(含答案)
- 長(zhǎng)沙市2025屆中考生物押題試卷含解析
- 2024年08月北京中信銀行北京分行社會(huì)招考(826)筆試歷年參考題庫(kù)附帶答案詳解
- 2024年芽苗菜市場(chǎng)調(diào)查報(bào)告
- 蘇教版二年級(jí)數(shù)學(xué)下冊(cè)全冊(cè)教學(xué)設(shè)計(jì)
- 職業(yè)技術(shù)學(xué)院教學(xué)質(zhì)量監(jiān)控與評(píng)估處2025年教學(xué)質(zhì)量監(jiān)控督導(dǎo)工作計(jì)劃
- 金字塔原理與結(jié)構(gòu)化思維考核試題及答案
- 廣東省梅州市2023-2024學(xué)年七年級(jí)上學(xué)期期末數(shù)學(xué)試題
- 《革蘭陽(yáng)性球菌》課件
- 基礎(chǔ)護(hù)理學(xué)導(dǎo)尿操作
評(píng)論
0/150
提交評(píng)論