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





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

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

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

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

簡(jiǎn)單來(lái)說(shuō),Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。

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

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

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

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

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

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



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

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



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



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

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

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

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

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

一.什么是 EJB?

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

二.Sun 對(duì) EJB 的期望

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

三.為什么選擇 EJB?

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

四.EJB 架構(gòu)

為了滿(mǎn)足架構(gòu)的目標(biāo),規(guī)范中描述了
服務(wù)器 (Server)
容器 (Container)
類(lèi) (Class) 和實(shí)例 (Instance)
Home 和 Remote 接口
客戶(hù)端 (Client)

五. 簡(jiǎn)化的編程模型

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