1、攔截機制spring
一、Struts2編程
a、Struts2框架是類級別的攔截,每次請求就會建立一個Action,和Spring整合時Struts2的ActionBean注入做用域是原型模式prototype(不然會出現線程併發問題),而後經過setter,getter把request數據注入到屬性。
b、Struts2中,一個Action對應一個request,response上下文,在接收參數時,能夠經過屬性接收,這說明屬性參數是讓多個方法共享的。
c、Struts2中Action的一個方法能夠對應一個url,而其類屬性卻被全部方法共享,這也就沒法用註解或其餘方式標識其所屬方法了
二、SpringMVC
a、SpringMVC是方法級別的攔截,一個方法對應一個Request上下文,因此方法直接基本上是獨立的,獨享request,response數據。而每一個方法同時又何一個url對應,參數的傳遞是直接注入到方法中的,是方法所獨有的。處理結果經過ModeMap返回給框架。
b、在Spring整合時,SpringMVC的Controller Bean默認單例模式Singleton,因此默認對全部的請求,只會建立一個Controller,有應爲沒有共享的屬性,因此是線程安全的,若是要改變默認的做用域,須要添加@Scope註解修改。
2、性能方面
SpringMVC實現了零配置,因爲SpringMVC基於方法的攔截,加載一次單例模式bean注入。而Struts2是類級別的攔截,每次請求對應實例一個新的Action,須要加載全部的屬性值注入,因此,SpringMVC開發效率和性能高於Struts2。
4、攔截機制
Struts2有本身的攔截Interceptor機制,SpringMVC這是用的是獨立的Aop方式,這樣致使Struts2的配置文件量仍是比SpringMVC大。
5、配置方面
spring MVC和Spring是無縫的。從這個項目的管理和安全上也比Struts2高(固然Struts2也能夠經過不一樣的目錄結構和相關配置作到SpringMVC同樣的效果,可是須要xml配置的地方很多)。
SpringMVC能夠認爲已經100%零配置。
6、設計思想
Struts2更加符合OOP的編程思想, SpringMVC就比較謹慎,在servlet上擴展。
7、集成方面
SpringMVC集成了Ajax,使用很是方便,只需一個註解@ResponseBody就能夠實現,而後直接返回響應文本便可,而Struts2攔截器集成了Ajax,在Action中處理時通常必須安裝插件或者本身寫代碼集成進去,使用起來也相對不方便。安全