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

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

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

    積累,創造,分享!

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      25 Posts :: 13 Stories :: 26 Comments :: 0 Trackbacks
    waf是petstore中自帶的web tier的MVC框架,雖然比起struts等框架,功能要略顯簡單,而且也顯得過于冗余,但畢竟是一種很好的web層框架解決方案,還是值得我們研究一下的。
    我是從源碼上入手的,可能會存在一些解釋錯誤的地方,希望大家諒解!

    waf包括在petstore(學習EJB的經典實例)中,我是從sun download的,最新版本是1.3.2,在其自帶的doc里面有安裝說明。在提供的源代碼中包括了waf framework,我是把它放入jbuilder工程中進行研究。

    Waf framework實際包括倆部分,web tier和EJB tier,WebController作為這倆層之間訪問的proxy。Event(事件)作為這倆層交互時傳遞的對象,根據實際要求可以定義不同的事件對象,而作為EJB層也會提供對這些事件處理的業務方法。
    waf包括一個mappings.xml的文件用于定義事件映射和url映射。

    web tier:
    在web tier包括一個Control(MainServlet),用于接收客戶端請求;一些繼承自HtmlAction的action處理類(Model部分),這個和struts里面是一樣的,這些action處理類用于處理不同的客戶端請求,用戶請求的url和action之間的映射在mappings.xml中定義。
    action包括3個處理方法,doStart()、perform()、doEnd(),在perform()方法中,action除了進行一些web層的處理外還要決定觸發哪個Event事件(即觸發商業層的什么操作),Control會根據action的返回事件通過proxy對象WebController對EJB tier進行調用。

    EJB tier:
    和web tier一樣EJB tier也是MVC結構的,包括Control(EJBControllerLocalEJB,一個local接口的會話bean)和Model(繼承自EJBAction的action類)。每一個action類負責處理一個或多個事件Event,這個也是在mappings.xml中進行定義。在action當中會調用業務邏輯層的EJB(通常是一些facsade EJB)進行實際業務處理。
    waf為了保證一個client端所進行的所有業務處理可以是相關聯的,即允許保存各業務處理狀態,還提供了狀態機StateMachine,用于保存業務操作時的處理狀態。

    mappings.xm:
    事件映射,用于EJB tier的處理:
    <event-mapping>
            <event-class>com.sun.j2ee.blueprints.waf.event.events.ChangeLocaleEvent</event-class>
            <ejb-action-class>com.sun.j2ee.blueprints.waf.controller.ejb.action.actions.ChangeLocaleEJBAction</ejb-action-class>
    </event-mapping>

    url映射,用于web tier的處理:
    <url-mapping url="changelocale.do" screen="locale_change_success.screen" >
            <web-action-class>com.sun.j2ee.blueprints.waf.controller.web.action.actions.ChangeLocaleHTMLAction</web-action-class>
    </url-mapping>

    waf的處理過程如下:
    1.客戶端訪問系統。
    2.在web.xml中定義的listener(servlet技術,默認為DefaultComponentManager)被激活,為當前客戶端做初始化工作,包括創建EJB tier的代理對象WebController以及EJB tier的Control(EJBControllerLocalEJB,還包括當前記錄當前客戶端狀態的StateMachine。
    3.客戶端發出xxx.do的請求。
    4.web tier的Control(MainServlet)截獲這個請求,這個在web.xml中進行定義。
    5.MainServlet調用request處理類RequestProcessor進行本次業務請求處理。
    6.RequestProcessor會到mappings.xml文件中讀取這個請求對應的action,然后依次調用action的doStart()、perform()、doEnd()方法。
    7.action根據用戶的request來決定產生什么處理事件Event。
    8.RequestProcessor將這個事件Event通過代理類WebController傳遞到EJB tier。
    9.EJB tier的控制器EJBControllerLocalEJB捕獲到這個事件后首先到mappings.xml中檢索哪個EJBAction負責處理這個事件。
    10.EJBControllerLocalEJB調用僅屬于當前客戶端的StateMachine負責處理本次操作。
    11.StateMachine依次調用EJBAction的doStart()、perform()、doEnd()方法。
    12.EJBAction的perform()除了調用業務邏輯層的EJB對象的業務方法,比如一些使用了facasde模式的會話bean,還可以將業務處理結果存放到和一些狀態值存放到僅屬于當前客戶端的StateMachine當中。
    至此整個處理過程完成。

    從waf的源碼來看注釋顯得并不是很完善,因此對于理解帶來了一些困難。雖然我們不一定是要使用它,但了解一下它的架構思想還是很有必要的。waf中采用的事件機制和struts顯然有所不同。




    該帖由 sunyn 在 Jan 25, 2005 9:06 AM 編輯過

     

    posted on 2005-08-11 11:20 nighthawk 閱讀(854) 評論(0)  編輯  收藏 所屬分類: 分析與設計
    主站蜘蛛池模板: 中文字幕高清免费不卡视频| jlzzjlzz亚洲jzjzjz| 国产精品自拍亚洲| 成年轻人网站色免费看| 精品日韩99亚洲的在线发布| 亚洲最大免费视频网| 在线观看亚洲一区二区| 精品久久8x国产免费观看| 亚洲国产精品久久丫| 大地资源二在线观看免费高清| 亚洲一级毛片中文字幕| 在线观看免费成人| 国产精品亚洲lv粉色| 国产亚洲综合久久| 免费一级国产生活片| 人与动性xxxxx免费| 国产亚洲精品自在久久| 久久午夜夜伦鲁鲁片免费无码| 亚洲伦理一区二区| 久久不见久久见中文字幕免费 | 久久一本岛在免费线观看2020| 亚洲AV日韩AV鸥美在线观看| 91精品国产免费| 亚洲欧美日韩国产成人| 亚洲AV成人潮喷综合网| 亚洲视频手机在线| 最近中文字幕无吗高清免费视频| 亚洲精品成a人在线观看夫| 亚洲第一页日韩专区| 日韩电影免费在线观看| 中文字幕乱码亚洲精品一区| 成人亚洲综合天堂| 日本视频免费高清一本18| 亚洲在成人网在线看| 免费一级做a爰片性色毛片| 日韩免费高清播放器| 亚洲综合无码一区二区痴汉| 亚洲中文字幕伊人久久无码| 99在线观看免费视频| 国产亚洲精品美女久久久久久下载| 国产亚洲日韩一区二区三区|