1、機制
spring mvc 和 struts2的加載機制不同:spring mvc的入口是servlet,而struts2是filter;(servlet和filter的區別?)
2、性能
spring mvc 在性能上會稍微比struts2快。
sturts2是基於類的設計,是類級別的攔截,每次發一次請求都會實例一個action,然后調用setter getter方法把 request中的數據注入,struts2實際上是通過setter getter方法與request打交道的,struts2中,一個Action對象對應 一個request上下文;spring mvc是基於方法的設計,粒度更細,是方法級別的攔截,攔截到方法后根據參數上的注解,把request數據注入進 去,在spring mvc中,一個方法對應一個request上下文;
3、參數傳遞
struts2在接受參數的時候,可以用成員屬性來接受參數,這就說明參數是讓多個方法共享的,即其類屬性卻所有方法共享;
spring mvc的方法之間基本上獨立的,獨享request response數據,請求數據通過參數獲取,處理結果通過ModelMap交回給框架,方法之間不共享變量;
4、框架集成
spring MVC和Spring是無縫(無縫:無須數據格式轉換,直接訪問來自數據源數據格式)的。從這個項目的管理和安全上也比Struts2高;
5、數據驗證
SpringMVC驗證支持JSR303(一種數據驗證的規范),處理起來相對更加靈活方便,而Struts2驗證比較繁瑣;
6、Ajax交互
spring mvc處理ajax的請求十分方便,只需一個注解@ResponseBody ,然后直接返回響應文本即可;
Struts2攔截器集成了Ajax,在Action中處理時一般必須安裝插件或者自己寫代碼集成進去,使用起來也相對不方便;
7、攔截機制的實現
spring mvc用的是獨立的AOP方式實現,而struts2有自己的interceptor機制,這樣導致了struts2的配置文件量又比spring mvc大;
8、RESTful架構的實現
spring mvc是方法級別的攔截,一個方法對應一個request上下文,而方法同時又跟一個url對應,所以說從架構本身上spring mvc就容易實現restful url;
struts2是類級別的攔截,一個類對應一個request上下文,struts2 action的一個方法可以對應一個url;而其類屬性卻被所有方法共享,這也就無法用注解或其他方式標識其所屬方法了,所以實現restful url比較費勁