當(dāng)前位置:首頁(yè) > 模擬 > 模擬
[導(dǎo)讀]基于Web的MVC framework在J2EE的世界內(nèi)已是空前繁榮。TTS網(wǎng)站上幾乎每隔一兩個(gè)星期就會(huì)有新的MVC框架發(fā)布。就目前最常用、最流行的兩種框架全方位的介紹和比較。

1 引言
   
基于Web的MVC framework在J2EE的世界內(nèi)已是空前繁榮。TTS網(wǎng)站上幾乎每隔一兩個(gè)星期就會(huì)有新的MVC框架發(fā)布。目前比較好的MVC,老牌的有Struts,Webwork。新興的MVC框架有Spring MVC,Tapestry,JSF等。這些大多是著名團(tuán)隊(duì)的作品,另外還有一些邊緣團(tuán)隊(duì)的作品,也相當(dāng)出色,如Dinamica,VRaptor等。這些框架都提供了較好的層次分隔能力。在實(shí)現(xiàn)良好的MVC分隔的基礎(chǔ)上,提供一些現(xiàn)成的輔助類庫(kù),同時(shí)也促進(jìn)了生產(chǎn)效率的提高。如何選擇一個(gè)好的框架應(yīng)用在項(xiàng)目設(shè)計(jì)中,將會(huì)對(duì)項(xiàng)目的效率和可重用具有至關(guān)重要性。

2 Struts框架
    Struts是Apache軟件基金Jakarta項(xiàng)目的一部分。Struts框架的主要架構(gòu)設(shè)計(jì)和開(kāi)發(fā)者是Craig R.McClanahan。Struts是目前Java Web MVC框架中不爭(zhēng)的王者。經(jīng)過(guò)長(zhǎng)達(dá)五年的發(fā)展,Struts已逐漸成長(zhǎng)為一個(gè)穩(wěn)定、成熟的框架,并占有MVC框架最大的市場(chǎng)份額。但Struts某些技術(shù)特性已經(jīng)落后于新興的MVC框架。面對(duì)Spring MVC,Webwork2這些設(shè)計(jì)更精密,擴(kuò)展性更強(qiáng)的框架,Struts受到了前所未有的挑戰(zhàn)。但就產(chǎn)品開(kāi)發(fā)的角度,Struts仍然是最穩(wěn)妥的選擇。
    Struts由一組相互協(xié)作的類(組件),Serlvet以及jsp tag lib組成?;赟tmts構(gòu)架的Web應(yīng)用程序基本上符合JSPModel2的設(shè)計(jì)標(biāo)準(zhǔn),是MVC設(shè)計(jì)模式的一種變化類型。根據(jù)對(duì)framework的描述,很容易理解為什么說(shuō)Struts是一個(gè)Web framwork,而不僅僅是一些標(biāo)記庫(kù)的組合。但Struts也包含了豐富的標(biāo)記庫(kù)和獨(dú)立于該框架工作的實(shí)用程序類。Struts有其自己的控制器(Controller),同時(shí)整合了其他的一些技術(shù)去實(shí)現(xiàn)模型層(Model)和視圖層(View)。在模型層,Struts可以很容易的與數(shù)據(jù)訪問(wèn)技術(shù)相結(jié)合,包括EJB,JDBC和Obiect Relation Bridge。在視圖層,Struts能夠與JSP,VelocityTemplares,XSL等等這些表示層組件相結(jié)合。
    Struts的體系結(jié)構(gòu),Struts framework是MVC模式的體現(xiàn),分別從模型、視圖、控制描述struts的體系結(jié)構(gòu)(Architec-ture)。
    (1)從視圖角度(View)主要由JSP建立,Struts自身包含了一組可擴(kuò)展的自定義標(biāo)簽庫(kù)(TagLib),可簡(jiǎn)化創(chuàng)建用戶界面的過(guò)程。目前包括:Bean Tags,HTML Tags,Logic Tags,Nested Tags,Template Tags這幾個(gè)Taglib。有關(guān)其詳細(xì)資料請(qǐng)參考Struts用戶手冊(cè)。
    (2)從模型角度(Model) 模型主要是表示一個(gè)系統(tǒng)的狀態(tài)(有時(shí)候,改變系統(tǒng)狀態(tài)的業(yè)務(wù)邏輯操作也劃分到模型中)。在Struts中,系統(tǒng)的狀態(tài)主要有ActiomForm Bean體現(xiàn),一般情況下,這些狀態(tài)是非持久性的。如果需要將這些狀態(tài)轉(zhuǎn)化為持久性數(shù)據(jù)存儲(chǔ),Struts本身也提供了Utitle包,可以方便與數(shù)據(jù)庫(kù)操作。
    (3)從控制器角度(Controller) 在Struts framework中,Controller主要是ActionServlet,但是對(duì)于業(yè)務(wù)邏輯的操作則主要由Action,ActionMapping,ActionForward這幾個(gè)組件協(xié)調(diào)完成(也許這幾個(gè)組件,應(yīng)該劃分到模型中的業(yè)務(wù)邏輯一塊)。其中,Action扮演了真正的業(yè)務(wù)邏輯的實(shí)現(xiàn)者,而ActionMapping和ActionForward則指定了不同業(yè)務(wù)邏輯或流程的運(yùn)行方向。
    對(duì)于Struts如何控制、處理客戶請(qǐng)求,通過(guò)對(duì)Struts的4個(gè)核心組件介紹來(lái)具體說(shuō)明。這幾個(gè)組件是:ActionServlet;Action Classes;Action Mapping(此處包括ActionForward);ActionFrom Bean。

3 Spring框架
    Spring實(shí)際上是《Expert One—on—One J2EE Design andDevelopment》一書(shū)中所闡述的設(shè)計(jì)思想的具體實(shí)現(xiàn)。在One—on一One一書(shū)中,Rod Johnson倡導(dǎo)J2EE實(shí)用主義的設(shè)計(jì)思想,并隨書(shū)提供了一個(gè)初步的開(kāi)發(fā)框架實(shí)現(xiàn)(interface2l開(kāi)發(fā)包)。而Spring正是這一思想的更全面和具體的體現(xiàn)。RodJohnson在interface21開(kāi)發(fā)包的基礎(chǔ)之上,做了進(jìn)一步的改造和擴(kuò)充,使其發(fā)展為一個(gè)更加開(kāi)放、清晰、全面、高效的開(kāi)發(fā)框架。
    Spring是一個(gè)開(kāi)源框架,由Rod Johnson創(chuàng)建并且在其著作《J2EE設(shè)計(jì)開(kāi)發(fā)編程指南》里進(jìn)行了描述。它是為了解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性而創(chuàng)建。Spring使用基本的JavaBeans完成以前只可能由EJB完成的事情變得可能。然而,Spring的用途不僅限于服務(wù)器端的開(kāi)發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合的角度,任何Java應(yīng)用都可以從Spting中受益。Spring是一個(gè)輕量的控制反轉(zhuǎn)和面向切面的容器框架。這些描述過(guò)于簡(jiǎn)單。但的確概括出Spring。
    (1)輕量從大小與開(kāi)銷而言Spting都是輕量的。完整的Spring框架可在一個(gè)大小1 MB多的JAR文件里發(fā)布。并且Spring所需的處理開(kāi)銷也是微不足道。此外,Spring是非侵入式的:典型地,Spring應(yīng)用中的對(duì)象不依賴于輕量。
    (2)控制反轉(zhuǎn) Spring通過(guò)一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了松耦合。當(dāng)應(yīng)用了IoC,對(duì)象被動(dòng)地傳遞它們的依賴而不是自己創(chuàng)建或者查找依賴對(duì)象??梢哉J(rèn)為IoC與JNDI相反,不是對(duì)象從容器中查找依賴,而是容器在對(duì)象初始化時(shí)不等被請(qǐng)求就將依賴傳遞給它。
    (3)面向切面Spring包含對(duì)面向切面編程的豐富支持,允許通過(guò)分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)服務(wù)(例如審計(jì)與事物管理)進(jìn)行內(nèi)聚性的開(kāi)發(fā)。應(yīng)用對(duì)象只做它們應(yīng)該做的,完成業(yè)務(wù)邏輯,僅此而已。并不負(fù)責(zé)(甚至是意識(shí))其它的系統(tǒng)關(guān)注點(diǎn),例如日志或事物支持。
    (4)容器 Spring包含和管理應(yīng)用對(duì)象的配置和生命周期,在此意義上它是一種容器??梢耘渲妹總€(gè)bean如何被創(chuàng)建,基于一個(gè)配置原形為bean創(chuàng)建一個(gè)單獨(dú)的實(shí)例或每次需要時(shí)都生成一個(gè)新的實(shí)例以及它們是如何相互關(guān)聯(lián)的。然而,Spring不應(yīng)該被混同于傳統(tǒng)重量的EJB容器,它們經(jīng)常是龐大與笨重的,難以使用。
    (5)框架Spring使由簡(jiǎn)單的組件配置和組合復(fù)雜的應(yīng)用成為可能。在Spring中,應(yīng)用對(duì)象被聲明式地組合,典型地是在一個(gè)XML文件里,Spr4ng提供了很多基礎(chǔ)功能(事務(wù)管理、持久性框架集成等等),并留有應(yīng)用邏輯開(kāi)發(fā)。
    例如:Spring有3個(gè)重點(diǎn),一個(gè)是面向接口編程:一個(gè)是控制反轉(zhuǎn);另外一個(gè)就是依賴注入。有了控制反轉(zhuǎn)就有了聲明性的bean,在application.xml也就是Spring的核心配置文件里面聲明bean的屬性,對(duì)應(yīng)的類,引用名稱,這些是為編碼時(shí)要用到的bean做準(zhǔn)備的,對(duì)應(yīng)web應(yīng)用程序,Spring有專門的類SpringContextLoader,等等。另外在web.xml里可以用context-param子節(jié)點(diǎn)將application.xml納入范圍,這樣容器在加載web應(yīng)用時(shí),就將對(duì)應(yīng)的bean加載了,剩下的是如何引用這些bean的問(wèn)題,這里用到Spring的接口注入,也是spring用的最多的依賴注入方式。例如:這有兩個(gè)類,一個(gè)是Main.java,一個(gè)是Demo.java.這里Main里面用到了Demo;


    注意看到Main里面需要用到Demo的實(shí)例,因此,需要硬編碼,即靜態(tài)綁定(在編譯期間就需要綁定),這絕對(duì)會(huì)增大后期維護(hù)工作量,至少每次擴(kuò)展或者修改類以后需要重新編譯已存在的iavabean組件
    Spring的依賴注入有機(jī)會(huì)實(shí)現(xiàn)動(dòng)態(tài)綁定,原理很簡(jiǎn)單,用到了接口,接口是不能生成實(shí)例的,再加上iava的多態(tài),接口可指向它的實(shí)現(xiàn)類。

    所以試著為bean添加一個(gè)接口


}
    注意看加重部分,用Spring提供的兩個(gè)類,BeanFactory,和xmhxxxxx,直接讀取配置文件。然后用getBean(id);取得bean,這個(gè)時(shí)候返回的對(duì)象是范型,比如Object obj=beanFac-tory.getBean(demo);將改后的寫在下面,但沒(méi)測(cè)試過(guò)。
    這樣就解耦了,實(shí)現(xiàn)無(wú)侵入式。不要忘記要將需要的bean在配置文件里面聲明。
    所有Spring這些特征使編寫更干凈、更易管理、并且更易于測(cè)試的代碼。也為Spring中的各種子框架提供了基礎(chǔ)。


4 結(jié)語(yǔ)
    人們?nèi)找鎸?duì)開(kāi)源框架的重視.使得很多項(xiàng)目的成本大大降低,并且投放使用以及維護(hù)速度都增加了?,F(xiàn)在的開(kāi)源框架都有很高的質(zhì)量,提供了很好的文檔,一些書(shū)籍讓開(kāi)發(fā)者做參考。即便如此,兩大因素使得J2EE領(lǐng)域充滿了不確定性:開(kāi)源領(lǐng)域和J2EE“標(biāo)準(zhǔn)”的沖突和AOP的日益重要。
    開(kāi)源和標(biāo)準(zhǔn)之間的沖突表現(xiàn)在兩個(gè)方面。一個(gè)是表現(xiàn)層,JSF的身后有Sun公司和其他的一些大公司,而在這個(gè)領(lǐng)域有Struts等開(kāi)源產(chǎn)品與之競(jìng)爭(zhēng)。在中間層,EJB3.0采用J2SE5.0的annotations實(shí)現(xiàn)了依賴注入(dependency iniection)的功能,但這個(gè)功能只是Spring的一個(gè)子集。
    在這兩個(gè)領(lǐng)域,開(kāi)源產(chǎn)品都更加革新。JSP借鑒了ASP.NET,而Tapestry則采用了WebObjects的思想。
同樣的,不知道EJB3.0為何要嘗試著標(biāo)準(zhǔn)化依賴注入,即使這樣會(huì)使之不可避免地喪失很多功能。EJB 3.0也要進(jìn)入程序編寫領(lǐng)域,而J2EE規(guī)范在這方面還沒(méi)有涉足。
    于此同時(shí),AOP的重要性在J2EE社區(qū)猛增,在使用上,AOP也越來(lái)越受到開(kāi)發(fā)者的青睞。像Spring、dynaop等被稱作“帶著雙拐的AOP”實(shí)現(xiàn),提升了AOP的知名度。而純粹的AOP技術(shù)比如AspectJ,在將來(lái)的幾年也會(huì)流行起來(lái)。
    其次,JBoss通過(guò)JCP和EJB3.0保持一致,它極大地推動(dòng)了AOP技術(shù)。但即使如此,JCP還沒(méi)有轉(zhuǎn)向AOP跡象。
    下一代的J2EE規(guī)范將擁抱更簡(jiǎn)單的POJ0編程模型,就像Spring和Hibermate做的一樣。J2EE開(kāi)發(fā)者也注定要從“欺詐客戶”轉(zhuǎn)到以自己的編程經(jīng)驗(yàn)開(kāi)發(fā)。這次改變將受到大多數(shù)人的歡迎,不像以前那樣每一個(gè)新規(guī)范發(fā)布后,最終都沒(méi)有能很好的實(shí)現(xiàn)。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉