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

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

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

    Change Dir

    先知cd——熱愛(ài)生活是一切藝術(shù)的開(kāi)始

    統(tǒng)計(jì)

    留言簿(18)

    積分與排名

    “牛”們的博客

    各個(gè)公司技術(shù)

    我的鏈接

    淘寶技術(shù)

    閱讀排行榜

    評(píng)論排行榜

    Turbine框架

    首先,必須承認(rèn),turbine作為一個(gè)開(kāi)發(fā)框架,已經(jīng)快絕跡了,阿里巴巴的webx框架是基于turbine做的,所以這里簡(jiǎn)單介紹一下,如果是阿里系新入職的同學(xué),可以參考一下,當(dāng)然任何開(kāi)發(fā)人員如果感興趣turbine的設(shè)計(jì),都?xì)g迎。

    turbine是什么?

    turbine是一個(gè)應(yīng)用開(kāi)發(fā)框架,是一個(gè)開(kāi)發(fā)web應(yīng)用的工具箱,100%純java,且基于jdk1.3及以上。j2ee兼容且基于servlet,面向MVC構(gòu)建。

    turbine的框架架構(gòu)overview如下:

    image

    turbine的代碼結(jié)構(gòu)包含了services、modules和util幾個(gè)大類(lèi),在上圖中可見(jiàn),在servlet基礎(chǔ)之上,以MVC為基礎(chǔ)結(jié)構(gòu),modules包含了view部分及action,view主要是pages,其中有三種具體的module——screen、layout和navigation,action作為controller存在,toolbox提供了很多通用的tool,service則是整個(gè)框架的插件。一個(gè)完整的請(qǐng)求處理流程如下:

    image

    請(qǐng)求到來(lái),turbine的controller處理,view部分渲染頁(yè)面,然后響應(yīng)輸出。

    就順著這個(gè)流程,分析一下turbine的架構(gòu),對(duì)于view部分,我們最直觀想到的就是pages,page模塊值包含了幾個(gè)概念,是jsp的?還是velocity的??jī)H此而已。那么,以一個(gè)velocity頁(yè)面為例,如何組織呢?turbine講究的是“約定勝于配置”,記住這句真言,也就可以理解turbine了。在開(kāi)發(fā)應(yīng)用中,要建立三個(gè)頁(yè)面目錄,分別是screen、layout和navigation,screen是頁(yè)面的主體內(nèi)容,layout是頁(yè)面的布局,而navigation則是一些頁(yè)面修飾元素,比如下面這個(gè)頁(yè)面結(jié)構(gòu):

    image

    這三個(gè)部分的調(diào)用順序如下:

    image

    因?yàn)榧s定的代碼結(jié)構(gòu)是在三個(gè)目錄下寫(xiě)對(duì)應(yīng)名字的java代碼,因此名字如果不一致,那么就會(huì)出錯(cuò)。當(dāng)然,頁(yè)面模板目錄有默認(rèn)的結(jié)構(gòu),如果在對(duì)應(yīng)的目錄下找不到文件,就會(huì)讀取default.vm文件。

    image

    類(lèi)似servlet,寫(xiě)一個(gè)java文件對(duì)應(yīng)處理screen頁(yè)面,那么代碼可能是這樣的:

    image

    可以看到,這種處理代碼很像servlet,方法就像是servlet標(biāo)準(zhǔn)中的doGet和doPost,只不過(guò)參數(shù)進(jìn)行了封裝。其實(shí),turbine就是一個(gè)servlet,看看turbine的源碼,Turbine類(lèi)繼承了HttpServlet,實(shí)現(xiàn)了doGet和doPost方法,除了一開(kāi)始初始化一系列配置相關(guān)的變量外,在接到一個(gè)http請(qǐng)求(get)后,turbine會(huì)執(zhí)行doGet方法,turbine封裝了request和response,構(gòu)建了一個(gè)叫做RunData的對(duì)象,Rundata是個(gè)接口,具體實(shí)現(xiàn)是DefaultTurbineRunData,其內(nèi)部提供了獲取http各種數(shù)據(jù)的方法接口。在每個(gè)請(qǐng)求周期,turbine都會(huì)利用TurbineRunDataService新建一個(gè)RunData,將所有基于servlet的請(qǐng)求相關(guān)的東西塞到這個(gè)data中。然后,利用從request中得到的請(qǐng)求地址,再調(diào)用PageLoader找到對(duì)應(yīng)的Page,執(zhí)行其中的build方法,其中DefaultPage里會(huì)通過(guò)LayoutLoader和ScreenLoader來(lái)定位到對(duì)應(yīng)的layout和screen,然后執(zhí)行其中的build相關(guān)方法。這樣,一整套請(qǐng)求執(zhí)行就完成了。值得說(shuō)明的就是如果是表單提交,那么多數(shù)情況會(huì)多出一個(gè)action的執(zhí)行,也是在page里進(jìn)行的。如下圖

    image

    至于turbine中的tool,這類(lèi)工具是通過(guò)配置,以“拉”模式被應(yīng)用的。當(dāng)應(yīng)用啟動(dòng)后,在vm頁(yè)面中以$開(kāi)始調(diào)用某個(gè)tool的時(shí)候,就會(huì)初始化這個(gè)tool。當(dāng)然,這里就用到了TurbinePullService。

    在初步了解了turbine后,如果使用過(guò)webx,那么就會(huì)知道并一定程度理解了webx的設(shè)計(jì);沒(méi)使用過(guò)的,結(jié)合自己用過(guò)的mvc框架,也可以了解一些框架設(shè)計(jì)的思路。

    參考資料:

    Turbine Tutorial

    Apache Turbine

    本文全部圖片都截取自Turbine Tutorial,使用請(qǐng)注明

    posted on 2012-05-17 13:54 changedi 閱讀(2751) 評(píng)論(2)  編輯  收藏 所屬分類(lèi): Java技術(shù)

    評(píng)論

    # re: Turbine框架 2012-09-07 11:16 tubine

    官方文檔似乎還沒(méi)有你講解的詳細(xì),官方文檔都不全。  回復(fù)  更多評(píng)論   

    # re: Turbine框架 2014-08-11 18:15 zi_hao

    你好,能把你這個(gè)helloword完整代碼給我一份不,zi_hao_jun@163.com謝謝!想找個(gè)例子真難,  回復(fù)  更多評(píng)論   

    主站蜘蛛池模板: 亚洲AV无码一区二区三区性色| 精品成人一区二区三区免费视频 | 无码区日韩特区永久免费系列 | 亚洲精品成人无限看| 无码人妻久久一区二区三区免费| 亚洲国产精品成人久久久| 永久免费bbbbbb视频| 国产免费AV片在线观看播放| 亚洲国产韩国一区二区| 免费v片在线观看品善网| 四虎国产成人永久精品免费| 2020国产精品亚洲综合网| 2048亚洲精品国产| 亚洲电影免费观看| 一级一看免费完整版毛片| 亚洲精品国产手机| 亚洲无码日韩精品第一页| 亚洲电影在线免费观看| 巨胸狂喷奶水视频www网站免费| 亚洲成a人片在线网站| 亚洲国产精品综合久久网络| 国产黄色免费网站| 中国一级特黄高清免费的大片中国一级黄色片 | a级毛片100部免费观看| 亚洲乱码在线卡一卡二卡新区| 亚洲乱码国产乱码精品精| 午夜神器成在线人成在线人免费| 久久精品电影免费动漫| 免费国产a理论片| 亚洲a视频在线观看| 国产亚洲精品精华液| 免费永久国产在线视频| 青草草色A免费观看在线| 国产一级片免费看| 一级成人毛片免费观看| 亚洲日本一线产区和二线产区对比| 亚洲欧洲一区二区| 亚洲av无码成人黄网站在线观看 | 亚洲日韩中文字幕日韩在线| 在线v片免费观看视频| 日韩电影免费在线观看中文字幕|