




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
SpringWebFlow2.0 SpringWebFlow2.0概 SpringWebFlow2.0新特 SpringWebFlow的基本元 Web應(yīng)用程序的三種范 SpringWebFlow的解決方 并非所有情形都適用SpringWeb SpringWebFlow的其他特 配置SpringWeb 創(chuàng)建Web應(yīng)用的目錄結(jié) 在/WEB-INF/lib下導(dǎo)入相關(guān)類 聲明DispatcherServlet并指定配置文 添加DispatcherServlet映 創(chuàng)建web-application- 創(chuàng)建webmvc- 創(chuàng)建 配置SpringWebFlow2.0的基 哪個(gè)flow被執(zhí)行了 SpringWebFlow如何與SpringWebMVC整合在一起 FlowHandler和 FlowBuilder SpringWebFlow2.0配置小 在/WEB-INF/lib目錄下導(dǎo)入相關(guān)類 在webmvc-config.xml中添加配 添加配置文件webflow- 添加flow定義文件 添加三個(gè)jsp頁 修改index.jsp頁 用UnifiedEL實(shí)現(xiàn)業(yè)務(wù)邏 客戶端請求中包含了_eventId參 執(zhí)行到<action-state>元 添加Product 添加ProductService 修改shopping.xml文 修改viewCart.jsp頁 用subflow實(shí)現(xiàn)添加商品到購物車功 實(shí)現(xiàn)Cart和CartItem兩個(gè)業(yè)務(wù) 在shopping.xml中添加配 在/WEB-INF/flows目錄下添加 在webflow-config.xml中添加addToCart.xml的位 修改viewCart.jsp頁 運(yùn)行效 globaltransition簡 SpringWebFlow2.0Web應(yīng)用程序。本教程以講解實(shí)例為主,為了讀者更好地理解SpringWebFlow,也有部分理論的解釋。JavaWebSpringFramework的應(yīng)用。JDKSpringFramework2.5.4+SpringWebFlowTomcat6.0.0+(ELTomcat6.0及以上版本eclipseSpringWebFlow2.0)的一部分,SpringWebSpringMVC。SpringWebFlowWeb應(yīng)用頁面流程的最佳方驟的時(shí)候,SWF將會(huì)是一個(gè)功能強(qiáng)大的控制器。SpringWebFlow2.0SpringWebFlowSpring的一個(gè)子項(xiàng)目,其最主要的目的是解決跨越多個(gè)請求的、用戶與服務(wù)器之2.01.xSpringWebFlow,有以下幾個(gè)值得注意的SpringMVCSpringWebFlow1.xSpringWebMVCStrutsJSFWeb框架整合。最新的SpringWebFlow2.0則明確聲明是基于SpringWebMVC的一個(gè)擴(kuò)展。AjaxAjaxWebFlowflow即可刷新客戶端相關(guān)界面代JSFJSFSpringFrameworkSpringWebFlowJSFSpringSecurity(AcegiSecurity)flow聲明為securedSpringSecurityflow、flow2.01.x50%XMLSpringWebFlow2.0flowflowSpringWebFlow1
11SpringWebFlow2.0的配置文件表示如下:清單1用SpringWebFlow語義表達(dá)購物車流程義有個(gè)初始的印象。從清單1中,應(yīng)注意到一個(gè)很重要的特征——SpringWebFlowServletAPI無SpringWebFlowSunWeb規(guī)范緊密結(jié)合,SpringWebFlow也并非只有抽象,現(xiàn)在還沒有哪一種工具或語言可以將一個(gè)模型直接轉(zhuǎn)換成相應(yīng)SpringWebFlow更像是抽象建模和技術(shù)細(xì)節(jié)的混血兒,相比于湮沒在繁多的控制器和視圖WebMVCSpringWebFlow1所描述的更高層次的抽象,但同時(shí)它也整合了像UnifiedEL這樣的工具來控制技術(shù)上的細(xì)節(jié)。SpringWebFlowFlow可看作是客戶端與服務(wù)器的一次對話(conversationFlow的完成要由分多個(gè)步驟來實(shí)現(xiàn),SpringWebFlowstate。SpringWebFlowstateActionStateViewStateSubflowStateDecisionStateEndState,這些state可用于定義flow執(zhí)行EndStatestatestatestate中定義transition來實(shí)現(xiàn)到其他state的轉(zhuǎn)換,轉(zhuǎn)換的發(fā)生一般由事件(event)來觸發(fā)。SpringWebSpringWebFlowWeb開發(fā)技術(shù)而言,僅有SpringWebFlowWebMVC技術(shù)?或者在任何情況下都應(yīng)優(yōu)先使用SpringWebFlow?要回答這些問題,先來看一下SpringWebFlow所著力解決的技術(shù)問題。WebJavaServletWeb應(yīng)用程序中用到的各種對象規(guī)定了三種范圍(scope)requestsessionapplicationrequest范圍中的對象是跟客戶的請求綁定在一起的,每次請求結(jié)束都會(huì)銷毀對象,而新的請求過來時(shí)又會(huì)重新創(chuàng)建對象。request范圍適合存放數(shù)據(jù)量較大的臨時(shí)數(shù)據(jù)。session范圍中的對象是跟會(huì)話(session)綁定在一起的,每次會(huì)話結(jié)束會(huì)銷毀這些對象,而新的會(huì)話中又會(huì)重新創(chuàng)建。HTTP協(xié)議本身是無狀態(tài)的,服務(wù)器和客戶端要實(shí)現(xiàn)會(huì)話的管理,只能借助session范圍適合存放本次會(huì)話application范圍的對象是跟應(yīng)用程序本身綁定在一起,從ServletAPI的角度來講,就是存放在ServletContextServletServlet關(guān)閉時(shí)才會(huì)銷毀。application范sessionJavaServletweb.xmlsession的有效時(shí)間為100分鐘:2web.xmlsession的配置session范圍更像是“雞肋”session會(huì)導(dǎo)致嚴(yán)重的效率問題,在分布式sessionsessionrequestrequest范圍要長,但又比session范圍要短的這么一種有效范圍。SpringWebFlowJavaServletSpringWebFlow2.0flowflowflowflow定義文件中可通過“flowScope”變量名來訪問。conversationflowconversation范圍內(nèi)的對象所在的flow如果調(diào)用了其他subflow,那么在subflow中也可訪問該對象。(subflowflowflowsubflowflowflowconversation范圍的使用也就突破了JavaServlet規(guī)范中session范圍和request范圍的局限,真正做到了自由定制。SpringWebFlow所著力解決的問題即是客戶端與服務(wù)器的對話(conversation)問題,requestsessionconversation范圍(flow范圍),需要付出效WebSpringWebFlowSethLaddExpertSpringMVCandWebFlow一書,對何時(shí)使用SpringWebFlow,列出了如下表格。1SpringWebSpringMVC不是flow的一部分SpringMVCSpringMVCSpringWebSpringWebFlowWebFlowSpringWebFlowWebMVC框架都把重點(diǎn)把在各種controller和形形色色的view技術(shù)上面,對Web應(yīng)用流程本身的關(guān)注是不夠的,WebFlow的提出就提供了一層抽象,設(shè)計(jì)者就可以從WebFlow抽象層面來進(jìn)行設(shè)計(jì)、開發(fā)。當(dāng)WebFlowWebSpringWebFlow的語義并非只限于頁面到相應(yīng)的WebFlow,開發(fā)人員的設(shè)計(jì)變得更加直觀、有效。SpringWebFlowWebFlowflowstate時(shí)可通過繼承某個(gè)已flowstateflowflow,就跟一般程序語言中在SpringWebSpringWebFlow2.0SpringWebMVCflowSpringWebMVCcontrollercontrollerXMLSpringWebFlow2.0前須先對SpringWebMVC進(jìn)行配置,步驟如下:Web/WEB‐INF/libWebweb.xmlDispatcherServletDispatcherServletweb‐application‐config.xmlwebmvc‐config.xml創(chuàng)建Web本示例應(yīng)用將采用eclipseDynamicWebProject向?qū)J(rèn)生成的目錄結(jié)構(gòu),在WEB‐INF目錄下添加configflowsconfigflowsSpringWebFlow的定義文件。最后目錄如圖2所示:2/WEB-INF/libjar/WEB‐INF/libDispatcherServletSpringWebMVCweb.xmlDispatcherServlet3:清單3聲明DispatcherServlet和指定配置文件DispatcherServletDispatcherServlet/spring/4:清單4web.xml中的DispatcherServlet映射web-application-SpringWebFlow的應(yīng)用往往會(huì)有大量的配置,這些配置全放在一個(gè)文件中是不合適的。本示例SpringWebFlow2.0web‐application‐config.xml用于WebSpringWebMVCwebmvc‐config.xml中,教程后面要添加的SpringWebFlow的配置則放在webflow‐config.xml中。在web‐application‐config.xml中用import元素導(dǎo)入其他的配置文件。web‐application‐config.xml的內(nèi)容見清單5:清單5<?xmlversion="1.0"instance"xmlns:context="/schema/context"<!‐‐samples.webflow@Component<!‐‐啟用基于注解的配置<importwebmvc-webmvc‐config.xml主要用于配置SpringWebMVC。所要做的就是添加一個(gè)viewresolver(視圖解析求定向到某個(gè)控制器,在本例中,用到的是UrlFilenameViewController。清單6<?xmlversion="1.0"<beanid="viewResolver"<propertyname="viewClass"<propertyname="suffix"<beanid="viewMappings"<propertyUrlFilenameViewController"/index""index"index.jsp只是顯示一行文字。清單7index.jsp<!DOCTYPEhtmlPUBLIC"‐//W3C//DTDXHTML1.0Transitional//EN"<htmlTomcathttp://localhost:8080/CartApp/spring/index.jspindex.jsp頁面(CartApp)SpringWebMVC配置是否正確。如果一切正常,可得到3SpringWebFlow2.0SpringWebMVCSpringWebFlow2.0的配置。不過,要搞明白SpringWebFlow2.0的配置,必須先要了解相關(guān)的理論知識(shí)。FlowRegistryflowflowXMLid,并以FlowDefinition對象的形式存放在FlowResigtry中。FlowRegistry配置方式可參看清單8。(XMLwebflowSpringWebFlow習(xí)慣上的名字空間,參看教程后面webflow‐config.xml文件,可以更多了解webflow名字空間。)8FlowRegistryflowidflowid將是該定義文件的文件FlowExecutorSpringWebFlowflow,都要通過這個(gè)接口來進(jìn)行。從配置FlowExecutorSpringWebFlow的默認(rèn)行為已經(jīng)足夠。默認(rèn)配置參看清單9。9FlowExecutorflowFlowRegistryflowflowid,沒有配置的,也會(huì)有FlowExecutoridflowid,則是要由用戶來指定的。在默認(rèn)配置情況下,如果客戶端發(fā)送了如下URL請求:SpringWebFlowURLid為shoppingflow,于是就會(huì)在FlowRegistry中查找名為“shopping”的flowFlowExecutor負(fù)責(zé)執(zhí)行。SpringWebFlowSpringWebMVC客戶端發(fā)送的請求,先會(huì)由servlet容器(本教程示例中即為Tomcat)接收,servlet容器會(huì)找到相應(yīng)的應(yīng)用程序(CartApp)web.xmlservlet來處理。SpringWebMVC中處理請求的servlet是DispatcherServlet,如果請求的路徑滿足DispatcherServlet的映射條件,則DispatcherServlet會(huì)找出SpringIoC容器中所有的HandlerMapping,根據(jù)這些HandlerMapping中匹配最好的handler(一般情況下都是controller,即控制器)來處理請求。當(dāng)Controllerview(視圖)的名字,DispatcherServletview的名SpringWebMVCSpringWebMVCSpringWebFlow所需要的配置了。為了讓客戶端的請求變成執(zhí)行某個(gè)flow的請求,要解決以下幾個(gè)問題:HandlerMappingflowhandler(controllerhandler(controller)FlowHandlerFlow2.0提供了兩種方案可供選擇。第一種方案是自己編寫實(shí)現(xiàn)了FlowHandler接口的類,讓這個(gè)類來FlowController的控制器。第一種方案靈活性比較大,flowFlowHandler。本教程的示例采用第二種方案,對FlowHandler的介紹可參看SpringWebFlow2.0自帶的文檔。FlowController其實(shí)是個(gè)適配置FlowController只需指定FlowExecutor即可,具體配置見清單10:10FlowControllerHandlerMapping/shopping.doflowController11:清單11在viewMappings中添加配置<property/shopping.do/shopping/shopping.htmflowControlleridshoppingflowFlowBuilder清單8所示FlowRegistry的配置,其中省略了flow‐registry元素中一項(xiàng)比較重要的屬性,flow‐builder‐servicesflow‐builder‐servicesflow‐registry“倉庫”flow的一些基本特性,UnifiedELOGNLmodel(模型)對象中的數(shù)據(jù)在顯示之前是否需要先作轉(zhuǎn)換,等等。在本示例中,我們需要在flow‐builder‐services屬性中指明SpringWebFlow中所用到的view,由SpringWebMVC的“ViewResolver”SpringWebMVC的“ViewClass”來解析,最后呈現(xiàn)給客戶。具體配置參看清單12:12flow‐builder‐servicesSpringWebFlow2.0flowflow執(zhí)行過程SpringWeb/WEB‐INF/libwebmvc‐config.xmlSpringWebFlowSpringWebFlowflowjsp修改/WEB-INF/libjar/WEB‐INF/libwebmvc-config.xmlSpringWebMVC13:清單13webmvc‐config.xml<?xmlversion="1.0"instance"xsi:schemaLocation="/schema/beans<propertyname="viewClass"<propertyname="suffix"shopping.doflowController<property<propertyUrlFilenameViewController"/index""index"webflow-/WEB‐INF/configwebflow‐config.xmlschema14中的內(nèi)14<?xmlversion="1.0"xsi:schemaLocation="/schema/beans<!—flowflow‐builder‐servicesflow<!—WebFlowMVC<!—MVCviewresolverview<beanid="mvcViewFactoryCreator"webflow‐config.xmlweb‐application‐config.xmlimportwebflow‐config.xml15web‐application‐config.xmlwebflow‐config.xml<importflow/WEB‐INF/flowsshopping.xml2所示的流程。清單16shopping.xml<?xmlversion="1.0"<flowxmlns="/schema/webflow"與清單1相比,在view‐state元素中指定了view屬性的名字,這個(gè)名字也是SpringWebMVC中viewResolverview16view‐state元素所對應(yīng)的視viewCart.jspviewOrder.jsporderConfirmed.jsp16end‐state指明了當(dāng)flow執(zhí)行結(jié)束后跳轉(zhuǎn)到初始的index.jsp頁面,在此處的view屬性的名字需要解釋一下。externalRedirectviewflowservletRelative則表明所指向flowservletSpringWebFlow2.0還提供了其他幾個(gè)關(guān)鍵詞用于重定jsp/WEB‐INF/jspflowjspbody元素以內(nèi)的17<h1>View<a18<a19<h1>OrderflowExecutionUrlflowURL。flowExecutionUrl的值已經(jīng)由SpringWebFlow2.0框架的代碼進(jìn)行賦值,并放入相應(yīng)的model中供view訪問。flowExecutionUrlflowkey,因此不可用其他手段來獲取。請求參數(shù)中_eventId的值與清單16中transition元素的on屬性的值是對應(yīng)的,在接收到index.jspindex.jspflowwebmvc‐config.xmlflow,只需提供/shopping.do鏈接即可。20<ahref="shopping.do">ViewTomcatindex.jspflow44flowUnifiedELJavaSpringWebFlowJavaSpringWebFlow提供與Java代碼的整合機(jī)制。要了解這種機(jī)制,關(guān)鍵在于搞清楚兩個(gè)問題:SpringWebFlow_eventId<action‐state>_eventId這種方式一般用在state之間的transition,通過指定_eventId參數(shù)的值,表明了客戶的行為,從而導(dǎo)SpringWebFlowevaluate元素來指定要處理的業(yè)務(wù)邏輯。參看清單21:21transition21的代碼表示,當(dāng)客戶端的請求中包含_eventId=submitevaluateexpression屬性所指明的表達(dá)式會(huì)被執(zhí)行,即validator對象的validate方法會(huì)得到調(diào)用。SpringWebFlow5flow5個(gè)切入點(diǎn)插入相關(guān)業(yè)務(wù)邏2SpringWebFlowXMLflowflowStatestateviewviewrenderviewrender出來stateflowflow22viewrender切入點(diǎn)插入業(yè)務(wù)邏輯代碼的例子:清單22on‐render元素<action-state>SpringWebFlow<action‐state>state。如果某個(gè)應(yīng)用的業(yè)務(wù)邏輯transitionSpringWebFlow自定義的切入點(diǎn),那么就可以考慮添加<action‐state>元素專用于該業(yè)務(wù)邏輯的執(zhí)行。示例代碼參看清單23:23action‐state<evaluateSpringWebFlow的定義中可直接使用表達(dá)式語言(ExpressionLanguage)UnifiedEL,對于習(xí)慣用OGNL的開發(fā)人員,可通過flow‐builder‐services的配置改成使用OGNL。不管是哪一SpringWebFlowSpringWebSpringWebFlow提供了兩種比較重要的范圍,一是flow范圍,另一個(gè)是conversation范圍。通過flowScopeconversationScopeSpringWebFlow提供了在這兩種范圍里存取數(shù)據(jù)的方法。清單24演示了如何將業(yè)務(wù)邏輯代碼執(zhí)行的結(jié)果存放到flow范圍中。24flowScope(注意:SpringWebFlow2.0在默認(rèn)配置下,flowScopeconversationScopeJava序列化flowScopeconversationScopejava.io.Serializable接view‐staterequestScoperequest范圍沒什么區(qū)別,等等。另外還有一些用于獲取flow以外數(shù)據(jù)的變量,如requestParameters、messageContext等等。具體變量的列表可參看SpringWebFlow自帶的文檔。ProductProductServiceshopping.xmlviewCart.jspProductProductJavaBean,用于定義商品(Product)的一般屬性,同時(shí)也提供了構(gòu)造方法。由于會(huì)把Product存放于conversationScope中,Product實(shí)現(xiàn)了Serializable接口。具體見清單25:清單25Product類importprivateintid;privateintprice;publicProduct(intid,Stringdescription,int{this.id=this.price=price;}/*省略getter和}ProductServiceProductServiceid查找出該商品,由于示例較簡單,這里只添加了三條紀(jì)錄。見清單26:26ProductServicepackagepublicclassProductService{/*productsproducts.put(1,newProduct(1,"Bulldog",1000));products.put(3,newProduct(3,"Labrador",2000));}returnnew}{return}}ServiceSpringIoCproductServiceBeanBeanSpringWebFlow的定義中直接訪問。shopping.xmlviewCartview‐stateon‐renderproductServicegetProductsviewScope27:清單27shopping.xml需修改的部分viewCart.jsp27productServicegetProductsviewScopeproducts的變量中,jsp頁面的代碼可直接訪問該變量。見清單28:28viewCart.jsp<!DOCTYPEhtmlPUBLIC"‐//W3C//DTDXHTML1.0Transitional//EN"<html<title>View<h1>View<h2>ItemsinYour<a5viewCart.jspsubflowsubflow來實(shí)現(xiàn)這一功能,CartCartItemshopping.xml/WEB‐INF/flowswebflow‐config.xmladdToCart.xmlviewCart.jspCartCartItemjava.io.Serializable29:清單29CartItem類importpublicclassCartItemimplementsSerializableprivateProductproduct;privateint{duct=product;this.quantity=quantity;}}{}/*省略getter和}increaseQuantityCartjava.io.Seria
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 大棚辣椒多種常發(fā)病蟲害的發(fā)生特點(diǎn)及針對性高效防治措施
- 黑龍江省大慶市肇源縣開學(xué)聯(lián)考2024-2025學(xué)年七年級下學(xué)期開學(xué)考試歷史試題(原卷版+解析版)
- 住房保障與城鎮(zhèn)化的相互促進(jìn)策略
- 智能制造的生態(tài)系統(tǒng)與平臺(tái)的策略及實(shí)施路徑
- 智研咨詢發(fā)布:LED路燈行業(yè)市場動(dòng)態(tài)分析、發(fā)展方向及投資前景分析報(bào)告
- 2025年中國靈巧手行業(yè)市場規(guī)模、行業(yè)集中度及發(fā)展前景研究報(bào)告
- 【專精特新】AI芯片企業(yè)專精特新“小巨人”成長之路(智研咨詢)
- 土壤污染防治策略與路徑
- 核心素養(yǎng)視域下高中政治活動(dòng)課教學(xué)的實(shí)踐與研究
- 2025年全液壓自行式大口徑工程鉆機(jī)項(xiàng)目建議書
- (二模)長春市2025屆高三質(zhì)量監(jiān)測(二)地理試卷(含答案)
- 2025天津市建筑安全員-C證考試題庫
- 2025年河南省高職單招計(jì)算機(jī)類職業(yè)技能測試題(附答案)
- GB/T 18936-2025禽流感診斷技術(shù)
- 《主題四 雞蛋撞地球》教學(xué)設(shè)計(jì)-2023-2024學(xué)年六年級下冊綜合實(shí)踐活動(dòng)遼師大版
- 2025年國航機(jī)務(wù)系統(tǒng)AMECO工程師崗位校園招聘筆試參考題庫附帶答案詳解
- 巨量千川中級營銷師認(rèn)證考試題(附答案)
- 2025中智集團(tuán)招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 《公路工程造價(jià)標(biāo)準(zhǔn)高海拔高寒地區(qū)補(bǔ)充規(guī)定》
- 金融公司早會(huì)內(nèi)容
- 藥劑學(xué)第9版課件:第一章-緒論
評論
0/150
提交評論