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

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

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

    posts - 9, comments - 5, trackbacks - 0, articles - 2
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Struts VS Spring 兩種MVC框架

    Posted on 2007-11-10 16:58 代林 閱讀(1523) 評(píng)論(1)  編輯  收藏
    出處:javaresearch 作者:mandyhou
        基于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)成的輔助類庫,同時(shí)也促進(jìn)了生產(chǎn)效率的提高。

      如何選擇一個(gè)好的框架應(yīng)用在你的項(xiàng)目中,將會(huì)對(duì)你的項(xiàng)目的效率和可重用是至關(guān)重要的。本文將對(duì)目前最流行、最常用的兩種framework進(jìn)行介紹。

      一)Struts

      Struts是Apache軟件基金下Jakarta項(xiàng)目的一部分。Struts框架的主要架構(gòu)設(shè)計(jì)和開發(fā)者是Craig R.McClanahan。Struts 是目前Java Web MVC框架中不爭(zhēng)的王者。經(jīng)過長(zhǎng)達(dá)五年的發(fā)展,Struts已經(jīng)逐漸成長(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)品開發(fā)的角度而言,Struts仍然是最穩(wěn)妥的選擇。

      Struts有一組相互協(xié)作的類(組件)、Serlvet以及jsp tag lib組成。基于struts構(gòu)架的web應(yīng)用程序基本上符合JSP Model2的設(shè)計(jì)標(biāo)準(zhǔn),可以說是MVC設(shè)計(jì)模式的一種變化類型。根據(jù)上面對(duì)framework的描述,我們很容易理解為什么說Struts是一個(gè)web framwork,而不僅僅是一些標(biāo)記庫的組合。但 Struts 也包含了豐富的標(biāo)記庫和獨(dú)立于該框架工作的實(shí)用程序類。Struts有其自己的控制器(Controller),同時(shí)整合了其他的一些技術(shù)去實(shí)現(xiàn)模型層(Model)和視圖層(View)。在模型層,Struts可以很容易的與數(shù)據(jù)訪問技術(shù)相結(jié)合,包括EJB,JDBC和Object Relation Bridge。在視圖層,Struts能夠與JSP, Velocity Templates,XSL等等這些表示層組件想結(jié)合。

      Struts的體系結(jié)構(gòu)

      struts framework是MVC 模式的體現(xiàn),下面我們就從分別從模型、視圖、控制來看看struts的體系結(jié)構(gòu)(Architecture)。

      從視圖角度(View)

      主要由JSP建立,struts自身包含了一組可擴(kuò)展的自定義標(biāo)簽庫(TagLib),可以簡(jiǎn)化創(chuàng)建用戶界面的過程。目前包括:Bean Tags,HTML Tags,Logic Tags,Nested Tags,Template Tags 這幾個(gè)Taglib。有關(guān)它們的詳細(xì)資料請(qǐng)參考struts用戶手冊(cè)

      從模型角度(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ù)庫操作

      從控制器角度(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)求,讓我們通過對(duì)struts的四個(gè)核心組件介紹來具體說明。這幾個(gè)組件就是:ActionServlet。Action Classes,Action Mapping(此處包括ActionForward),ActionFrom Bean。

      二)Spring

      Spring 實(shí)際上是Expert One-on-One J2EE Design and Development 一書中所闡述的設(shè)計(jì)思想的具體實(shí)現(xiàn)。在One-on-One 一書中,Rod Johnson 倡導(dǎo)J2EE 實(shí)用主義的設(shè)計(jì)思想,并隨書提供了一個(gè)初步的開發(fā)框架實(shí)現(xiàn)(interface21 開發(fā)包)。而Spring 正是這一思想的更全面和具體的體現(xiàn)。Rod Johnson 在interface21 開發(fā)包的基礎(chǔ)之上,進(jìn)行了進(jìn)一步的改造和擴(kuò)充,使其發(fā)展為一個(gè)更加開放、清晰、全面、高效的開發(fā)框架。

      Spring是一個(gè)開源框架,由Rod Johnson創(chuàng)建并且在他的著作《J2EE設(shè)計(jì)開發(fā)編程指南》里進(jìn)行了描述。它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。Spring使使用基本的JavaBeans來完成以前只可能由EJB完成的事情變得可能了。然而,Spring的用途不僅限于服務(wù)器端的開發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。

      簡(jiǎn)單來說,Spring是一個(gè)輕量的控制反轉(zhuǎn)和面向切面的容器框架。當(dāng)然,這個(gè)描述有點(diǎn)過于簡(jiǎn)單。但它的確概括出了Spring是做什么的。為了更好地理解Spring,讓我們分析一下這個(gè)描述:

      1、輕量;從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個(gè)大小只有1MB多的JAR文件里發(fā)布。并且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應(yīng)用中的對(duì)象不依賴于輕量;從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個(gè)大小只有1MB多的JAR文件里發(fā)布。并且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應(yīng)用中的對(duì)象不依賴于Spring的特定類。

      2、控制反轉(zhuǎn);Spring通過一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了松耦合。當(dāng)應(yīng)用了IoC,對(duì)象被動(dòng)地傳遞它們的依賴而不是自己創(chuàng)建或者查找依賴對(duì)象。你可以認(rèn)為IoC與JNDI相反;不是對(duì)象從容器中查找依賴,而是容器在對(duì)象初始化時(shí)不等被請(qǐng)求就將依賴傳遞給它。

      3、面向切面;Spring包含對(duì)面向切面編程的豐富支持,允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)服務(wù)(例如審計(jì)與事物管理)進(jìn)行內(nèi)聚性的開發(fā)。應(yīng)用對(duì)象只做它們應(yīng)該做的;完成業(yè)務(wù)邏輯;僅此而已。它們并不負(fù)責(zé)(甚至是意識(shí))其它的系統(tǒng)關(guān)注點(diǎn),例如日志或事物支持。

      4、容器;Spring包含和管理應(yīng)用對(duì)象的配置和生命周期,在這個(gè)意義上它是一種容器。你可以配置你的每個(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)常是龐大與笨重的,難以使用。

      框架;Spring使由簡(jiǎn)單的組件配置和組合復(fù)雜的應(yīng)用成為可能。在Spring中,應(yīng)用對(duì)象被聲明式地組合,典型地是在一個(gè)XML文件里。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久性框架集成等等),將應(yīng)用邏輯的開發(fā)留給了你。

      所有Spring的這些特征使你能夠編寫更干凈、更可管理、并且更易于測(cè)試的代碼。它們也為Spring中的各種子框架提供了基礎(chǔ)。


    評(píng)論

    # re: Struts VS Spring 兩種MVC框架  回復(fù)  更多評(píng)論   

    2007-11-11 23:10 by Elvea
    感覺Struts和Spring MVC還可以做個(gè)比較,那Struts和Spring做比較不合適。
    今天弄了個(gè)Spring MVC Controller的Annotation的配置,挺簡(jiǎn)單的,就等Spring 2.5 正式版了。

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 看亚洲a级一级毛片| 亚洲欧洲精品成人久久曰| 成年免费大片黄在线观看com| 国产精品成人免费视频网站京东| 久久精品国产亚洲AV无码偷窥| 在线观看肉片AV网站免费| 黄色一级毛片免费| 免费涩涩在线视频网| 亚洲人成欧美中文字幕| 日本免费无遮挡吸乳视频电影| 亚洲真人无码永久在线观看| 免费看又爽又黄禁片视频1000| 亚洲av无码专区在线观看亚| 亚洲av无码国产精品色在线看不卡| 免费人成网站永久| 亚洲精品国产精品乱码不卡√| 国产情侣久久久久aⅴ免费| 亚洲国产高清人在线| 无遮免费网站在线入口| 亚洲精品中文字幕无码A片老| 国产v片免费播放| 三上悠亚电影全集免费| 亚洲一区综合在线播放| 免费看国产成年无码AV片| 国产亚洲美女精品久久| 亚洲精品无码鲁网中文电影| 无码国产精品一区二区免费式芒果 | 亚洲天堂免费在线视频| 国产啪精品视频网站免费尤物| 内射干少妇亚洲69XXX| 免费观看大片毛片| 好吊色永久免费视频大全| 亚洲国产美国国产综合一区二区| 成人特黄a级毛片免费视频| 免费国产污网站在线观看不要卡 | 亚洲AV成人精品网站在线播放 | 最新猫咪www免费人成| 青青草国产免费国产是公开| 久久久久亚洲av无码尤物| 在线看片无码永久免费视频| 又粗又长又爽又长黄免费视频|