<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 模擬技術(shù) > 設計應用 > 對于Struts和Spring兩種MVC框架的比較

對于Struts和Spring兩種MVC框架的比較

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

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

本文引用地址:http://dyxdggzs.com/article/188788.htm

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


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: Struts Spring MVC 比較

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>