首頁 >Java >java教程 >控制層SpringMVC和Struts2的區別

控制層SpringMVC和Struts2的區別

黄舟
黄舟原創
2017-03-03 10:11:101627瀏覽

我們現在流行的常用的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

      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方式。

 以上就是控制層SpringMVC和Struts2的差別的內容,更多相關內容請關注PHP中文網(www.php.cn)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn