版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
WebMVCwiththeSpringFrameworkJuergenHoeller1.Introduction:SpringtheApplicationFrameworkWhenfirstconfrontedwiththeSpringFramework,onemightbetemptedtothink:"Ohno,notyetanotherwebframework".ThisarticlewilloutlinewhySpringisn'tparticularlyawebframeworkbutagenericlightweightapplicationframeworkwithdedicatedwebsupport,andshowthearchitecturaldifferencestoStrutsandWebWorkIncontrasttoStrutsorWebWork,Springisanapplicationframeworkforalllayers:Itoffersabeanconfigurationfoundation,AOPsupport,aJDBCabstractionframework,abstracttransactionsupport,etc.Itisaverynon-intrusiveeffort:YourapplicationclassesdonotneedtodependonanySpringclassesifnotnecessary,andyoucanreuseeverypartonitsownifyouliketo.Fromitsverydesign,theframeworkencouragescleanseparationoftiers,mostimportantlywebtierandbusinesslogic:e.g.thevalidationframeworkdoesnotdependonwebcontrollers.Majorgoalsarereusabilityandtestability:Unnecessarycontainerorframeworkdependenciescanbeconsideredavoidableevils.Ofcourse,Spring'sownwebsupportisnicelyintegratedwiththeframework'sgeneralpatterns.Nevertheless,replacingthewebsolutionwithStruts,WebWork,orthelikeiseasy.BothwithSpring'swebsupportoradifferentone,Springallowsforbuildingatruededicatedmiddletierinthewebcontainer,withtheoptiontoreuseexactlythesamebusinesslogicintestenvironmentsorstandaloneapplications.AndwithinJ2EE,yourbusinesslogicwillnotunnecessarilydependoncontainerserviceslikeJTAorEJB-allowingcomplex,well-architectedwebapplicationstorunina"simple"containerlikeTomcatorResin.NotethatSpringdoesn'tgenerallyaimtocompetewithexistingsolutions.ItratherfostersseamlessintegrationwithstandardslikeServlet,JSP,JTA,JNDI,JDBC,andJDO,andwell-suitedtoolslikeHibernate,Velocity,Log4J,andCaucho'sHessian/Burlap.Theframeworkisdesignedtogrowwiththeneedsofyourapplications,intermsoftechnologychoice:Forexample,youwillprobablyuseJTAviaSpring'sJtaTransactionManagerifyouneeddistributedtransactions-butonlythen,asthereareperfectreplacementsforsingledatabases,likeDataSourceTransactionManagerorHibernateTransactionManager.2.WebMVC:TheDesignofSpring'sWebFrameworkSpring'swebframeworkisdesignedaroundaDispatcherServletthatdispatchesrequeststohandlers,withconfigurablehandlermappings,viewresolution,andlocaleandthemeresolution.ThedefaulthandlerisaverysimpleControllerinterface,justofferinga"ModelAndViewhandleRequest(request,response)"method.Thiscanalreadybeusedforapplicationcontrollers,butyouwillprefertheincludedimplementationhierarchy,consistingofAbstractController,AbstractCommandController,word文檔 可自由復制編輯MultiActionController,SimpleFormController,AbstractWizardFormController.Applicationcontrollerswilltypicallybesubclassesofthose.Notethatyoucanchooseanappropriatebaseclass:Ifyoudon'thaveaform,youdon'tneedaFormController.ThisisamajordifferencetoStruts.Youcantakeanyobjectascommandorformobject:There'snoneedtoimplementaninterfaceorderivefromabaseclass.Spring'sdatabindingishighlyflexible,e.g.ittreatstypemismatchesasvalidationerrorsthatcanbeevaluatedbytheapplication,notassystemerrors.Soyoudon'tneedtoduplicateyourbusinessobjects'propertiesasStringsinyourformobjects,justtobeabletohandleinvalidsubmissions,ortoconverttheStringsproperly.Instead,it'softenpreferabletobinddirectlytoyourbusinessobjects.ThisisanothermajordifferencetoStrutswhichisbuiltaroundrequiredbaseclasseslikeActionandActionForm-foreverytypeofaction.ComparedtoWebWork,Springhasmoredifferentiatedobjectroles:ItsupportsthenotionofaController,anoptionalcommandorformobject,andamodelthatgetspassedtotheview.Themodelwillnormallyincludethecommandorformobjectbutalsoarbitraryreferencedata.Instead,aWebWorkActioncombinesallthoserolesintoonesingleobject.WebWorkdoesallowyoutouseexistingbusinessobjectsaspartofyourform,butjustbymakingthembeanpropertiesoftherespectiveActionclass.Finally,thesameActioninstancethathandlestherequestgetsusedforevaluationandformpopulationintheview.Thus,referencedataneedstobemodelledasbeanpropertiesoftheActiontoo.Thesearearguablytoomanyrolesinoneobject.Regardingviews:Spring'sviewresolutionisextremelyflexible.AControllerimplementationcanevenwriteaviewdirectlytotheresponse,returningnullasModelAndView.Inthenormalcase,aModelAndViewinstanceconsistsofaviewnameandamodelMap,containingbeannamesandcorrespondingobjects(likeacommandorform,referencedata,etc).Viewnameresolutionishighlyconfigurable,eitherviabeannames,viaapropertiesfile,orviayourownViewResolverimplementation.TheabstractmodelMapallowsforcompleteabstractionoftheviewtechnology,withoutanyhassle:BeitJSP,Velocity,oranythingelse-everyrenderercanbeintegrateddirectly.ThemodelMapsimplygetstransformedintoanappropriateformat,likeJSPrequestattributesoraVelocitytemplatemodel.3.Integration:UsingaDifferentWebFrameworkwithSpringManyteamswilltrytoleveragetheirinvestmentsintermsofknow-howandtools,bothforexistingprojectsandfornewones.Concretely,therearenotonlyalargenumberofbooksandtoolsforStrutsbutalsoalotofdevelopersthathaveexperiencewithit.Thus,ifyoucanlivewithword文檔 可自由復制編輯Struts'architecturalflaws,itcanstillbeaviablechoicefortheweblayer.ThesameappliestoWebWorkandotherwebframeworks.Ifyoudon'twanttouseSpring'swebMVCbutintendtoleverageothersolutionsthatSpringoffers,youcanintegratethewebframeworkofyourchoicewithSpringeasily.SimplystartupaSpringrootapplicationcontextviaitsContextLoaderListener,andaccessitviaitsServletContextattribute(orSpring'srespectivehelpermethod)fromwithinaStrutsorWebWorkaction.Notethattherearen'tany"plugins"involved,thereforenodedicatedintegration:Fromtheviewoftheweblayer,you'llsimplyuseSpringasalibrary,withtherootapplicationcontextinstanceasentrypoint.AllyourregisteredbeansandallofSpring'sservicescanbeatyourfingertipsevenwithoutSpring'swebMVC.Springdoesn'tcompetewithStrutsorWebWorkinthisusage,itjustaddressesthemanyareasthatthepurewebframeworksdon't,frombeanconfigurationtodataaccessandtransactionhandling.SoyouareabletoenrichyourapplicationwithaSpringmiddletierand/ordataaccesstier,evenifyoujustwanttousee.g.thetransactionabstractionwithJDBCorHibernate.4.FeatureCheckListIfjustfocussingonthewebsupport,someofSpring'suniquefeaturesare:.Clearseparationofroles:controllervsvalidatorvscommandobjectvsformobjectvsmodelobject,DispatcherServletvshandlermappingvsviewresolver,etc..PowerfulandstraightforwardconfigurationofbothframeworkandapplicationclassesasJavaBeans,includingeasyin-betweenreferencingviaanapplicationcontext,e.g.fromwebcontrollerstobusinessobjectsandvalidators..Adaptability,non-intrusiveness:UsewhateverControllersubclassyouneed(plain,command,form,wizard,multiaction,oracustomone)foragivenscenarioinsteadofderivingfromAction/ActionFormforeverything..Reusablebusinesscode,noneedforduplication:YoucanuseexistingbusinessobjectsascommandorformobjectsinsteadofmirroringtheminspecialActionFormsubclasses..Customizablebindingandvalidation:typemismatchesasapplication-levelvalidationerrorsthatkeeptheoffendingvalue,localizeddateandnumberbinding,etcinsteadofString-onlyformobjectswithmanualparsingandconversiontobusinessobjects.Customizablehandlermapping,customizableviewresolution:flexiblemodeltransfervianame/valueMap,handlermappingandviewresolutionstrategiesfromsimpletosophisticatedinsteadofonesingleway.Customizablelocaleandthemeresolution,supportforJSPswithandwithoutSpringtaglibrary,supportforJSTL,supportforVelocitywithouttheneedforextrabridges,etc.SimplebutpowerfultaglibrarythatavoidsHTMLgenerationatanycost,allowingformaximumflexibilityintermsofmarkupcode.word文檔 可自由復制編輯翻譯文稿Spring的webMVC構架模式JuergenHoeller介紹:Spring應用構架當你第一次看到 Spring的時候,你一定會說:"哦不,又一種web構架".這篇文章將告訴你Spring明顯區(qū)別于其他輕量級 applicationframework, 它將專注于web的支持,與struts 和webwork有著明顯的區(qū)別。在和struts 和webwork的對比上,Spring 是一個服務于所有層面的applicationframework: 提供了bean的配置基礎,AOP的支持,JDBC的提取框架,抽象事務支持,等等。它有一個非常顯著的特點:在某個層面上如果你不需要Spring的支持,你就可以不使用 String 的class,只使用它的某一部分的功能。從它的設計理念,你可以看到 String 幫助你實現(xiàn)了真正的邏輯層和 web層的分離:例如。一個校驗應用將不用依靠 controllers ,就可以實現(xiàn)。這樣的目標是 更好的重用和易測:過分依靠不必要的容器和框架將不能實現(xiàn)這一點。當然,Spring的自己的web支持和通??蚣苣J降募氈峦暾?然而,Spring替換struts,webwork或者其他的web方案非常的容易.對于Spring的web支持或者不同的地方,Spring允許你在web容器里面建立一個中間層,在測試環(huán)境或者標準獨立的應用里面來設置重用你的商務邏輯.還有在J2EE環(huán)境里面,你的商務邏輯不必依靠容器提供的服務,像JTA,EJB的支持.良好的構架的web應用可以運行在任何容器上,如,Tomcat或者Resin.值得注意的是,Spring不是和已經(jīng)存在的解決方案進行競爭 . 我們鼓勵結合標準的技術,如,Servlet, JSP,JTA,JNDI,JDBC,andJDO, 和非常匹配的工具,如, Hibernate,Velocity,Log4J,andCaucho'sHessian/Burlap. 這個框架的的設計思想是在你的應用需要改良的時候,你將會做一些技術的選擇 :例如,如果你需要分布式事務處理,你可能需要用Spring的JtaTransactionManager來實現(xiàn)JTA服務.或者,用DataSourceTransactionManagerorHibernateTransactionManager來實現(xiàn)美妙完美的單個數(shù)據(jù)庫交換。WebMVC:Springweb框架的設計思想Spring框架通過配置操作mappings,展示resolution,本地化和模版集成圍繞著分派請求操作的servlet-DispatcherServlet設計的.缺省的操作是一個非常簡單的控制接口,他只提供了ModelAndViewhandleRequest(request,response)方法.這將用于一個應用的控制,但是,如果你想包含多個層次的控制,AbstractController,AbstractCommandController,MultiActionController,SimpleFormController,AbstractWizardFormController將幫助你完成.應用控制將代表那些子系統(tǒng).注意,你可以選擇一個適當?shù)幕?:如果你沒有webform,你就不必用FormController.這就是和Struts最大的不同.你可以通過命令或者form對象來操作任何對象:這不需要接口工具或者一個基礎類的驅動.Spring的數(shù)據(jù)邦定是非常的靈活的.舉例來說,它描述了具有在應用范圍內的校驗錯誤的輸入機制,word文檔 可自由復制編輯但不是系統(tǒng)錯誤.所以在你的form對象里面你不必復制你的業(yè)務對象的 string屬性,只操作出錯的子任務,或者適當?shù)剞D換 string. 換句話說,它通??梢院芎玫闹苯影疃愕臉I(yè)務對象 . 這也是和struts 圍繞請求基礎類Action 和ActionForm(每個action 操作類型)建立主要的不同之一. 對比WebWork,Sping更多的區(qū)別在于對象角色:Sping支持控制器的感念,一個操作命令或者form對象,和得到數(shù)據(jù)傳遞給視圖的模式.這個模式通常包含命令和form對象,但有時也包含任意的參考數(shù)據(jù).換句話說,一個WebWorkAction聯(lián)合所有這些角色到一個單獨的對象.WebWork允許你用已經(jīng)存在的業(yè)務對象作為你form的一部分,但是只生成各自 Action 的bean屬性. 最后,操作請求的Action 實例在一個視圖里面獲得付值和 formpopulation. 然而,參考數(shù)據(jù)也需要作為Action 的屬性被模擬. 一個類里面有太多的角色是值得討論的 . 關于視圖:Spring 的視圖方案非常的靈活. 一個控制器執(zhí)行可以通過 response返回ModelAndView對象null, 就可以直接寫到一個視圖 .在通常的狀況下,一個ModelAndView實例結合了 一個view和一個modelMap,包含了beanname和通訊對象(像命令或者form,參考數(shù)據(jù)等等).View名稱是非常高端的的配置,不是通過beanname,一個properties文件就是通過你自己的ViewResolver.這個抽象的modelMap允許你在視圖層面完成提取,沒有任何的爭辯:JSP,Velocity,或者其他,每一種都可以直接完整使用.這個modelMap還可以簡單得得到適當?shù)母袷交瘮?shù)據(jù)的轉換,像JSP請求屬性或者Velocity模版模式.3.集成:用Spring一個不同web框架許多開發(fā)團隊將為他們已有的項目或者新的項目已經(jīng)獲得的期限和工具進行投資.這里沒有像Struts那樣大量的圖書和工具,但是同樣我們有大量的擁有Spring開發(fā)技巧的開發(fā)人員.然而,如果你愿意生活在Struts的構架瑕疵中的話,他將是你在web層開發(fā)不錯的選擇.當然,其他應用也是一樣.如果你不想用Spring的webMVC,但是想借用Spring嫁接其他的解決方案,你可以非常簡單地通過Spring 繼承你自己的 web框架.你可以非常簡單地通過ContextLoaderListener 啟動一個Springrootapplicationcontext, 并且,通過Struts 或者WebWork的action 利用ServletContext 屬性(或者Spring的helper方法)存取它. 值得注意的是, 這里沒有任何的 "plugins" 被調用,因此沒有專門的集成:來自web層的視圖, 你可以簡單的將 Spring作為一個管理applicationcontext實例入口點的類庫.所有你注冊bean和Spring服務都可以在不需要Spring的webMVC的情況下都可以被你輕松掌握.Spring不是和Struts,WebWork這些應用進行競爭,它將作為一個純web框架應用于很多領域,因為它不需要配置數(shù)據(jù)存儲和事務操作.所以,你可以利用Spring提供的中間層和數(shù)據(jù)存儲層來豐富你的應用,甚至,你想用JDBC或者Hibernate進行事務抽象.4.特點核對列表如果聚焦于web支持,Spring的一些顯著特點是:清楚地角色分離:controller,validator,commandobject,formobject,modelobject, 和DispatcherServlet,handlermappingvsviewresolver, 等等強大而且直接的框架和作為JavaBeans的應用配置,包括簡單的參照和應用內容,例如,從web控制器到業(yè)務對象和數(shù)據(jù)校驗.適應性,外掛:無論什么樣的控制器你都需要得到代替Action/ActionForm所做的每件事情的方案(簡單,命令,form,范例,多重action, 或者定制一個)重用業(yè)務邏輯代碼,不需要復制:你可以用已經(jīng)有word文檔 可自由復制編輯的業(yè)務邏輯對象作為命令或則 form對象代替反射特定的 ActionForm子類. 可訂制的邦定和數(shù)據(jù)校驗:作為應用級的輸入機制的錯誤校驗 ,固定日期和數(shù)字邦定,例如,通過手動檢查和轉換業(yè)務對象來替換單個的 string ??捎喼频牟僮?可訂制的視圖方案:通過name/valueMap靈活的模型傳送,用一個簡單的方法從簡單到復雜操作映射和視圖方案策略 .本地定制和主題方案:Spring 沒有taglib, 完全支持于JSPs,JSTL,不需要額外的連接就可以支持 Velocity, 等等. 簡單但
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年醫(yī)用材料制造項目投資申請報告代可行性研究報告
- 2024項目程序代碼開發(fā)安全規(guī)范
- 資產(chǎn)評估學教程-練習答案 2
- 2023-2024學年廣東省深圳市龍華區(qū)九年級(上)期中英語試卷
- 百家號批量發(fā)布軟件怎么賽選關鍵詞
- 三年級數(shù)學計算題專項練習及答案
- 電冰箱、空調器安裝與維護電子教案 2.2 電冰箱的拆裝
- 再生育申請審批表
- 廣東省深圳市羅湖區(qū)2024-2025學年一年級上學期月考語文試卷
- 黑龍江省齊齊哈爾市富??h第二中學2024-2025學年九年級上學期11月期中考試化學試題(含答案)
- 業(yè)績對賭協(xié)議合同范本
- 水球(集體球類運動)
- 眼科手術器械清洗滅菌流程圖
- T-JLA 003-2023 高速公路車距抓拍系統(tǒng)技術要求和檢驗方法
- 無人機應用技術專業(yè)教學資源庫申報書
- 2023學年完整公開課版餡餅
- 玄學凈明明派丹法轉自萬景元
- 支氣管哮喘指南解讀
- 基層中醫(yī)藥適宜技術培訓
- 網(wǎng)絡拓撲圖圖標庫課件
- 斯派克直讀光譜儀
評論
0/150
提交評論