-核心控制器不同:SpringMVC入口是一個(gè)servlet前端控制器(DispatcherServlet),Struts2入口是一filter過濾器(StrutsPrepareAndExecuteFilter)譬圣;
-攔截器實(shí)現(xiàn)機(jī)制上:Struts2有以自己的interceptor機(jī)制贞言,SpringMVC用的是獨(dú)立的AOP方式,這樣導(dǎo)致Struts2的配置文件量還是比SpringMVC大胎食。
-攔截層級不同:
(1)Struts2是類級別的攔截:每次請求就會(huì)創(chuàng)建一個(gè)Action愧捕,一個(gè)Action對應(yīng)一個(gè)request和response上下文劲室,在接收參數(shù)時(shí),可以通過屬性接收合冀,這說明屬性參數(shù)是讓多個(gè)方法共享的窥翩,而Action中业岁,一個(gè)方法可以對應(yīng)一個(gè)url,而其類屬性卻被所有方法共享鳍烁,導(dǎo)致無法確定或標(biāo)識“屬性”所屬的方法叨襟,只能設(shè)計(jì)為prototype多例繁扎,確保一次Action請求幔荒,請求參數(shù)和請求Action一一對應(yīng),以確保請求的準(zhǔn)確性梳玫,同時(shí)也有效的避免了高并發(fā)爹梁。
(2)SpringMVC是方法級別的攔截:一個(gè)方法對應(yīng)一個(gè)Request上下文,參數(shù)的傳遞是直接注入到方法中的提澎,獨(dú)享request姚垃,response數(shù)據(jù),所以默認(rèn)對所有的請求盼忌,只會(huì)創(chuàng)建一個(gè)Controller积糯。
-性能:SpringMVC和Spring是無縫的,并集成了Ajax谦纱,使用非常方便看成,只需一個(gè)注解@ResponseBody就可以實(shí)現(xiàn),然后直接返回響應(yīng)文本即可跨嘉, 而Struts2攔截器集成了Ajax川慌,在Action中處理時(shí)一般必須安裝插件或者自己寫代碼集成進(jìn)去, 使用起來也相對不方便祠乃,與SpringMVC相比梦重,配置繁瑣,使用麻煩亮瓷,且效率也低
總結(jié):SpringMVC開發(fā)效率和性能高于Struts2