-核心控制器不同:SpringMVC入口是一個(gè)servlet前端控制器(DispatcherServlet),Struts2入口是一filter過(guò)濾器(StrutsPrepareAndExecuteFilter);
-攔截器實(shí)現(xiàn)機(jī)制上:Struts2有以自己的interceptor機(jī)制,SpringMVC用的是獨(dú)立的AOP方式,這樣導(dǎo)致Struts2的配置文件量還是比SpringMVC大。
-攔截層級(jí)不同:
(1)Struts2是類級(jí)別的攔截:每次請(qǐng)求就會(huì)創(chuàng)建一個(gè)Action,一個(gè)Action對(duì)應(yīng)一個(gè)request和response上下文,在接收參數(shù)時(shí),可以通過(guò)屬性接收,這說(shuō)明屬性參數(shù)是讓多個(gè)方法共享的,而Action中,一個(gè)方法可以對(duì)應(yīng)一個(gè)url,而其類屬性卻被所有方法共享,導(dǎo)致無(wú)法確定或標(biāo)識(shí)“屬性”所屬的方法,只能設(shè)計(jì)為prototype多例,確保一次Action請(qǐng)求,請(qǐng)求參數(shù)和請(qǐng)求Action一一對(duì)應(yīng),以確保請(qǐng)求的準(zhǔn)確性,同時(shí)也有效的避免了高并發(fā)。
(2)SpringMVC是方法級(jí)別的攔截:一個(gè)方法對(duì)應(yīng)一個(gè)Request上下文,參數(shù)的傳遞是直接注入到方法中的,獨(dú)享request,response數(shù)據(jù),所以默認(rèn)對(duì)所有的請(qǐng)求,只會(huì)創(chuàng)建一個(gè)Controller。
-性能:SpringMVC和Spring是無(wú)縫的,并集成了Ajax,使用非常方便,只需一個(gè)注解@ResponseBody就可以實(shí)現(xiàn),然后直接返回響應(yīng)文本即可, 而Struts2攔截器集成了Ajax,在Action中處理時(shí)一般必須安裝插件或者自己寫(xiě)代碼集成進(jìn)去, 使用起來(lái)也相對(duì)不方便,與SpringMVC相比,配置繁瑣,使用麻煩,且效率也低
總結(jié):SpringMVC開(kāi)發(fā)效率和性能高于Struts2