Struts、Spring、Hibernate三大框架的原理和優(yōu)點(diǎn)_第1頁(yè)
Struts、Spring、Hibernate三大框架的原理和優(yōu)點(diǎn)_第2頁(yè)
Struts、Spring、Hibernate三大框架的原理和優(yōu)點(diǎn)_第3頁(yè)
Struts、Spring、Hibernate三大框架的原理和優(yōu)點(diǎn)_第4頁(yè)
Struts、Spring、Hibernate三大框架的原理和優(yōu)點(diǎn)_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Struts的原理和優(yōu)點(diǎn).Struts工作原理MVC即Model-View-Controller的縮寫,是一種常用的設(shè)計(jì)模式。MVC 減弱了業(yè)務(wù)邏輯接口和數(shù)據(jù)接口之間的耦合,以及讓視圖層更富于變化。MVC的工作原理,如下圖1所示:Struts 是MVC的一種實(shí)現(xiàn),它將 Servlet和 JSP 標(biāo)記(屬于 J2EE 規(guī)范)用作實(shí)現(xiàn)的一部分。Struts繼承了MVC的各項(xiàng)特性,并根據(jù)J2EE的特點(diǎn),做了相應(yīng)的變化與擴(kuò)展。Struts的工作原理,視圖:主要由JSP生成頁(yè)面完成視圖,Struts提供豐富的JSP 標(biāo)簽庫(kù): Html,Bean,Logic,Template等,這有利于分開表現(xiàn)邏輯和程序

2、邏輯。控制:在Struts中,承擔(dān)MVC中Controller角色的是一個(gè)Servlet,叫ActionServlet。ActionServlet是一個(gè)通用的控制組件。這個(gè)控制組件提供了處理所有發(fā)送到Struts的bbb請(qǐng)求的入口點(diǎn)。它截取和分發(fā)這些請(qǐng)求到相應(yīng)的動(dòng)作類(這些動(dòng)作類都是Action類的子類)。另外控制組件也負(fù)責(zé)用相應(yīng)的請(qǐng)求參數(shù)填充 Action From(通常稱之為FromBean),并傳給動(dòng)作類(通常稱之為ActionBean)。動(dòng)作類實(shí)現(xiàn)核心商業(yè)邏輯,它可以訪問java bean 或調(diào)用EJB。最后動(dòng)作類把控制權(quán)傳給后續(xù)的JSP 文件,后者生成視圖。所有這些控制邏輯利用Str

3、uts-config.xml文件來(lái)配置。模型:模型以一個(gè)或多個(gè)java bean的形式存在。這些bean分為三類:Action Form、Action、JavaBean or EJB。Action Form通常稱之為FormBean,封裝了來(lái)自于Client的用戶請(qǐng)求信息,如表單信息。Action通常稱之為ActionBean,獲取從ActionSevlet傳來(lái)的FormBean,取出FormBean中的相關(guān)信息,并做出相關(guān)的處理,一般是調(diào)用Java Bean或EJB等。流程:在Struts中,用戶的請(qǐng)求一般以*.do作為請(qǐng)求服務(wù)名,所有的*.do請(qǐng)求均被指向ActionSevlet,Acti

4、onSevlet根據(jù)Struts-config.xml中的配置信息,將用戶請(qǐng)求封裝成一個(gè)指定名稱的FormBean,并將此FormBean傳至指定名稱的ActionBean,由ActionBean完成相應(yīng)的業(yè)務(wù)操作,如文件操作,數(shù)據(jù)庫(kù)操作等。每一個(gè)*.do均有對(duì)應(yīng)的FormBean名稱和ActionBean名稱,這些在Struts-config.xml中配置。核心:Struts的核心是ActionSevlet,ActionSevlet的核心是Struts-config.xml。Struts優(yōu)缺點(diǎn)優(yōu)點(diǎn):1.開源軟件,能更深入的了解其內(nèi)部實(shí)現(xiàn)機(jī)制。2.Taglib標(biāo)記庫(kù),靈活動(dòng)用,能大大提高開發(fā)效

5、率。3.頁(yè)面導(dǎo)航使系統(tǒng)的脈絡(luò)更加清晰。通過一個(gè)配置文件,即可把握整個(gè)系統(tǒng)各部分之間的了解,這對(duì)于后期的維護(hù)有著莫大的好處。尤其是當(dāng)另一批開發(fā)者接手這個(gè)項(xiàng)目時(shí),這種優(yōu)勢(shì)體現(xiàn)得更加明顯。4. 提供Exception處理機(jī)制 . 5. 數(shù)據(jù)庫(kù)鏈接池管理 6. Struts 的Action必需是threadsafe方式,它僅僅允許一個(gè)實(shí)例去處理所有的請(qǐng)求。所以action用到的所有的資源都必需統(tǒng)一同步,這個(gè)就引起了線程安全的問題。缺點(diǎn):Taglib是Struts的一大優(yōu)勢(shì),但對(duì)于初學(xué)者而言,卻需要一個(gè)持續(xù)學(xué)習(xí)的過程,甚至還會(huì)打亂你網(wǎng)頁(yè)編寫的習(xí)慣,但是,當(dāng)你習(xí)慣了它時(shí),你會(huì)覺得它真的

6、很棒。Struts將MVC的Controller一分為三,在獲得結(jié)構(gòu)更加清晰的同時(shí),也增加了系統(tǒng)的復(fù)雜度。ActionForms使用不便、無(wú)法進(jìn)行單元測(cè)試(StrutsTestCase只能用于集成)Spring的原理和優(yōu)點(diǎn)Spring真正的精華是它的Ioc模式實(shí)現(xiàn)的BeanFactory和AOP,它自己在這個(gè)基礎(chǔ)上延伸的功能有些畫蛇添足。Ioc模式是什么可伸縮性和重/輕量,誰(shuí)是實(shí)用系統(tǒng)的架構(gòu)主選? Spring它是一個(gè)開源的項(xiàng)目,而且目前非常活躍;它基于IoC(Inversion of Control,反向控制)和AOP的構(gòu)架多層j2ee系統(tǒng)的框架,但它不強(qiáng)迫你必須在每一層 中必須使用Spri

7、ng,因?yàn)樗K化的很好,允許你根據(jù)自己的需要選擇使用它的某一個(gè)模塊;它實(shí)現(xiàn)了很優(yōu)雅的MVC,對(duì)不同的數(shù)據(jù)訪問技術(shù)提供了統(tǒng)一的 接口,采用IoC使得可以很容易的實(shí)現(xiàn)bean的裝配,提供了簡(jiǎn)潔的AOP并據(jù)此實(shí)現(xiàn)Transcation Managment,等等優(yōu)點(diǎn) a. Spring能有效地組織你的中間層對(duì)象,不管你是否選擇使用了EJB。如果你僅僅使用了Struts或其他為J2EE的 API特制的framework,Spring致力于解決剩下的問題。 b. Spring能消除在許多工程中常見的對(duì)Singleton的過多使用。根據(jù)我的經(jīng)驗(yàn),這是一個(gè)很大的問題,它降低了系統(tǒng)的可測(cè)試性和面向?qū)ο蟮某潭取?/p>

8、 c. 通過一種在不同應(yīng)用程序和項(xiàng)目間一致的方法來(lái)處理配置文件,Spring能消除各種各樣自定義格式的屬性文件的需要。曾經(jīng)對(duì)某個(gè)類要尋找的是哪個(gè)魔法般的屬性項(xiàng)或系統(tǒng)屬性感到不解,為此不得不去讀Javadoc甚至源編碼?有了Spring,你僅僅需要看看類的JavaBean屬性。Inversion of Control的使用(在下面討論)幫助完成了這種簡(jiǎn)化。 d.? 通過把對(duì)接口編程而不是對(duì)類編程的代價(jià)幾乎減少到?jīng)]有,Spring能夠促進(jìn)養(yǎng)成好的編程習(xí)慣。 e. Spring被設(shè)計(jì)為讓使用它創(chuàng)建的應(yīng)用盡可能少的依賴于他的APIs。在Spring應(yīng)用中的大多數(shù)業(yè)務(wù)對(duì)象沒有依賴于Spring。 f.

9、使用Spring構(gòu)建的應(yīng)用程序易于單元測(cè)試。 g. Spring能使EJB的使用成為一個(gè)實(shí)現(xiàn)選擇,而不是應(yīng)用架構(gòu)的必然選擇。你能選擇用POJOs或local EJBs來(lái)實(shí)現(xiàn)業(yè)務(wù)接口,卻不會(huì)影響調(diào)用代碼。 h. Spring幫助你解決許多問題而無(wú)需使用EJB。Spring能提供一種EJB的替換物,它們適用于許多web應(yīng)用。例如,Spring能使用AOP提供聲明性事務(wù)管理而不通過EJB容器,如果你僅僅需要與單個(gè)數(shù)據(jù)庫(kù)打交道,甚至不需要一個(gè)JTA實(shí)現(xiàn)。 i. Spring為數(shù)據(jù)存取提供了一個(gè)一致的框架,不論是使用的是JDBC還是O/R mapping產(chǎn)品(如Hibernate)。 Spring確實(shí)使

10、你能通過最簡(jiǎn)單可行的解決辦法來(lái)解決你的問題。而這是有有很大價(jià)值的。缺點(diǎn):使用人數(shù)不多、jsp中要寫很多代碼、控制器過于靈活,缺少一個(gè)公用控制器Hibernate的原理和優(yōu)點(diǎn)。Hibernate使用了J2EE架構(gòu)中的如下技術(shù):JDBC、JTA、JNDI。其中JDBC是一個(gè)支持關(guān)系數(shù)據(jù)庫(kù)操作的一個(gè)基礎(chǔ)層;它與JNDI和JTA一起結(jié)合,使得Hibernate可以方便地集成到J2EE應(yīng)用服務(wù)器中去。 在這里,我們不會(huì)詳細(xì)地去討論Hibernate API接口中的所有方法,我們只簡(jiǎn)要講一下每個(gè)主要接口的功能,如果你想了解得更多的話,你可以在Hibernate的源碼包中的net.sf.hibernate子

11、包中去查看這些接口的源代碼。下面我們依次講一下所有的主要接口: 核心接口 以下5個(gè)核心接口幾乎在任何實(shí)際開發(fā)中都會(huì)用到。通過這些接口,你不僅可以存儲(chǔ)和獲得持久對(duì)象,并且能夠進(jìn)行事務(wù)控制。 Session接口 Session接口對(duì)于Hibernate 開發(fā)人員來(lái)說是一個(gè)最重要的接口。然而在Hibernate中,實(shí)例化的Session是一個(gè)輕量級(jí)的類,創(chuàng)建和銷毀它都不會(huì)占用很多資源。這在實(shí)際項(xiàng)目中確實(shí)很重要,因?yàn)樵诳蛻舫绦蛑校赡軙?huì)不斷地創(chuàng)建以及銷毀Session對(duì)象,如果Session的開銷太大,會(huì)給系統(tǒng)帶來(lái)不良影響。SessionFactory 接口 這里用到了一個(gè)設(shè)計(jì)模式工廠模式,用戶程序從

12、工廠類SessionFactory中取得Session的實(shí)例。 令你感到奇怪的是SessionFactory并不是輕量級(jí)的!實(shí)際上它的設(shè)計(jì)者的意圖是讓它能在整個(gè)應(yīng)用中共享。典型地來(lái)說,一個(gè)項(xiàng)目通常只需要一個(gè)SessionFactory就夠了,但是當(dāng)你的項(xiàng)目要操作多個(gè)數(shù)據(jù)庫(kù)時(shí),那你必須為每個(gè)數(shù)據(jù)庫(kù)指定一個(gè)SessionFactory。 SessionFactory在Hibernate中實(shí)際起到了一個(gè)緩沖區(qū)的作用,它緩沖了Hibernate自動(dòng)生成的SQL語(yǔ)句和一些其它的映射數(shù)據(jù),還緩沖了一些將來(lái)有可能重復(fù)利用的數(shù)據(jù)。 Configuration 接口 Configuration接口的作用是對(duì)Hi

13、bernate進(jìn)行配置,以及對(duì)它進(jìn)行啟動(dòng)。在Hibernate的啟動(dòng)過程中,Configuration類的實(shí)例首先定位映射文檔的位置,讀取這些配置,然后創(chuàng)建一個(gè)SessionFactory對(duì)象。 Query和Criteria接口 Query接口讓你方便地對(duì)數(shù)據(jù)庫(kù)及持久對(duì)象進(jìn)行查詢,它可以有兩種表達(dá)方式:HQL語(yǔ)言或本地?cái)?shù)據(jù)庫(kù)的SQL語(yǔ)句。Query經(jīng)常被用來(lái)綁定查詢參數(shù)、限制查詢記錄數(shù)量,并最終執(zhí)行查詢操作。 Criteria接口與Query接口非常類似,它允許你創(chuàng)建并執(zhí)行面向?qū)ο蟮臉?biāo)準(zhǔn)化查詢。 值得注意的是Query接口也是輕量級(jí)的,它不能在Session之外使用。 Callback 接口

14、當(dāng)一些有用的事件發(fā)生時(shí)例如持久對(duì)象的載入、存儲(chǔ)、刪除時(shí),Callback接口會(huì)通知Hibernate去接收一個(gè)通知消息。一般而言,Callback接口在用戶程序中并不是必須的,但你要在你的項(xiàng)目中創(chuàng)建審計(jì)日志時(shí),你可能會(huì)用到它。以下是它的策略接口:· 主鍵的生成 (IdentifierGenerator 接口) · 本地SQL語(yǔ)言支持 (Dialect 抽象類) · 緩沖機(jī)制 (Cache 和CacheProvider 接口) · JDBC 連接管理 (ConnectionProvider接口) .事務(wù)管理 (TransactionFactory, Tra

15、nsaction, 和 TransactionManagerLookup 接口) · ORM 策略 (ClassPersister 接口) · 屬性訪問策略 (PropertyAccessor 接口) · 代理對(duì)象的創(chuàng)建 (ProxyFactory接口) Hibernate為以上所列的機(jī)制分別創(chuàng)建了一個(gè)缺省的實(shí)現(xiàn),因此如果你只是要增強(qiáng)它的某個(gè)策略的功能的話,只需簡(jiǎn)單地繼承這個(gè)類就可以了,沒有必要從頭開始寫代碼。Hibernate運(yùn)行在兩種環(huán)境下:可管理環(huán)境和不可管理環(huán)境 · 可管理環(huán)境這種環(huán)境可管理如下資源:池資源管理,諸如數(shù)據(jù)庫(kù)連接池和,還有事務(wù)管理、

16、安全定義。一些典型的J2EE服務(wù)器(JBoss、Weblogic、WebSphere)已經(jīng)實(shí)現(xiàn)了這些。 · 不可管理環(huán)境只是提供了一些基本的功能,諸如像Jetty或Tomcat這樣的servlet容器環(huán)境。優(yōu)點(diǎn):Hibernate是JDBC的輕量級(jí)的對(duì)象封裝,它是一個(gè)獨(dú)立的對(duì)象持久層框架。Hibernate可以用在任何JDBC可以使用的場(chǎng)合,例如Java應(yīng)用程序的數(shù)據(jù)庫(kù)訪問代碼,DAO接口的實(shí)現(xiàn)類,甚至可以是BMP里面的訪問數(shù)據(jù)庫(kù)的代碼。Hibernate是一個(gè)和JDBC密切關(guān)聯(lián)的框架,所以Hibernate的兼容性和JDBC驅(qū)動(dòng),和數(shù)據(jù)庫(kù)都有一定的關(guān)系,但是和使用它的Java程序,

17、和App Server沒有任何關(guān)系,也不存在兼容性問題。Hibernate不能用來(lái)直接和Entity Bean做對(duì)比,只有放在整個(gè)J2EE項(xiàng)目的框架中才能比較。并且即使是放在軟件整體框架中來(lái)看,Hibernate也是做為JDBC的替代者出現(xiàn)的,而不是Entity Bean的替代者出現(xiàn)的,Hibernate是一個(gè)開放源代碼的對(duì)象關(guān)系映射框架,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,使得Java程序員可以隨心所欲的使用對(duì)象編程思維來(lái)操縱數(shù)據(jù)庫(kù)。Hibernate可以應(yīng)用在任何使用JDBC的場(chǎng)合。 Hibernate 使用 Java 反射機(jī)制 而不是字節(jié)碼增強(qiáng)程序來(lái)實(shí)現(xiàn)透明性。 Hibernate

18、的性能非常好,因?yàn)樗莻€(gè)輕量級(jí)框架。 映射的靈活性很出色。它支持各種關(guān)系數(shù)據(jù)庫(kù),從一對(duì)一到多對(duì)多的各種復(fù)雜關(guān)系。 缺點(diǎn):它限制您所使用的對(duì)象模型。(例如,一個(gè)持久性類不能映射到多個(gè)表)。讓我再列一次我已經(jīng)列n次的框架結(jié)構(gòu):傳統(tǒng)的架構(gòu):1) Session Bean <-> Entity Bean <-> DB為了解決性能障礙的替代架構(gòu):2) Session Bean <-> DAO <-> JDBC <-> DB使用Hibernate來(lái)提高上面架構(gòu)的開發(fā)效率的架構(gòu):3) Session Bean <-> DAO <-> Hibernate <-> DB 就上面3個(gè)架構(gòu)來(lái)分析:1、內(nèi)存消耗:采用JDBC的架構(gòu)2無(wú)疑是最省內(nèi)存的,Hibernate的架構(gòu)次之,EB的架構(gòu)1最差。2、運(yùn)行效率:如果JDBC的代碼寫的非常優(yōu)化,那么JDBC架構(gòu)運(yùn)行效率最高,但是實(shí)際項(xiàng)目中,這一點(diǎn)幾乎做不到,這需要程序員非常精通JDBC,運(yùn)用Bat

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論