javascript
Spring MVC和Struts2
Web層面的框架學(xué)習(xí)了三個Struts1和2,SpringMVC,那他們之間肯定存在一個優(yōu)劣和適用的環(huán)境,Struts1和2的異同點我已經(jīng)做過對比《Struts1和Struts2》,這篇將對比下Struts2和SpringMVC的異同,下面數(shù)據(jù)基本來源于網(wǎng)絡(luò),本人是搜集整理所得,供大家參考。
一個項目使用什么樣的技術(shù),決定的因素很多,我所能想到的有:對系統(tǒng)的性能、開發(fā)的效率、團(tuán)隊學(xué)習(xí)的成本、業(yè)務(wù)場景等,下面盡量從這幾個方面入手,來分析比較下他們之間存在的優(yōu)劣。
首先說性能方面,通過一些測試人員的測試,對Jsp、Struts1、Struts2、SpringMVC的結(jié)論如下表:
名稱 | 性能排名 | 結(jié)論 |
Jsp | 1 | 越原始效率越高 |
Struts1 | 2 | 采用單例Action模式,且本身的封裝相比struts2簡單,性能穩(wěn)定高效。 |
SpringMVC | 2.5(略遜于struts1) | springMVC有著不比struts2差的開發(fā)效率和解耦度,但性能卻是struts2的好幾倍。 |
Struts2 | 3 | 1.由于采用值棧、OGNL表達(dá)式、攔截器等技術(shù)對請求參數(shù)的映射和返回結(jié)果進(jìn)行了處理,另外還采用大量的標(biāo)簽庫等,這些都增加了處理的時間; 2.struts2性能的瓶頸不在于它的多例Action模式 |
從以上性能角度來看,如果項目中使用框架,SpringMVC是首選;如果想把效能提升到最大,jsp是首選。
然后從開發(fā)效率來分析:
開發(fā)效率這點,大家做程序員的一般都會深有體會,越是靠后的產(chǎn)品,一般開發(fā)效率都會高一些,就像我們計算機(jī)語言的發(fā)展,從二進(jìn)制到匯編語言,再到目前主流的java、C#等,都越來越接近人能理解的程度,開發(fā)效率越來越高。因此,從這個觀點出發(fā),得出的結(jié)論是:
由快到慢:SpringMVCand Strut2 > Struts1 > jsp
框架的出現(xiàn)很大程度就是為了提升開發(fā)效率,解決純手工代碼帶來的不便,因此Struts1優(yōu)于jsp毫無疑問;Struts2和SpringMVC出現(xiàn)的較晚,都是吸取了Struts1的經(jīng)驗教訓(xùn)而來。那Struts2和SpringMVC哪個的開發(fā)效率要更高一些呢?根據(jù)大家在網(wǎng)上的體會所得:
由高到低:SpringMVC> Struts2(存疑)
Springmvc可以認(rèn)為已經(jīng)100%零配置,但是Struts2并沒有實現(xiàn)這點,SpringMVC高于Struts2具體理由公說公有理婆說婆有理,關(guān)于這兩者的開發(fā)效率由于每個人對兩者的熟悉程度不同,因此導(dǎo)致了不同的結(jié)果。在我看來,更愿意使用SpringMVC,如果項目中用到了Spring,那就更棒了。
團(tuán)隊學(xué)習(xí)成本:
Jsp當(dāng)然是入門,如果這個都不懂,談學(xué)習(xí)成本也毫無意義,從我個人來看,如果之前接觸過Struts1和Spring,學(xué)習(xí)Struts2和SpringMVC的時間成本差不了多少,但是SpringMVC國內(nèi)用的并不多,因此,相對來說SpringMVC的學(xué)習(xí)成本要大一些。
由大到小:SpringMVC> Struts2
大家可根據(jù)團(tuán)隊自身目前的情況,自由選擇。上面這兩個框架,不管學(xué)哪個,我認(rèn)為Struts1都應(yīng)該接觸一下,這樣才能更深的理解MVC框架設(shè)計的精妙之處。
業(yè)務(wù)場景,只要涉及到業(yè)務(wù),就不能確定哪個框架好,哪個不好,因此,業(yè)務(wù)場景只能根據(jù)當(dāng)前業(yè)務(wù),加上對技術(shù)的深度理解,找到一款合適的框架為宜。
下面再貼一些Struts2和SpringMVC技術(shù)點的異同,其實,這些技術(shù)上的不同也正好反映在上面說到的幾點中。
Struts2 | Spring MVC |
類級別的攔截,一個類對應(yīng)一個request上下文,很難實現(xiàn)restful url,而struts2的架構(gòu)實現(xiàn)起來要費(fèi)勁,因為action的一個方法可以對應(yīng)一個url,而其類屬性卻被所有方法共享,這也就無法用注解或其他方式標(biāo)識其所屬方法了 | 方法級別的攔截,一個方法對應(yīng)一個request上下文,而方法同時又跟一個url對應(yīng),所以說從架構(gòu)本身上 spring3 mvc就容易實現(xiàn)restful url |
比較亂,雖然方法之間也是獨(dú)立的,但其所有Action變量是共享的,這不會影響程序運(yùn)行,卻給我們編碼讀程序時帶來麻煩;Struts2在接受參數(shù)的時候,可以用屬性來接受參數(shù),這就說明參數(shù)是讓多個方法共享的 | 方法之間基本上獨(dú)立的,獨(dú)享request response數(shù)據(jù),請求數(shù)據(jù)通過參數(shù)獲取,處理結(jié)果通過ModelMap交回給框架,方法之間不共享變量 |
支持手動驗證憑借validate方法和XWork驗證框架 | 驗證也是一個亮點,支持JSR303 處理ajax的請求更是方便只需一個注解@ResponseBody,然后直接返回響應(yīng)文本即可 |
入口是filter | 入口是servlet |
目前所能整理出來的異同點只有這些,具體的感受需要大家自行嘗試,下附的連接是一篇討論Springmvc和Struts2的帖子,供大家參考。
地址:http://www.iteye.com/topic/646240
轉(zhuǎn)載于:https://blog.51cto.com/andywuchuanlong/1389530
總結(jié)
以上是生活随笔為你收集整理的Spring MVC和Struts2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转python version 2.7
- 下一篇: 报表设计器条形码支持类型