Struts優(yōu)缺點(diǎn)剖析 開源是把雙刃劍?
Struts優(yōu)缺點(diǎn)跟Tomcat、Turbine等諸多Apache項(xiàng)目一樣,是開源軟件,這是它的一大優(yōu)點(diǎn)。使開發(fā)者能更深入的了解其內(nèi)部實(shí)現(xiàn)機(jī)制。
Struts開放源碼框架的創(chuàng)建是為了使開發(fā)者在構(gòu)建基于Java Servlet和JavaServer Pages(JSP)技術(shù)的Web應(yīng)用時(shí)更加容易。Struts框架為開放者提供了一個(gè)統(tǒng)一的標(biāo)準(zhǔn)框架,通過(guò)使用Struts作為基礎(chǔ),開發(fā)者能夠更專注于應(yīng)用程序的商業(yè)邏輯。Struts框架本身是使用Java Servlet和JavaServer Pages技術(shù)的一種Model-View-Controller(MVC)實(shí)現(xiàn)。 具體來(lái)講,
Struts優(yōu)點(diǎn)有:
1. 實(shí)現(xiàn)MVC模式,結(jié)構(gòu)清晰,使開發(fā)者只關(guān)注業(yè)務(wù)邏輯的實(shí)現(xiàn).
2. 有豐富的tag可以用 ,Struts的標(biāo)記庫(kù)(Taglib),如能靈活動(dòng)用,則能大大提高開發(fā)效率。另外,就目前國(guó)內(nèi)的JSP開發(fā)者而言,除了使用JSP自帶的常用標(biāo)記外,很少開發(fā)自己的標(biāo)記,或許Struts是一個(gè)很好的起點(diǎn)。
3. 頁(yè)面導(dǎo)航.頁(yè)面導(dǎo)航將是今后的一個(gè)發(fā)展方向,事實(shí)上,這樣做,使系統(tǒng)的脈絡(luò)更加清晰。通過(guò)一個(gè)配置文件,即可把握整個(gè)系統(tǒng)各部分之間的聯(lián)系,這對(duì)于后期的維護(hù)有著莫大的好處。尤其是當(dāng)另一批開發(fā)者接手這個(gè)項(xiàng)目時(shí),這種優(yōu)勢(shì)體現(xiàn)得更加明顯。
4. 提供Exception處理機(jī)制 .
5. 數(shù)據(jù)庫(kù)鏈接池管理
6. 支持I18N
Struts缺點(diǎn):
一、 轉(zhuǎn)到展示層時(shí),需要配置forward,每一次轉(zhuǎn)到展示層,相信大多數(shù)都是直接轉(zhuǎn)到j(luò)sp,而涉及到轉(zhuǎn)向,需要配置forward,如果有十個(gè)展示層的jsp,需要配置十次struts,而且還不包括有時(shí)候目錄、文件變更,需要重新修改forward,注意,每次修改配置之后,要求重新部署整個(gè)項(xiàng)目,而tomcate這樣的服務(wù)器,還必須重新啟動(dòng)服務(wù)器,如果業(yè)務(wù)變更復(fù)雜頻繁的系統(tǒng),這樣的操作簡(jiǎn)單不可想象?,F(xiàn)在就是這樣,幾十上百個(gè)人同時(shí)在線使用我們的系統(tǒng),大家可以想象一下,我的煩惱有多大。
二、 Struts 的Action必需是thread-safe方式,它僅僅允許一個(gè)實(shí)例去處理所有的請(qǐng)求。所以action用到的所有的資源都必需統(tǒng)一同步,這個(gè)就引起了線程安全的問(wèn)題。
三、 測(cè)試不方便. Struts的每個(gè)Action都同Web層耦合在一起,這樣它的測(cè)試依賴于Web容器,單元測(cè)試也很難實(shí)現(xiàn)。不過(guò)有一個(gè)Junit的擴(kuò)展工具Struts TestCase可以實(shí)現(xiàn)它的單元測(cè)試。
四、 類型的轉(zhuǎn)換. Struts的FormBean把所有的數(shù)據(jù)都作為String類型,它可以使用工具Commons-Beanutils進(jìn)行類型轉(zhuǎn)化。但它的轉(zhuǎn)化都是在Class級(jí)別,而且轉(zhuǎn)化的類型是不可配置的。類型轉(zhuǎn)化時(shí)的錯(cuò)誤信息返回給用戶也是非常困難的。
五、 對(duì)Servlet的依賴性過(guò)強(qiáng). Struts處理Action時(shí)必需要依賴ServletRequest 和ServletResponse,所有它擺脫不了Servlet容器。
六、 前端表達(dá)式語(yǔ)言方面.Struts集成了JSTL,所以它主要使用JSTL的表達(dá)式語(yǔ)言來(lái)獲取數(shù)據(jù)??墒荍STL的表達(dá)式語(yǔ)言在Collection和索引屬性方面處理顯得很弱。
七、 對(duì)Action執(zhí)行的控制困難. Struts創(chuàng)建一個(gè)Action,如果想控制它的執(zhí)行順序?qū)?huì)非常困難。甚至你要重新去寫Servlet來(lái)實(shí)現(xiàn)你的這個(gè)功能需求。
八、 對(duì)Action 執(zhí)行前和后的處理. Struts處理Action的時(shí)候是基于class的hierarchies,很難在action處理前和后進(jìn)行操作。
九、 對(duì)事件支持不夠. 在struts中,實(shí)際是一個(gè)表單Form對(duì)應(yīng)一個(gè)Action類(或DispatchAction),換一句話說(shuō):在Struts中實(shí)際是一個(gè)表單只能對(duì)應(yīng)一個(gè)事件,struts這種事件方式稱為application event,application event和component event相比是一種粗粒度的事件。 Struts重要的表單對(duì)象ActionForm是一種對(duì)象,它代表了一種應(yīng)用,這個(gè)對(duì)象中至少包含幾個(gè)字段,這些字段是Jsp頁(yè)面表單中的input字段,因?yàn)橐粋€(gè)表單對(duì)應(yīng)一個(gè)事件,所以,當(dāng)我們需要將事件粒度細(xì)化到表單中這些字段時(shí),也就是說(shuō),一個(gè)字段對(duì)應(yīng)一個(gè)事件時(shí),單純使用Struts就不太可能,當(dāng)然通過(guò)結(jié)合JavaScript也是可以轉(zhuǎn)彎實(shí)現(xiàn)的。
Struts優(yōu)缺點(diǎn)就為大家總結(jié)到這里。
【編輯推薦】