關(guān)于BS MVC常用框架介紹
文章出處:http://www.sgrivertours.com 作者:興邦開(kāi)發(fā)部 人氣: 發(fā)表時(shí)間:2015年12月28日
關(guān)于BS MVC常用框架介紹
1.JSF
準(zhǔn)確地說(shuō),JSF是一個(gè)標(biāo)準(zhǔn),而不是一個(gè)產(chǎn)品。目前,JSF已經(jīng)有兩個(gè)實(shí)現(xiàn)產(chǎn)品可供選擇,包含Sun的參考實(shí)現(xiàn)和Apache的MyFaces。大部分的時(shí)候,我們所說(shuō)的JSF都是指Sun的參考實(shí)現(xiàn)。目前,JSF是作為JEE 5.0的一個(gè)組成部分,與JEE 5.0一起發(fā)布。
JSF的行為方法在POJO中實(shí)現(xiàn),JSF的Managed Bean無(wú)需繼承任何特別的類(lèi)。因此,無(wú)需在表單和模型對(duì)象之間實(shí)現(xiàn)多余的控制器層。JSF中沒(méi)有控制器對(duì)象,控制器行為通過(guò)模型對(duì)象實(shí)現(xiàn)。
當(dāng)然,JSF也允許生成獨(dú)立的控制器對(duì)象。在Struts 1中,Form Bean包含數(shù)據(jù),Action Bean包含業(yè)務(wù)邏輯,二者無(wú)法融合在一起。在JSF中,既可以將二者分開(kāi),也可以合并在一個(gè)對(duì)象中,提供更多靈活的選擇。
JSF的事件框架可以細(xì)化到表單中每個(gè)字段。JSF依然是基于JSP/Servlet的,仍然是JSP/Servlet架構(gòu),因而學(xué)習(xí)曲線相對(duì)簡(jiǎn)單。在實(shí)際使用過(guò)程中,JSF也會(huì)存在一些不足:
— 作為新興的MVC框架,用戶(hù)相對(duì)較少,相關(guān)資源也不是非常豐富。
— JSF并不是一個(gè)完全組件化的框架,它依然是基于JSP/Servlet架構(gòu)的。
— JSF的成熟度還有待進(jìn)一步提高。
2.Tapestry
Tapestry并不是一種單純的MVC框架,它更像MVC框架和模板技術(shù)的結(jié)合,它不僅包含了前端的MVC框架,還包含了一種視圖層的模板技術(shù),使用Tapestry完全可以與Servlet/JSP API分離,是一種非常優(yōu)秀的設(shè)計(jì)。
通過(guò)使用Tapestry,開(kāi)發(fā)者完全不需要使用JSP技術(shù),用戶(hù)只需要使用Tapestry提供的模板技術(shù)即可,Tapestry實(shí)現(xiàn)了視圖邏輯和業(yè)務(wù)邏輯的徹底分離。
Tapestry使用組件庫(kù)替代了標(biāo)簽庫(kù),沒(méi)有標(biāo)簽庫(kù)概念,從而避免了標(biāo)簽庫(kù)和組件結(jié)合的問(wèn)題。Tapsetry是完全組件化的框架。Tapestr只有組件或頁(yè)面兩個(gè)概念,因此,鏈接跳轉(zhuǎn)目標(biāo)要么是組件,要么是頁(yè)面,沒(méi)有多余的path概念。組件名,也就是對(duì)象名稱(chēng),組件名稱(chēng)和path名稱(chēng)合二為一。
Tapestry具有很高的代碼復(fù)用性,在Tapestry中,任何對(duì)象都可看作可復(fù)用的組件。JSP開(kāi)發(fā)者是真正面向?qū)ο螅皇?/span>URL解析。對(duì)于對(duì)頁(yè)面要求靈活度相當(dāng)高的系統(tǒng),Tapestry是第一選擇。精確地錯(cuò)誤報(bào)告,可以將錯(cuò)誤定位到源程序中的行,取代了JSP中那種編譯后的提示。
因此,筆者一直對(duì)Tapestry情有獨(dú)鐘:如果技術(shù)允許,使用Tapestry會(huì)帶給整個(gè)應(yīng)用更加優(yōu)雅的架構(gòu),更好的開(kāi)發(fā)效率。
3.Spring MVC
Spring提供了一個(gè)細(xì)致完整的MVC框架。該框架為模型、視圖、控制器之間提供了一個(gè)非常清晰的劃分,各部分耦合極低。Spring的MVC是非常靈活的,它完全基于接口編程,真正實(shí)現(xiàn)了視圖無(wú)關(guān)。視圖不再?gòu)?qiáng)制要求使用JSP,可以使用Velocity、XSLT或其他視圖技術(shù)。甚至可以使用自定義的視圖機(jī)制——只需要簡(jiǎn)單地實(shí)現(xiàn)View接口,并且把對(duì)應(yīng)視圖技術(shù)集成進(jìn)來(lái)。Spring的Controllers由IoC容器管理。因此,單元測(cè)試更加方便。
Spring MVC框架以DispatcherServlet為核心控制器,該控制器負(fù)責(zé)攔截用戶(hù)的所有請(qǐng)求,將請(qǐng)求分發(fā)到對(duì)應(yīng)的業(yè)務(wù)控制器。
Spring MVC還包括處理器映射、視圖解析、信息國(guó)際化、主題解析、文件上傳等。所有控制器都必須實(shí)現(xiàn)Controller接口,該接口僅定義ModelAndView handleRequest(request,response)方法。通過(guò)實(shí)現(xiàn)該接口來(lái)實(shí)現(xiàn)用戶(hù)的業(yè)務(wù)邏輯控制器。
Spring MVC框架有一個(gè)極好的優(yōu)勢(shì),就是它的視圖解析策略:它的控制器返回一個(gè)ModelAndView對(duì)象,該對(duì)象包含視圖名字和Model,Model提供了Bean的名字及其對(duì)象的對(duì)應(yīng)關(guān)系。視圖名解析的配置非常靈活,抽象的Model完全獨(dú)立于表現(xiàn)層技術(shù),不會(huì)與任何表現(xiàn)層耦合:JSP、Velocity或者其他的技術(shù)——都可以和Spring整合。