Struts
Struts是一個(gè)基于Sun Java EE平臺(tái)的MVC框架,主要是采用Servlet和JSP技術(shù)來(lái)實(shí)現(xiàn)的。
Struts框架可分為以下四個(gè)主要部分,其中三個(gè)就和MVC模式緊密相關(guān):
1、模型 (Model),本質(zhì)上來(lái)說(shuō)在Struts中Model是一個(gè)Action類(lèi)(這個(gè)會(huì)在后面詳細(xì)討論),開(kāi)發(fā)者通過(guò)其實(shí)現(xiàn)商業(yè)邏輯,同時(shí)用戶(hù)請(qǐng)求通過(guò)控制器(Controller)向Action的轉(zhuǎn)發(fā)過(guò)程是基于由struts-config.xml文件描述的配置信息的。
2、視圖(View),View是由與控制器Servlet配合工作的一整套JSP定制標(biāo)簽庫(kù)構(gòu)成,利用她們我們可以快速建立應(yīng)用系統(tǒng)的界面。
3、控制器(Controller),本質(zhì)上是一個(gè)Servlet,將客戶(hù)端請(qǐng)求轉(zhuǎn)發(fā)到相應(yīng)的Action類(lèi)。
4、一堆用來(lái)做XML文件解析的工具包,Struts是用XML來(lái)描述如何自動(dòng)產(chǎn)生一些JavaBean的屬性的,此外Struts還利用XML來(lái)描述在國(guó)際化應(yīng)用中的用戶(hù)提示信息的(這樣一來(lái)就實(shí)現(xiàn)了應(yīng)用系統(tǒng)的多語(yǔ)言支持)。
Spring
Spring是輕量級(jí)的Java EE應(yīng)用程序框架。
Spring的核心是個(gè)輕量級(jí)容器(container),實(shí)現(xiàn)了IoC(Inversion of Control)模式的容器,Spring的目標(biāo)是實(shí)現(xiàn)一個(gè)全方位的整合框架,在Spring框架下實(shí)現(xiàn)多個(gè)子框架的組合,這些子框架之間彼此可以獨(dú)立,也可以使用其它的框架方案加以替代,Spring希望提供one-stop shop的框架整合方案 。
Spring不會(huì)特別去提出一些子框架來(lái)與現(xiàn)有的OpenSource框架競(jìng)爭(zhēng),除非它覺(jué)得所提出的框架夠新夠好,例如Spring有自己的 MVC框架方案,因?yàn)樗X(jué)得現(xiàn)有的MVC方案有很多可以改進(jìn)的地方,但它不強(qiáng)迫您使用它提供的方案,您可以選用您所希望的框架來(lái)取代其子框架,例如您仍可以在Spring中整合您的Struts框架 。
Spring的核心概念是IoC,IoC的抽象概念是「依賴(lài)關(guān)系的轉(zhuǎn)移」,像是「高層模組不應(yīng)該依賴(lài)低層模組,而是模組都必須依賴(lài)于抽象」是 IoC的一種表現(xiàn),「實(shí)現(xiàn)必須依賴(lài)抽象,而不是抽象依賴(lài)實(shí)現(xiàn)」也是IoC的一種表現(xiàn),「應(yīng)用程序不應(yīng)依賴(lài)于容器,而是容器服務(wù)于應(yīng)用程序」也是IoC的一種表現(xiàn)。
Spring的架構(gòu)性的好處
Spring能有效地組織你的中間層對(duì)象,無(wú)論你是否選擇使用了EJB。如果你僅僅使用了Struts或其他的包含了Java EE特有APIs的framework,你會(huì)發(fā)現(xiàn)Spring關(guān)注了遺留下的問(wèn)題。
Spring能消除在許多工程上對(duì)Singleton的過(guò)多使用。根據(jù)我的經(jīng)驗(yàn),這是一個(gè)主要的問(wèn)題,它減少了系統(tǒng)的可測(cè)試性和面向?qū)ο筇匦浴?br> Spring 能消除使用各種各樣格式的屬性定制文件的需要,在整個(gè)應(yīng)用和工程中,可通過(guò)一種一致的方法來(lái)進(jìn)行配置。曾經(jīng)感到迷惑,一個(gè)特定類(lèi)要查找迷幻般的屬性關(guān)鍵字或系統(tǒng)屬性,為此不得不讀Javadoc乃至源編碼嗎?有了Spring,你可很簡(jiǎn)單地看到類(lèi)的JavaBean屬性。倒置控制的使用(在下面討論)幫助完成這種簡(jiǎn)化。Spring能通過(guò)接口而不是類(lèi)促進(jìn)好的編程習(xí)慣,減少編程代價(jià)到幾乎為零。
Spring被設(shè)計(jì)為讓使用它創(chuàng)建的應(yīng)用盡可能少的依賴(lài)于他的APIs。在Spring應(yīng)用中的大多數(shù)業(yè)務(wù)對(duì)象沒(méi)有依賴(lài)于Spring。
使用Spring構(gòu)建的應(yīng)用程序易于單元測(cè)試。
Spring能使EJB的使用成為一個(gè)實(shí)現(xiàn)選擇,而不是應(yīng)用架構(gòu)的必然選擇。你能選擇用POJOs或local EJBs來(lái)實(shí)現(xiàn)業(yè)務(wù)接口,卻不會(huì)影響調(diào)用代碼。
Spring幫助你解決許多問(wèn)題而無(wú)需使用EJB。Spring能提供一種EJB的替換物,它們適于許多web應(yīng)用。例如,Spring能使用AOP提供聲明性事務(wù)而不通過(guò)使用EJB容器,如果你僅僅需要與單個(gè)的數(shù)據(jù)庫(kù)打交道,甚至不需要JTA實(shí)現(xiàn)。
Spring為數(shù)據(jù)存取提供了一致的框架,不論是使用JDBC或O/R mapping產(chǎn)品(如Hibernate)。
Spring確實(shí)使你能通過(guò)最簡(jiǎn)單可行的解決辦法解決你的問(wèn)題。這些特性是有很大價(jià)值的。
Spring能做什么?
Spring提供許多功能,在此我將快速地依次展示其各個(gè)主要方面。
任務(wù)描述:
首先,讓我們明確Spring范圍。盡管Spring覆蓋了許多方面,但我們已經(jīng)有清楚的概念,它什么應(yīng)該涉及和什么不應(yīng)該涉及。
Spring的主要目的是使Java EE易用和促進(jìn)好編程習(xí)慣。
Spring 不重新開(kāi)發(fā)已有的東西。因此,在Spring中你將發(fā)現(xiàn)沒(méi)有日志記錄的包,沒(méi)有連接池,沒(méi)有分布事務(wù)調(diào)度。這些均有開(kāi)源項(xiàng)目提供(例如 Commons Logging 用來(lái)做所有的日志輸出,或Commons DBCP用來(lái)作數(shù)據(jù)連接池),或由你的應(yīng)用程序服務(wù)器提供。因?yàn)橥瑯拥牡脑?,我們沒(méi)有提供O/R mapping層,對(duì)此,已有有好的解決辦法如Hibernate和JDO。
Spring的目標(biāo)是使已存在的技術(shù)更加易用。例如,盡管我們沒(méi)有底層事務(wù)協(xié)調(diào)處理,但我們提供了一個(gè)抽象層覆蓋了JTA或任何其他的事務(wù)策略。
Spring沒(méi)有直接和其他的開(kāi)源項(xiàng)目競(jìng)爭(zhēng),除非我們感到我們能提供新的一些東西。例如,象許多開(kāi)發(fā)人員,我們從來(lái)沒(méi)有為Struts高興過(guò),并且感到在MVC web framework中還有改進(jìn)的余地。在某些領(lǐng)域,例如輕量級(jí)的 IoC容器和AOP框架,Spring有直接的競(jìng)爭(zhēng),但是在這些領(lǐng)域還沒(méi)有已經(jīng)較為流行的解決方案。(Spring在這些區(qū)域是開(kāi)路先鋒。)
聯(lián)系客服