Struts優缺點
優點:
1.開源軟件,能更深入的瞭解其內部實現機制。
2.Taglib標記庫,靈活動用,能大大提高開發效率。
3.頁面導航使系統的脈絡更加清晰。通過一個配置文件,即可把握整個系統
各部分之間的聯繫,這對於後期的維護有着莫大的好處。尤其是當另一批開發者
接手這個項目時,這種優勢體現得更加明顯。
4.提供Exception處理機制.
5.數據庫鏈接池管理
6.Struts的Action必需是thread-safe方式,它僅僅允許一個實例去處理所
有的請求。所以action用到的所有的資源都必需統一同步,這個就引起了線程安
全的問題。
缺點:
Taglib是Struts的一大優勢,但對於初學者而言,卻需要一個持續學習的過程,
甚至還會打亂你網頁編寫的習慣,但是,當你習慣了它時,你會覺得它真的很棒。
Struts將MVC的Controller一分爲三,在獲得結構更加清晰的同時,也增加了系
統的複雜度。
ActionForms使用不便、無法進行單元測試(StrutsTestCase只能用於集成)
Spring的原理和優點
Spring真正的精華是它的Ioc模式實現的BeanFactory和AOP,它自己在這
個基礎上延伸的功能有些畫蛇添足。
Ioc模式是什麼
可伸縮性和重/輕量,誰是實用系統的架構主選?
Spring
它是一個開源的項目,而且目前非常活躍;它基於IoC(InversionofControl,反
向控制)和AOP的構架多層j2ee系統的框架,但它不強迫你必須在每一層中
必須使用Spring,因爲它模塊化的很好,允許你根據自己的需要選擇使用它的某
一個模塊;它實現了很優雅的MVC,對不同的數據訪問技術提供了統一的接口,
採用IoC使得可以很容易的實現bean的裝配,提供了簡潔的AOP並據此實現
TranscationManagment,等等
優點
a.Spring能有效地組織你的中間層對象,不管你是否選擇使用了EJB。如果你僅
僅使用了Struts或其他爲J2EE的API特製的framework,Spring致力於解決剩
下的問題。
b.Spring能消除在許多工程中常見的對Singleton的過多使用。根據我的經驗,
這是一個很大的問題,它降低了系統的可測試性和麪向對象的程度。
c. 通過一種在不同應用程序和項目間一致的方法來處理配置文件,Spring能消
除各種各樣自定義格式的屬性文件的需要。曾經對某個類要尋找的是哪個魔法般
的屬性項或系統屬性感到不解,爲此不得不去讀Javadoc甚至源編碼?有了
Spring,你僅僅需要看看類的JavaBean屬性。InversionofControl的使用(在下
面討論)幫助完成了這種簡化。
d.?通過把對接口編程而不是對類編程的代價幾乎減少到沒有,Spring能夠促進
養成好的編程習慣。
e.Spring被設計爲讓使用它創建的應用儘可能少的依賴於他的APIs。在Spring
應用中的大多數業務對象沒有依賴於Spring。
f. 使用Spring構建的應用程序易於單元測試。
g.Spring能使EJB的使用成爲一個實現選擇,而不是應用架構的必然選擇。你能
選擇用POJOs或localEJBs來實現業務接口,卻不會影響調用代碼。
h.Spring幫助你解決許多問題而無需使用EJB。Spring能提供一種EJB的替換物,
它們適用於許多web應用。例如,Spring能使用AOP提供聲明性事務管理而不
通過EJB容器,如果你僅僅需要與單個數據庫打交道,甚至不需要一個JTA實
現。
i. Spring爲數據存取提供了一個一致的框架,不論是使用的是JDBC還是O/R
mapping產品(如Hibernate)。
Spring確實使你能通過最簡單可行的解決辦法來解決你的問題。而這是有有很大
價值的。
缺點:
使用人數不多、jsp中要寫很多代碼、控制器過於靈活,缺少一個公用控 制器
Hibernate
優點:
Hibernate是JDBC的輕量級的對象封裝,它是一個獨立的對象持久層框架。
Hibernate可以用在任何JDBC可以使用的場合,例如Java應用程序的數據庫訪
問代碼,DAO接口的實現類,甚至可以是BMP裏面的訪問數據庫的代碼。
Hibernate是一個和JDBC密切關聯的框架,所以Hibernate的兼容性和JDBC
驅動,和數據庫都有一定的關係,但是和使用它的Java程序,和AppServer沒
有任何關係,也不存在兼容性問題。
Hibernate不能用來直接和EntityBean做對比,只有放在整個J2EE項目的框
架中才能比較。並且即使是放在軟件整體框架中來看,Hibernate也是做爲JDBC
的替代者出現的,而不是EntityBean的替代者出現的,
Hibernate是一個開放源代碼的對象關係映射框架,它對JDBC進行了非常
輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱
數據庫。
Hibernate可以應用在任何使用JDBC的場合。
Hibernate使用Java 反射機制而不是字節碼增強程序來實現透明性。
Hibernate的性能非常好,因爲它是個輕量級框架。映射的靈活性很出色。
它支持各種關係數據庫,從一對一到多對多的各種複雜關係。
缺點:
它限制您所使用的對象模型。(例如,一個持久性類不能映射到多個表)。
讓我再列一次我已經列n次的框架結構:
傳統的架構:
1)SessionBean<->EntityBean<->DB
爲了解決性能障礙的替代架構:
2)SessionBean<->DAO<->JDBC<->DB
使用Hibernate來提高上面架構的開發效率的架構:
3)SessionBean<->DAO<->Hibernate<->DB
就上面3個架構來分析:
1、內存消耗:採用JDBC的架構2無疑是最省內存的,Hibernate的架構次之,EB
的架構1最差。
2、運行效率:如果JDBC的代碼寫的非常優化,那麼JDBC架構運行效率最高,
但是實際項目中,這一點幾乎做不到,這需要程序員非常精通JDBC,運用Batch
語句,調整PreapredStatement的BatchSize和FetchSize等參數,以及在必要的
情況下采用結果集cache等等。而一般情況下程序員是做不到這一點的。因此
Hibernate架構表現出最快的運行效率。EB的架構效率會差的很遠。
3、開發效率:在有JBuilder的支持下以及簡單的項目,EB架構開發效率最高,
JDBC次之,Hibernate最差。但是在大的項目,特別是持久層關係映射很複雜的
情況下,Hibernate效率高的驚人,JDBC次之,而EB架構很可能會失敗。