<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Sung in Blog

               一些技術(shù)文章 & 一些生活雜碎
    Spring WebFlow是一個(gè)全新的Web框架,她帶給我們一種全新且高度結(jié)構(gòu)化的Web應(yīng)用構(gòu)建方法。讓我們來看看她的一些特性。

    Spring框架正準(zhǔn)備推出一種新的技術(shù)。在下一個(gè)版本中Spring將正式將Spring WebFlow整合進(jìn)來。Spring WebFlow是一個(gè)及其優(yōu)秀的Web開發(fā)框架,用于在Web應(yīng)用內(nèi)部創(chuàng)建和配置可重用的Web流程。

    熟悉Spring的人可能先入為主地以為Spring WeFlow和SpringMVC沒有什么區(qū)別。那就錯(cuò)了。Spring MVC是一個(gè)輕量級(jí)的Web開發(fā)框架,而Spring WebFlow 則提出一種全新的視角。她使得Web架構(gòu)師們可以將精力集中在Web應(yīng)用開發(fā)的抽象層次上:Web流程的邏輯結(jié)構(gòu)和Web事件條件的定義。此外,她還提出許多新的概念。

    本文將回顧這一個(gè)新框架前的一些關(guān)鍵概念,用一個(gè)經(jīng)典的用戶登錄例子來分析流程標(biāo)記語(yǔ)言的主要組成元素并向您解釋為什么WebFlow如此誘人。

    Spring WebFlow 概念和組件作為一個(gè)Web框架,WebFlow無(wú)論在理論上還是在實(shí)際開發(fā)上都有諸多優(yōu)點(diǎn)。深厚的軟件工程學(xué)架構(gòu)保證了他的穩(wěn)定性,同時(shí),其組件合理,易于理解,易于使用。

    事實(shí)上,它更適合中大型應(yīng)用的開發(fā),因?yàn)樗慕M件模型專門針對(duì)架構(gòu)重用,高效管理性和可配置性進(jìn)行了優(yōu)化。

    用例研究

    本文以一個(gè)常見的web應(yīng)用流程作為示例,一個(gè)身份認(rèn)證流程,講解它的一些代碼片斷。一個(gè)Web認(rèn)證的全過程包括:登錄表單,注冊(cè)表單,認(rèn)證action,注冊(cè)action,以及對(duì)這些action的結(jié)構(gòu)修飾。這個(gè)例子用來展示那些修飾登錄表單的組件的配置。

    自動(dòng)操作架構(gòu)

    Spring WebFlow以有限自動(dòng)機(jī)(Finite State machine)的概念為基礎(chǔ)。Web應(yīng)用內(nèi)部的用戶交互行為和事務(wù)被建模為一般的狀態(tài)機(jī),這是一種非常流行的軟件工程建模方法。(見圖1)。自動(dòng)機(jī)為基礎(chǔ)的設(shè)計(jì)是一種很好的設(shè)計(jì)方法,同時(shí)正在越來越收到應(yīng)用架構(gòu)的青睞——因?yàn)樗趯?duì)Web交互行為建模時(shí)顯得相對(duì)清晰且嚴(yán)謹(jǐn)。



    WebFlow的核心組件

    一個(gè)Spring WebFlow應(yīng)用中包含一個(gè)或多個(gè)流程,通常每個(gè)流程包括執(zhí)行Action的動(dòng)作狀態(tài)(ActionStates),顯示狀態(tài)(ViewStates),跳轉(zhuǎn)動(dòng)作(Transitions)。

    流程

    一個(gè)流程是一個(gè)預(yù)先定義好的用戶交互行為的集合,表示為一個(gè)由動(dòng)作狀態(tài)和顯示狀態(tài)構(gòu)成的樹,狀態(tài)之間通過跳轉(zhuǎn)聯(lián)系。

    下面的登錄注冊(cè)是一個(gè)webflow的例子,包含了一些典型的構(gòu)件,例如loginForm,ActionState,transition。這些構(gòu)件通過一個(gè)XML文件描述:

    
    
    
    
    
        
            
            
        
    ...
        
            
        
    ...
    


    這個(gè)流程以loginForm開始,以"successView"結(jié)束(修飾主頁(yè)面"displayMain" 的組件。流程可以通過XML文檔配置,或者AbstractFlowBuilder的子類。

    動(dòng)作狀態(tài)(ActionStates)

    ActionStates對(duì)用戶事件或其他事件進(jìn)行響應(yīng)。ActionStates自身又可以包含其他可執(zhí)行的Action和transition。下面的代碼配置了"loginForm"這個(gè)ActionState。

    
            
            
        


    動(dòng)作(Actions)

    Action是ActionState可以連接,重用,聲明調(diào)用的最小單位。Action繼承自AbstractAction類,該類實(shí)現(xiàn)了doExecuteAction方法。這個(gè)方法的參數(shù):RequestContext,WebFlow(其中封裝了所有流程相關(guān)的數(shù)據(jù))。

    loginForm動(dòng)作狀態(tài)通過Spring的自動(dòng)裝配特性調(diào)用LoginFormAction動(dòng)作。doExecute

    Action方法被自動(dòng)調(diào)用,同時(shí)可以處理一些登錄準(zhǔn)備,預(yù)先裝入等操作。

    public LoginFormAction extends AbstractAction
    { 
    
     protected Event doExecuteAction
     (RequestContext context)  
     throws Exception
     { 
      //perform some login specific setup operations 
      ... 
    
     }//end method 
    
    }//end class


    顯示狀態(tài)(ViewState)

    ViewState初始化對(duì)顯示組件(jsp,tile等)的修飾操作。下面是一個(gè)ViewState的配置代碼:

    
            
        


    當(dāng)來自loginForm的ActionState返回一個(gè)"success"時(shí),這個(gè)ViewState將會(huì)被調(diào)用。它將修飾"enterCredentials"顯示組件(可以是一個(gè)常見的struts forward)。

    跳轉(zhuǎn)(Transition)

    和通常的狀態(tài)機(jī)一樣,WebFlow定義了狀態(tài)以及狀態(tài)之間跳轉(zhuǎn)動(dòng)作。這些跳轉(zhuǎn)動(dòng)作很類似struts中的ActionForward。同樣是負(fù)責(zé)連接兩個(gè)狀態(tài)。

    后繼動(dòng)作(Continuation)

    后繼動(dòng)作(Continuation)允許你回退并重新開始程序執(zhí)行流程——從程序執(zhí)行的角度來看是一個(gè)適時(shí)的逆流程。Continuation的概念最早來自編程語(yǔ)言,但是卻從來沒有被用于像Java,VB,C++這樣主流的編程語(yǔ)言中。WebFlow創(chuàng)造性地實(shí)現(xiàn)了continuation。由于continuation可以用來持久和重造任何一個(gè)流程狀態(tài),從而提供給你極大的自由。

    重用

    WebFlow中的流程定義,如登錄流程,有針對(duì)性地被結(jié)構(gòu)化以便重用。他們定義封裝了自己的生命周期。這些定義可以很容易的用支持Spring的其他Web組件配置重用。架構(gòu)師應(yīng)該識(shí)別出并定義通用的流程,如登錄,搜索等以便今后的重用。

    此外,Action如果正確的設(shè)計(jì)與Spring的結(jié)合,也可以被重用。他們可以同時(shí)被不同流程的action state使用。這些重用,既有應(yīng)用級(jí)的又有流程級(jí)的,增強(qiáng)了維護(hù)性和代碼可讀性。

    與Struts結(jié)合

    WebFlow與struts的結(jié)合部分地通過標(biāo)準(zhǔn)的Spring類和org.springframework.web.struts包中的一些配置。要與WebFlow相關(guān)概念(Action,ActionFlow)結(jié)合只需要注冊(cè)WebFlow規(guī)格的struts action,并像普通的WebFlow action一樣使用。

    下面的配置代碼來自struts-config.xml,描述了Struts的Action如何配置成流程的入口。注意WebFlow規(guī)格的Action類(org.springframework.web.flow.struts.FlowAction)和屬性"flowId",它們將Action與登陸流程連接起來。例子中的登錄流程在Spring的應(yīng)用上下文(ApplicationContext)中作為一個(gè)loginFlow的bean管理。你還需要將這個(gè)流程注冊(cè)為一個(gè)由Spring管理的bean。

    <!- flow actions ->
                <action path="/loginFlow"
     type="org.springframework.web
     .flow.struts.FlowAction"
      name="actionForm" scope="request" 
    className="org.springframework.web.
    flow.struts.FlowActionMapping">
    <set-property property="flowId"
    value="loginAction" />
                </action>


    在這個(gè)例子中還用到了Spring中的RequestProcessor(org.springframework.web.struts.BindingRequestProcessor),是Spring的自動(dòng)綁定form和bean。這一特性避免再去寫單獨(dú)的ActionForm對(duì)象。

    <controller processorClass="org.springframework.web.
    struts.BindingRequestProcessor"/>


    同時(shí),它還要求一個(gè)使用工具類來自動(dòng)綁定Web表單中的值到一個(gè)對(duì)象。

    <plug-in className="org.springframework.
    web.struts.BindingPlugin"/>


    WebFlow的預(yù)發(fā)布現(xiàn)在可以下載,其中包含一個(gè)樣例應(yīng)用("birthdate"),詳細(xì)描述了這個(gè)整合過程。

    如果你正在著手建立一個(gè)Web應(yīng)用,Spring是一個(gè)非常不錯(cuò)的選擇。Spring MVC非常容易上手并且可以很方便的同其他組件整合。另一方面,即將出現(xiàn)的Spring WebFlow將提供給你各種復(fù)雜的新特性。使你能夠開發(fā)出高度重用和結(jié)構(gòu)化的Web應(yīng)用。如果你在開發(fā)的是一個(gè)大規(guī)模的企業(yè)應(yīng)用,這一點(diǎn)是很重要的。這也是為什么struts如此流行。

    總的來說,J2EE Web框架目前處在一種群雄逐鹿的狀態(tài),沒有一個(gè)領(lǐng)導(dǎo)者。Struts是最流行的,但是它的主架構(gòu)師也是主要的開發(fā)者已經(jīng)拋棄了它。被稱為Struts取代者的JSF目前還沒有獲得足夠的影響力。而同時(shí),其他的框架正在慢慢開始流行。

    你也許會(huì)問,"我應(yīng)該選擇哪個(gè)?"Spring WebFlow出現(xiàn)可以讓你以后再去考慮這個(gè)問題。WebFlow允許你在不需要較大改動(dòng)的情況下方便的切換框架。

    像前面說過的,Spring WebFlow是一個(gè)抽象的框架,可以讓你只專注于業(yè)務(wù)流程和重用。無(wú)論是Struts,JSF還是Spring MVC都可以作為它的業(yè)務(wù)流程實(shí)現(xiàn)。因此,你也就不需要馬上作出上面說的那個(gè)選擇了。
    posted on 2005-11-04 11:05 Sung 閱讀(1255) 評(píng)論(1)  編輯  收藏 所屬分類: FrameWork

    FeedBack:
    # re: Spring WebFlow:重用與抽象框架解析

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 曰韩亚洲av人人夜夜澡人人爽| 99精品视频免费| 亚洲国产精品尤物YW在线观看| 亚洲VA成无码人在线观看天堂| 免费一级全黄少妇性色生活片| 成人免费无码大片a毛片| 特黄特色大片免费| 亚洲av无码一区二区三区乱子伦| 一级午夜a毛片免费视频| 亚洲男人天堂2017| 免费人成在线观看网站视频| 免费A级毛片无码A∨中文字幕下载| 亚洲中文字幕不卡无码| 亚洲免费网站观看视频| 亚洲一区二区三区免费| 亚洲伊人久久精品| 亚洲天堂中文字幕在线| 成人五级毛片免费播放| 国产啪精品视频网站免费尤物| 亚洲成色www久久网站夜月| 日韩电影免费在线| 久久久久国产精品免费网站| 久久久久亚洲精品无码网址色欲| 国产a不卡片精品免费观看| 在线观看www日本免费网站| 一级毛片aaaaaa视频免费看| 国产91在线|亚洲| 亚洲国产精品VA在线观看麻豆| 日本人成在线视频免费播放| 亚洲欧美成人av在线观看| 亚洲成a人片77777老司机| 亚洲日本一区二区三区在线不卡| 成人妇女免费播放久久久| 亚洲精品一二三区| 亚洲国产精品热久久| 国产啪亚洲国产精品无码| 免费观看大片毛片| 亚洲中文无码永久免费| 四虎在线视频免费观看视频| 毛片免费在线观看| 免费久久人人爽人人爽av|