1. 程式人生 > >淺談struts2和spring MVC的區別

淺談struts2和spring MVC的區別

一、框架機制

   1. spring MVC是通過servlet的方式進行攔截,在第一次請求傳送時初始化,並隨著容器關閉而銷燬。

    2. struts2是通過filter(攔截器)的方式進行攔截,在容器初始化時載入。晚於servlet銷燬。

二、攔截機制

    1.struts2 是類級別上的攔截,每次請求都會建立一個對應的action,一個url對應action中的一個方法,action類中的屬性被所有方法共享,所以action在spring只能配置成多例的,因為是多例的,無法使用註解等方式開發。如果有兩個請求同時訪問action,則會發送執行緒併發,導致類屬性值錯亂,執行緒不安全。struts2通過類屬性的方式接收請求引數,並通過get,set方法設定值,也可以通過模型驅動的方式注入值,action類需要繼承ActionSupport實現ModelDrivenMO<T>介面。struts2使用的是值棧機制,將頁面需要的值壓入值棧,則可在頁面上通過OGNL表示式獲取。Struts2有自己的攔截機制,自定義Interceptor類,然後進行配置,配置檔案非常大。

 2.spring MVC是方法級別上的攔截,一個請求對應著一個controller中的方法,請求引數會封裝到方法引數中,如果是物件型別的引數則需要在引數名前加上@RequestBody註解即可。controller類中的屬性被方法所共享,controller類預設是單例的,在請求傳送時不會建立物件,所以可以使用註解開發。spring MVC則是通過方法引數model物件來設定需要返回的值,(和request的用法相似,因為底層封裝的就是request),在頁面通過el表示式獲取。springMVC有獨立的AOP攔截機制。

三、效能方面

    1.spring MVC幾乎實現了零配置,在配置了基本的東西之後,再編寫controller類和方法時,只需加上註解即可,無需頻繁修改配置檔案,而struts2的機制讓他無法使用註解開發,那就需要編寫一個action類配置一遍,顯得非常繁瑣。

四、整合

    1.spring MVC和spring是同一家公司出的,所以整合時無需配置,而struts2則需要編寫整合配置。

五、設計思想

   1.struts2 更符合OOP程式設計思想,spring MVC 則是再servlet上擴充套件功能。

六、與ajax的整合

    1.spring MVC只需要在互動方法上加上@ResponseBody即可在返回值中返回資料,spring MVC會自動將返回值資料轉換成json資料。非常方便。

    2.struts2則需要自己手動將返回值資料轉換成json格式,再手動寫回瀏覽器。返回 NONE;

--------------------- 轉自:https://blog.csdn.net/ksm_coder/article/details/80493437