1、核心控制器(前端控制器、預(yù)處理控制器):對于使用過mvc框架的人來說這個(gè)詞應(yīng)該不會(huì)陌生,核心控制器的主要用途是處理所有的請求,然后對那些特殊的請求(控制器)統(tǒng)一的進(jìn)行處理(字符編碼、文件上傳、參數(shù)接受、異常處理等等),spring mvc核心控制器是Servlet,而Struts2是Filter。
Struts2是類級別的攔截, 一個(gè)類對應(yīng)一個(gè)request上下文。
SpringMVC是方法級別的攔截,一個(gè)方法對應(yīng)一個(gè)request上下文,而方法同時(shí)又跟一個(gè)url對應(yīng),所以說從架構(gòu)本身上SpringMVC就容易實(shí)現(xiàn)restful url。
而struts2的架構(gòu)實(shí)現(xiàn)起來要費(fèi)勁,因?yàn)镾truts2中Action的一個(gè)方法可以對應(yīng)一個(gè)url,而其類屬性卻被所有方法共享,這也就無法用注解或其他方式標(biāo)識(shí)其所屬方法了。
2、控制器實(shí)例:Spring Mvc會(huì)比Struts快一些(理論上)。Spring Mvc是基于方法設(shè)計(jì),而Sturts是基于對象,每次發(fā)一次請求都會(huì)實(shí)例一個(gè)action,每個(gè)action都會(huì)被注入 屬性,而Spring更像Servlet一樣,只有一個(gè)實(shí)例,每次請求執(zhí)行對應(yīng)的方法即可(注意:由于是單例實(shí)例,所以應(yīng)當(dāng)避免全局變量的修改,這樣會(huì)產(chǎn)生線程安全問題)。
由上邊原因,SpringMVC的方法之間基本上獨(dú)立的,獨(dú)享request response數(shù)據(jù),請求數(shù)據(jù)通過參數(shù)獲取,處理結(jié)果通過ModelMap交回給框架,方法之間不共享變量,而Struts2搞的就比較亂,雖然方法之間也是獨(dú)立的,但其所有Action變量是共享的,這不會(huì)影響程序運(yùn)行,卻給我們編碼 讀程序時(shí)帶來麻煩,每次來了請求就創(chuàng)建一個(gè)Action,一個(gè)Action對象對應(yīng)一個(gè)request上下文。
3、由于Struts2需要針對每個(gè)request進(jìn)行封裝,把request,session等servlet生命周期的變量封裝成一個(gè)一個(gè)Map,供給每個(gè)Action使用,并保證線程安全,所以在原則上,是比較耗費(fèi)內(nèi)存的。
4、 攔截器實(shí)現(xiàn)機(jī)制上,Struts2有以自己的interceptor機(jī)制,SpringMVC用的是獨(dú)立的AOP方式,這樣導(dǎo)致Struts2的配置文件量還是比SpringMVC大。
5、SpringMVC的入口是servlet,而Struts2是filter,這就導(dǎo)致了二者的機(jī)制不同。
6.參數(shù)傳遞:Struts2中自身提供多種參數(shù)接受,其實(shí)都是通過(ValueStack)進(jìn)行傳遞和賦值,而SpringMvc是通過方法的參數(shù)進(jìn)行接收。
7.學(xué)習(xí)難度:Struts有很多新的技術(shù)點(diǎn),比如攔截器、值棧及OGNL表達(dá)式,學(xué)習(xí)成本較高,springmvc 比較簡單,很較少的時(shí)間都能上手。
8、SpringMVC集成了Ajax,使用非常方便,只需一個(gè)注解@ResponseBody就可以實(shí)現(xiàn),然后直接返回響應(yīng)文本即可,而Struts2攔截器集成了Ajax,在Action中處理時(shí)一般必須安裝插件或者自己寫代碼集成進(jìn)去,使用起來也相對不方便。
9、SpringMVC驗(yàn)證支持JSR303,處理起來相對更加靈活方便,而Struts2驗(yàn)證比較繁瑣,感覺太煩亂。
10、Spring MVC和Spring是無縫的。從這個(gè)項(xiàng)目的管理和安全上也比Struts2高(當(dāng)然Struts2也可以通過不同的目錄結(jié)構(gòu)和相關(guān)配置做到SpringMVC一樣的效果,但是需要xml配置的地方不少)。
11、 設(shè)計(jì)思想上,Struts2更加符合OOP的編程思想, SpringMVC就比較謹(jǐn)慎,在servlet上擴(kuò)展。
12、管理方式:大部分的公司的核心架構(gòu)中,就會(huì)使用到spring,而spring mvc又是spring中的一個(gè)模塊,所以spring對于spring mvc的控制器管理更加簡單方便,而且提供了全 注解方式進(jìn)行管理,各種功能的注解都比較全面,使用簡單,而struts2需要采用XML很多的配置參數(shù)來管理(雖然也可以采用注解,但是幾乎沒有公司那樣使用)。SpringMVC開發(fā)效率和性能高于Struts2。
13、SpringMVC可以認(rèn)為已經(jīng)100%零配置。
獲取【下載地址】
springmvc4 mybatis 整合 框架源碼 bootstrap html5 mysql oracle sqlsever spring SSM
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。