Structs
Struts只是一個MVC框架(Framework),用于快速開發(fā)Java Web應(yīng)用。Struts實現(xiàn)的重點在C(Controller),包括ActionServlet/RequestProcessor和我們定制的Action,也為V(View)提供了一系列定制標簽(Custom Tag)。但Struts幾乎沒有涉及M(Model),所以Struts可以采用JAVA實現(xiàn)的任何形式的商業(yè)邏輯。
Spring是一個輕型容器(light-weight container),其核心是Bean工廠(Bean Factory),用以構(gòu)造我們所需要的M(Model)。在此基礎(chǔ)之上,Spring提供了AOP(Aspect-Oriented Programming, 面向?qū)用娴木幊蹋┑膶崿F(xiàn),用它來提供非管理環(huán)境下申明方式的事務(wù)、安全等服務(wù);對Bean工廠的擴展ApplicationContext更加方便我們實現(xiàn)J2EE的應(yīng)用;DAO/ORM的實現(xiàn)方便我們進行數(shù)據(jù)庫的開發(fā);Web MVC和Spring Web提供了Java Web應(yīng)用的框架或與其他流行的Web框架進行集成。
就是說可將兩者一起使用,達到將兩者自身的特點進行互補。
優(yōu)點:
Struts跟Tomcat、Turbine等諸多Apache項目一樣,是開源軟件,這是它的一大優(yōu)點。使開發(fā)者能更深入的了解其內(nèi)部實現(xiàn)機制。
除此之外,Struts的優(yōu)點主要集中體現(xiàn)在兩個方面:Taglib和頁面導(dǎo)航。Taglib是Struts的標記庫,靈活動用,能大大提高開發(fā)效率。另外,就目前國內(nèi)的JSP開發(fā)者而言,除了使用JSP自帶的常用標記外,很少開發(fā)自己的標記,或許Struts是一個很好的起點。
關(guān)于頁面導(dǎo)航,我認為那將是今后的一個發(fā)展方向,事實上,這樣做,使系統(tǒng)的脈絡(luò)更加清晰。通過一個配置文件,即可把握整個系統(tǒng)各部分之間的聯(lián)系,這對于后期的維護有著莫大的好處。尤其是當(dāng)另一批開發(fā)者接手這個項目時,這種優(yōu)勢體現(xiàn)得更加明顯。
缺點:
Taglib是Struts的一大優(yōu)勢,但對于初學(xué)者而言,卻需要一個持續(xù)學(xué)習(xí)的過程,甚至還會打亂你網(wǎng)頁編寫的習(xí)慣,但是,當(dāng)你習(xí)慣了它時,你會覺得它真的很棒。
Struts將MVC的Controller一分為三,在獲得結(jié)構(gòu)更加清晰的同時,也增加了系統(tǒng)的復(fù)雜度。
Struts從產(chǎn)生到現(xiàn)在還不到半年,但已逐步越來越多運用于商業(yè)軟件。雖然它現(xiàn)在還有不少缺點,但它是一種非常優(yōu)秀的J2EE MVC實現(xiàn)方式,如果你的系統(tǒng)準備采用J2EE MVC架構(gòu),那么,不妨考慮一下Struts。





spring
Spring是一個開源框架,它由Rod Johnson創(chuàng)建。它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限于服務(wù)器端的開發(fā)。從簡單性、可測試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。

?? ? ? ? 目的:解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性

?? ? ? ? 功能:使用基本的JavaBean代替EJB,并提供了更多的企業(yè)應(yīng)用功能

?? ? ? ? 范圍:任何Java應(yīng)用

簡單來說,Spring是一個輕量級的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。

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

■? ? ? ? 控制反轉(zhuǎn)——Spring通過一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進了松耦合。當(dāng)應(yīng)用了IoC,一個對象依賴的其它對象會通過被動的方式傳遞進來,而不是這個對象自己創(chuàng)建或者查找依賴對象。你可以認為IoC與JNDI相反——不是對象從容器中查找依賴,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。

■? ? ? ? 面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級服務(wù)(例如審計(auditing)和事務(wù)()管理)進行內(nèi)聚性的開發(fā)。應(yīng)用對象只實現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已。它們并不負責(zé)(甚至是意識)其它的系統(tǒng)級關(guān)注點,例如日志或事務(wù)支持。

■? ? ? ? 容器——Spring包含并管理應(yīng)用對象的配置和生命周期,在這個意義上它是一種容器,你可以配置你的每個bean如何被創(chuàng)建——基于一個可配置原型(prototype),你的bean可以創(chuàng)建一個單獨的實例或者每次需要時都生成一個新的實例——以及它們是如何相互關(guān)聯(lián)的。然而,Spring不應(yīng)該被混同于傳統(tǒng)的重量級的EJB容器,它們經(jīng)常是龐大與笨重的,難以使用。

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

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



Hibernate
Hibernate 是一個面向 Java 環(huán)境的對象/關(guān)系數(shù)據(jù)庫映射工具。用來把對象模型表示的對象映射到基于SQL 的關(guān)系模型結(jié)構(gòu)中去。

Hibernate 不僅僅管理Java 類到數(shù)據(jù)庫表的映射,還提供數(shù)據(jù)查詢和獲取數(shù)據(jù)的方法,可以大幅度減少開發(fā)時人工使用SQL 和JDBC 處理數(shù)據(jù)的時間。Hibernate 的目標是對于開發(fā)者通常的數(shù)據(jù)持久化相關(guān)的編程任務(wù),解放其中的95%。



是一個 開放源代碼 的對象關(guān)系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。 Hibernate可以應(yīng)用在任何使用JDBC的場合,既可以在Java的客戶端程序?qū)嵱茫部梢栽赟ervlet/JSP的Web應(yīng)用中使用,最具革命意義的是,Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。



EJB
? ? EJB是sun的服務(wù)器端組件模型,最大的用處是部署分布式應(yīng)用程序,類似微軟的.com技術(shù)。憑借java跨平臺的優(yōu)勢,用EJB技術(shù)部署的分布式系統(tǒng)可以不限于特定的平臺。

? ? EJB (Enterprise JavaBean)是J2EE的一部分,定義了一個用于開發(fā)基于組件的企業(yè)多重應(yīng)用程序的標準。其特點包括網(wǎng)絡(luò)服務(wù)支持和核心開發(fā)工具(SDK)。

? ? 在J2EE里,Enterprise Java Beans(EJB)稱為Java 企業(yè)柄,是Java的核心代碼,分為整體柄和片段柄和消息柄三個部分,其中的消息柄將在以后再作討論。現(xiàn)在我們來看看什么是整體柄和片段柄。

? ? 整體柄是一種對象: 標準Java對象由創(chuàng)建它的程序創(chuàng)建,當(dāng)程序終止時,對象也隨之丟失,這就意味著當(dāng)再次運行些程序時,將無法找到先前創(chuàng)建的柄,而整體柄會一直存在著直到它被刪除。 一個程序可以創(chuàng)建一個整體柄,并且這個程序可以在被保存后隨時停止和重啟。整體柄將會依然存在。重啟后,程序可以找到與之相對應(yīng)的整體柄,并且會繼續(xù)使用這個整體柄。

? ? EJB實際上是SUN的J2EE中的一套規(guī)范,并且規(guī)定了一系列的API用來實現(xiàn)把EJB概念轉(zhuǎn)換成EJB產(chǎn)品.EJB是BEANS,BEANS是什么概念,那就是得有一個容納她,讓她可勁造騰的地方,就是得有容器.EJB必須生存在EJB容器中.這個容器可是功能強大之極!她首先要包裝你BEAN,EJB的客戶程序?qū)嶋H上從來就不和你編寫的EJB直接打交道,他們之間是通過HOME/REMOTE接口來發(fā)生關(guān)系的.它負責(zé)你的BEAN的所有的吃喝拉薩睡,比如BEAN的持續(xù)化,安全性,事務(wù)管理...

一.什么是 EJB?

一個技術(shù)規(guī)范:EJB 從技術(shù)上而言不是一種"產(chǎn)品"
EJB 是一種標準描述了構(gòu)建應(yīng)用組件要解決的:
可擴展 (Scalable)
分布式 (Distributed)
事務(wù)處理 (Transactional)
數(shù)據(jù)存儲 (Persistent)
安全性 (Secure)

二.Sun 對 EJB 的期望

提供一個標準的分布的、基于 OO 的組件架構(gòu)
屏蔽復(fù)雜的系統(tǒng)級功能需求
Write once, run anywhere
與非 Java 應(yīng)用之間的互操作能力
兼容 CORBA 標準

三.為什么選擇 EJB?

EJB 服務(wù)器完成"繁雜"的工作:應(yīng)用開發(fā)人員關(guān)注于業(yè)務(wù)邏輯的實現(xiàn)而不是底層的實現(xiàn)機制(類似于 4GL 語言設(shè)計的目標)
支持事務(wù)處理
多個業(yè)務(wù)操作同時成功,或全部失敗
可以通過在代碼外的描述來定義事務(wù)處理級別
可擴展性
EJB 可以根據(jù)您應(yīng)用的增長而擴展
EJB 服務(wù)器往往還提供了負載均衡和
安全性:由 EJB 服務(wù)器提供資源的訪問權(quán)限控制

四.EJB 架構(gòu)

為了滿足架構(gòu)的目標,規(guī)范中描述了
服務(wù)器 (Server)
容器 (Container)
類 (Class) 和實例 (Instance)
Home 和 Remote 接口
客戶端 (Client)

五. 簡化的編程模型

關(guān)注于業(yè)務(wù)邏輯實現(xiàn):EJB 負責(zé)生命周期 (lifecycle), 數(shù)據(jù)存儲 (persistence), 事務(wù)處理語義 (transactional semantic), 安全(security), ...
通用的編程模型:各種服務(wù)的高層 API
Java 是其編程語言