開始整理WebWork學(xué)習(xí)筆記,一來融入一些自己的觀點(diǎn)以備忘,二來給Team里兄弟們快速學(xué)習(xí)和上手的捷徑,提高工作效率。不過總的來說希望能從它學(xué)到的思想多過與如何用它,也希望大家一起討論一起分享。
嚴(yán)重同意Rickard(WebWork的創(chuàng)造者 JBoss創(chuàng)始人之一 大牛)在創(chuàng)造這個(gè)框架時(shí)所基于的幾個(gè)哲學(xué)原則:
實(shí)現(xiàn)某個(gè)功能的正確方式應(yīng)該是最簡(jiǎn)單的;阻礙最少的途徑應(yīng)該是正確的;在過于復(fù)雜和功能簡(jiǎn)陋之間應(yīng)該存在一個(gè)很好的平衡點(diǎn)。我想但凡框架都應(yīng)該帶著這些原則去創(chuàng)造和運(yùn)用,讓工作變得更加簡(jiǎn)單。后面將會(huì)討論什么是框架什么是容器,我想你會(huì)對(duì)這些哲學(xué)理解的更加深刻。
WebWork是一個(gè)優(yōu)雅的框架,它的設(shè)計(jì)基于這樣一個(gè)基本原理:完成通用任務(wù)應(yīng)該是簡(jiǎn)單的,而構(gòu)建高級(jí)的設(shè)計(jì)也應(yīng)該是可行的。WebWork的開發(fā)者只想提供一個(gè)能夠
為你工作的框架,而不是一個(gè)
與你作對(duì)的框架。
一、關(guān)于大家熟知的MVC 眾所周知MVC(Model-View-Controller)已經(jīng)成為在Web應(yīng)用程序開發(fā)中具有統(tǒng)治地位的構(gòu)架了,而WebWork可以說是目前最為優(yōu)雅和強(qiáng)大的MVC框架,同時(shí)也提供了一個(gè)擁有許多特征的微容器供你使用。下面就先來討論一下MVC。
最早的MVC是在SmallTalk語言中提出的,現(xiàn)在已經(jīng)被廣泛的運(yùn)用在Web應(yīng)用程序開發(fā)中。經(jīng)典的MVC模式事件流是這樣的:用戶與視圖(View)進(jìn)行交互,填入數(shù)據(jù)點(diǎn)擊按鈕,控制器(Controller)接受到來自視圖的時(shí)間并對(duì)模型(Model)進(jìn)行操作,根據(jù)用戶提供的數(shù)據(jù)更新模型。視圖也會(huì)接到“模型改變”的事件通知,因此它會(huì)隨著模型更新,將模式的更新結(jié)果顯示給用戶。但是由于HTTP協(xié)議的特殊性這種形式在Web程序中是無法實(shí)現(xiàn)的。
在Web應(yīng)用程序中經(jīng)典的MVC是通過
前端控制器(Front Controller)模式實(shí)現(xiàn)的。這種模式包含一個(gè)分發(fā)器,而分發(fā)器將請(qǐng)求URL映射到需要被執(zhí)行的命令實(shí)例(action)。命令實(shí)例再與系統(tǒng)后臺(tái)服務(wù)進(jìn)行交互,通常這些服務(wù)就理解為模型。命令實(shí)例在處理完業(yè)務(wù)邏輯后返回一個(gè)碼值,而這個(gè)碼值被映射到一個(gè)視圖。最后結(jié)合控制器和模型,視圖將會(huì)呈現(xiàn)給用戶。通常視圖會(huì)使用標(biāo)簽庫,以便更簡(jiǎn)單的訪問需要顯示的數(shù)據(jù)。還有一種MVC的實(shí)現(xiàn),稱之為
頁面控制器(Page Controller),在這里可以找到一些資料
http://www.microsoft.com/china/MSDN/library/architecture/patterns/esp/EspWebPresentationPatterns.mspx,本篇暫不討論。
二、不用WebWork也一定要理解的內(nèi)容---何為框架、何為容器,它們到底有什么用? 1.框架 最近經(jīng)常聽到朋友們對(duì)框架會(huì)有兩種聲音,一種是盛贊框架,聲稱有了框架天下無敵,開發(fā)效率翻番,開發(fā)效果加倍等等;另一種則是極其厭惡,太多配置,太多限制,太多不同意,有意加大學(xué)習(xí)坡度,加大升級(jí)的難度,加大大家的工作量等等。(甚至有人在BeanSoft兄的blog里說再也不看他的所有文章,只因他發(fā)了一下框架的牢騷)漸漸的大家都有了一種框架情節(jié),一邊是崇拜而另一邊則聽到框架就頭疼(框架豈不淪落到超女一樣的下場(chǎng),不該不該)??蚣軐?shí)在不該背負(fù)這么多,大家在選擇使用或不使用框架前都必須知道
何為框架,何為容器,它們到底有什么用? Rickard在構(gòu)建最原始版本W(wǎng)ebWork的時(shí)候曾經(jīng)說過:
框架的強(qiáng)大之處不是源自它能讓你做什么,而是它不能讓你做什么。理解為:框架使混亂的東西變得結(jié)構(gòu)化。而Web應(yīng)用程序框架則鼓勵(lì)開發(fā)人員使用一系列框架所提供的基礎(chǔ)類和類庫避免雜亂的JSP,servlet所帶來混亂。
Struts曾經(jīng)紅極一時(shí),即使使現(xiàn)在在國內(nèi)也使使用者最多的框架之一。但它現(xiàn)在受到越來越多的質(zhì)疑,最后不得不選擇和WebWork合并來期待扭轉(zhuǎn)乾坤。主要是因?yàn)殡S著時(shí)間的推移,開發(fā)者越來越成熟,應(yīng)用程序也越來越成熟,而Struts太多地方限制的過于嚴(yán)格,一些實(shí)現(xiàn)的方式過于別扭和死板,從最開始的給予很多結(jié)構(gòu)化的東西從而使開發(fā)者很具安全感,到現(xiàn)在的過分限制創(chuàng)造力而成為開發(fā)者的夢(mèng)魘。也正如框架的悲觀派BeanSoft兄所說是它開創(chuàng)了通過大量雜亂無章的配置文件來做程序的先河(沒有考證,呵呵)。
WebWork是鼓勵(lì)創(chuàng)造的。WebWork找到了框架結(jié)構(gòu)和創(chuàng)造力之間的一種平衡,在后面的筆記中你將體會(huì)的更深。
2.容器 框架定義了不能做什么,而容器則定義了可以或者說能夠做什么。比如說Web容器有的支持servlet2.2有的則支持了servlet2.4,有的提供了良好的啟動(dòng)和運(yùn)行速度,有的則提供了更好的集群計(jì)算能力。一個(gè)容器擁有越多有用的特性,它將越強(qiáng)大、越好。
容器支持我們?nèi)プ鲆恍┦虑?,我們也需要它的支持?/strong>注意前面說過框架則是限制我們?nèi)プ鲆恍┦虑椤?br>
WebWork提供了自己的輕量級(jí)容器,你可以從容器中獲得諸如IoC、AOP等一系列的特性支持,使你從中受益。當(dāng)然必須說明的是WebWork的核心是MVC框架,而并非這個(gè)輕量級(jí)容器,甚至它是一個(gè)可選的部分。但要想構(gòu)建出迷人、優(yōu)雅的Web應(yīng)用程序,發(fā)揮更多的創(chuàng)造力,你可能離不開它并會(huì)真的愛上它。
上面提到WebWork的容器是一個(gè)可選的部分,它是松耦合的,所以你完全可以選擇你更熟悉和信耐及更適合當(dāng)前項(xiàng)目的容器(如Spring、PicoContainer等)來提供相關(guān)特征。
最后我們來提一下WebWork的核心,一個(gè)底層組件---XWork,它是一個(gè)比WebWork更單純更輕量級(jí)的框架(我覺得不太準(zhǔn)確,不過暫且稱它做一個(gè)框架吧)。在這里并不打算討論它,因?yàn)閷?duì)于剛接觸WebWork的開發(fā)者來說,XWork和WebWork這兩個(gè)詞的相似必定帶來很多的混亂。如果有興趣可以google一下,查找XWork的相關(guān)資料來學(xué)習(xí)。
在下一篇我們將一步一步的完成一個(gè)HelloWorld程序(想必大家學(xué)習(xí)其他技術(shù)也都離不開經(jīng)典的HelloWorld吧),從而對(duì)WebWork的基礎(chǔ)內(nèi)容有一個(gè)大概的了解。我們?cè)谀愕牡谝粋€(gè)WebWork程序里見吧!