控制層SpringMVC和Struts2的區別

我們現在流行的常用的MVC層,控制層Controller層的框架主要有Struts2和SpringMVC兩個框架,分別對應着Action和Controller。那麼SpringMVC和Struts的主要區別有那些呢?

一、框架機制

       我們知道Struts2採用Filter實現,而SpringMVC則採用Servlet實現。

       Struts2使用StrutsPrepareAndExecuteFilter,而SpringMVC使用DispatcherServlet。Filter是一種特殊的Servlet。Filter在容器啓動之後即初始化;服務停止以後墜毀,晚於Servlet。Servlet在是在調用時初始化,先於Filter調用;服務停止後墜毀。


二、攔截機制

      1、Struts2

      Struts2框架是類級別的攔截,每次請求就會創建一個Action,和Spring整合時Struts2的Action Bean注入作用域是原型模式prototype(否則會出現線程併發問題),然後通過setter,getter吧request數據注入到屬性。

     Struts2中,一個Action對應一個request,response上下文,在接收參數時,可以通過屬性接收,這說明屬性參數是讓多個方法共享的。


      2、SpringMVC

      SpringMVC是方法級別的攔截,一個方法對應一個Request上下文,所以方法直接基本上是獨立的,獨享request,response數據。而每個方法同時又何一個url對應,參數的傳遞是直接注入到方法中的,是方法所獨有的。處理結果通過ModeMap返回給框架。    

      在Spring整合時,SpringMVC的Controller Bean默認單例模式Singleton,所以默認對所有的請求,只會創建一個Controller,有應爲沒有共享的屬性,所以是線程安全的,如果要改變默認的作用域,需要添加@Scope註解修改。


三、性能方面

      SpringMVC實現了零配置,由於SpringMVC基於方法的攔截,有加載一次單例模式bean注入。而Struts2是類級別的攔截,每次請求對應實例一個新的Action,需要加載所有的屬性值注入,所以決定了SpringMVC更加快於Struts2。


四、攔截機制

      Struts2有自己的攔截Interceptor機制,SpringMVC這是用的是獨立的Aop方式。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章