Web框架是人們?cè)谑褂媚撤N語(yǔ)言編寫Web應(yīng)用服務(wù)端時(shí)關(guān)于架構(gòu)的*實(shí)踐
有些Web框架是從實(shí)際的Web項(xiàng)目抽取出來(lái)的 也就是說(shuō) 做一個(gè)具體的應(yīng)用項(xiàng)目時(shí) 采取的架構(gòu)比較理想 就把這部分和領(lǐng)域無(wú)關(guān) 而僅和Web的請(qǐng)求和響應(yīng)處理有關(guān)的設(shè)計(jì)拿出來(lái) 形成一個(gè)基礎(chǔ) 在開發(fā)別的應(yīng)用項(xiàng)目的時(shí)候則可以從這基礎(chǔ)做起 讓開發(fā)者更關(guān)注領(lǐng)域問(wèn)題 而不是Web的請(qǐng)求和響應(yīng)的控制
也有些Web框架是直接設(shè)計(jì)出來(lái)的 很多Web框架在設(shè)計(jì)的時(shí)候也都借鑒了別的框架 吸取優(yōu)點(diǎn) 修改不足 并根據(jù)自己的框架的定位 在特定方面有自己的發(fā)揮 形成了自己的特點(diǎn) 比如有的web框架追求的是松耦合性 層次 結(jié)構(gòu)之間都不密切綁定 有的Web框架則追求敏捷性 強(qiáng)調(diào)約定而不是配置
Java 的 Web框架雖然各不相同 但基本也都是遵循特定的路數(shù)的 使用Servlet或者Filter攔截請(qǐng)求 使用MVC的思想設(shè)計(jì)架構(gòu) 使用約定 XML或 實(shí)現(xiàn)配置 運(yùn)用Java面向?qū)ο蟮奶攸c(diǎn) 面向抽象實(shí)現(xiàn)請(qǐng)求和響應(yīng)的流程 支持Jsp Velocity等視圖
JSF
優(yōu)點(diǎn)
Java EE標(biāo)準(zhǔn) 這意味著有很大的市場(chǎng)需求和更多的工作機(jī)會(huì)
上手快速并且相對(duì)容易
有大量可用的組件庫(kù)
缺點(diǎn)
大量的JSP標(biāo)簽
對(duì)REST和安全支持不好
沒有一個(gè)統(tǒng)一的實(shí)現(xiàn) 既有SUN的實(shí)現(xiàn) 又有Apache的實(shí)現(xiàn)——MyFaces
國(guó)內(nèi)的還支持AJAX 以及有開發(fā)工具 支持
Spring MVC
優(yōu)點(diǎn)
對(duì)覆蓋綁定( binding) 驗(yàn)證()等提供生命周期管理
與許多表示層技術(shù)/框架無(wú)縫集成 JSP/JSTL Tiles Velocity Excel XSL PDF 等
便于測(cè)試——?dú)w功于IoC
缺點(diǎn)
大量的XML配置文件
太過(guò)靈活——沒有公共的父控制器
沒有內(nèi)置的Ajax支持
Stripes
優(yōu)點(diǎn)
不需要書寫XML配置文件
良好的學(xué)習(xí)文檔
社區(qū)成員很熱心
缺點(diǎn)
社區(qū)比較小
不如其他的項(xiàng)目活躍
里面的URL是硬編碼的
Struts
優(yōu)點(diǎn)
架構(gòu)簡(jiǎn)單——易于擴(kuò)展
標(biāo)記庫(kù)很容易利用或者Velocity來(lái)定制
基于控制器或者基于頁(yè)面的導(dǎo)航
缺點(diǎn)
文檔組織得很差
對(duì)新特征過(guò)分關(guān)注
通過(guò)Google搜索到的大多是Struts x的文檔
Tapestry
優(yōu)點(diǎn)
一旦學(xué)會(huì)它 將極大地提高生產(chǎn)率
HTML模板——對(duì)頁(yè)面設(shè)計(jì)師非常有利
每出一個(gè)新版本 都會(huì)有大量的創(chuàng)新
缺點(diǎn)
文檔過(guò)于概念性 不夠?qū)嵱?/p>
學(xué)習(xí)曲線陡峭
發(fā)行周期長(zhǎng)——每年都有較大的升級(jí)
Wicket
優(yōu)點(diǎn)
對(duì)Java開發(fā)者有利(不是Web開發(fā)者)
頁(yè)面和顯示綁定緊密
社區(qū)活躍——有來(lái)自創(chuàng)建者的支持
缺點(diǎn)
HTML模板和Java代碼緊挨著
需要對(duì)OO有較好的理解
Wicket邏輯——什么都用Java搞定
在Java的Web框架中 我使用過(guò)Struts Struts 試用過(guò)Stripes Wicket 了解過(guò)JSF SpringMVC 以我使用的經(jīng)驗(yàn) 我覺得看一個(gè)Java Web框架應(yīng)看看下面幾個(gè)方面
設(shè)計(jì)理念
一個(gè)框架設(shè)計(jì)出來(lái)應(yīng)該有一個(gè)基本的思路 它為什么要要被設(shè)計(jì)出來(lái)?有的框架的目標(biāo) 就是提高效率 有的框架的目標(biāo)的給用戶充分的選擇 有的框架的目標(biāo)是充分了解實(shí)際需求 給用戶一個(gè)盡量合理的默認(rèn)選擇 有的框架是要給使用者開發(fā)桌面程序的感覺 應(yīng)該說(shuō) 一個(gè)好的框架應(yīng)該是實(shí)現(xiàn)了預(yù)期目標(biāo) 體現(xiàn)出了自己的設(shè)計(jì)理念的
設(shè)計(jì)的合理性
設(shè)計(jì)的合理性表現(xiàn)在框架在一些關(guān)鍵問(wèn)題上的處理 比如靈活性和敏捷性之間的權(quán)衡 硬編碼和文本配置之間的權(quán)衡 靈活性指的是可以適應(yīng)用戶多樣的需求 很特殊的要求也能得到支持 有的框架的實(shí)現(xiàn)基于太多的約定 使得用戶只能遵循 而敏捷性指的是用戶在解決絕大多數(shù)常規(guī)問(wèn)題的時(shí)候 能盡量少做工作 提高效率 框架設(shè)計(jì)者只能在這兩者見達(dá)到一個(gè)平衡點(diǎn) 權(quán)衡的怎么樣 就很見水平了 硬編碼和文本配置之間的權(quán)衡也很有意思 文本配置的意義在于Java是一個(gè)編譯語(yǔ)言 強(qiáng)調(diào)代碼的封閉 講究擴(kuò)展而不是修改 這種情況下文本配置信息可以很方便的在不修改程序的情況下改變程序行為 但是隨著一些靈活的腳本語(yǔ)言實(shí)現(xiàn)的 Web框架的出現(xiàn) 人們發(fā)現(xiàn)在這樣的框架中 腳本語(yǔ)言即做程序編碼語(yǔ)言 也做配置語(yǔ)言 還做視圖上的標(biāo)記語(yǔ)言 這使我們對(duì)Java實(shí)現(xiàn)的框架有了一番新的審視 既然配置文件并沒有消除對(duì)程序的修改 為什么不能在應(yīng)編碼上下下功夫呢?
設(shè)計(jì)的平衡性
設(shè)計(jì)的平衡性指的是 框架在設(shè)計(jì)流程中各階段 各層次的實(shí)現(xiàn)方式時(shí) 所達(dá)到的上述權(quán)衡(靈活性和敏捷性之間的權(quán)衡等)應(yīng)該是具有一致的水平 一個(gè)在控制上過(guò)分靈活 而視圖上具有非常大限制的框架是不能算做一個(gè)好的框架的
框架真的解放了開發(fā)者嗎
框架的目的是讓開發(fā)者把更多的精力放在領(lǐng)域問(wèn)題 而非Web的請(qǐng)求和響應(yīng)的處理問(wèn)題上 而事實(shí)上框架都做到這一點(diǎn)了嗎?不可否認(rèn) 框架的使用提高代碼的可維護(hù)性 但是框架在解放開發(fā)者這點(diǎn)上就未必了 有時(shí)還給開發(fā)者帶來(lái)了額外的負(fù)擔(dān) 事實(shí)上 直接使用Servlet 只要維持好代碼風(fēng)格 一樣可以很有效率 當(dāng)然 直接使用Servlet的靈活性就不用說(shuō)了
在我接觸的Web框架中 我最推崇的是Struts 設(shè)計(jì)優(yōu)雅 偏重靈活 也基本不造成額外的負(fù)擔(dān) 當(dāng)然這些評(píng)價(jià)是和我參與的項(xiàng)目的規(guī)模有關(guān)的 其他規(guī)模的項(xiàng)目Struts 就未必合適了 我希望Struts 能在下面幾個(gè)方面有些改善
在提供文本配置方式的基礎(chǔ)上給一個(gè)約定配置的方式 讓開發(fā)者在大多數(shù)情況下可以不配置
配置也支持硬編碼 因?yàn)橛袝r(shí)候維護(hù)可修改的硬編碼是很有效率的
/Article/program/Java/hx/201311/26313
Java是當(dāng)下最火編程語(yǔ)言之一。Java軟件開發(fā)工程師即當(dāng)下做熱門的職業(yè),而Java軟件開發(fā)*的框架你了解多少呢?每個(gè)框架都有各自的優(yōu)劣勢(shì),IT培訓(xùn)介紹根據(jù)項(xiàng)目看哪個(gè)框架適合你。
SpringMVC:出現(xiàn)時(shí)間久遠(yuǎn),具有較好的開發(fā)系統(tǒng),幫助你查詢需要的。*和最*的Java框架之一。
Struts2:對(duì)于Java軟件開發(fā)工程師是個(gè)很好的選擇。它使得測(cè)試寫代碼所需的工作量減輕了。不過(guò)它也是不夠靈活的。
Hibernate:可對(duì)java軟件開發(fā)對(duì)象執(zhí)行數(shù)據(jù)庫(kù)操作。可彌合對(duì)象和關(guān)系詞之間的差距。獨(dú)立于DB的。
JSF:,易使用,無(wú)外部依賴,提供很多功能。
Vaadin:是Java軟件開發(fā)工程師創(chuàng)建業(yè)務(wù)應(yīng)用程序時(shí)使用的框架。
GWT:是免費(fèi)的,可優(yōu)化復(fù)雜的程序,可獲得單個(gè)代碼庫(kù),簡(jiǎn)化開發(fā)和調(diào)試過(guò)程。
Grails:功能強(qiáng)大,設(shè)置新項(xiàng)目和支架很快。
各種流行框架都有著自己的優(yōu)缺點(diǎn),只要你記得選個(gè)適合項(xiàng)目的,方便安裝,網(wǎng)絡(luò)的活躍程度適合的等等就可以。
只要一個(gè)電話
我們免費(fèi)為您回電