天天看點

從MVC的角度看Struts1和Struts2的差別

Struts1和Struts2都是優秀的MVC架構,MVC模式的目的是實作web的職能分離。MVC即模型、視圖、控制器,模型層實作業務邏輯,視圖層用于使用者互動,控制器擔當模型的視圖的橋梁,它分發使用者的請求并選擇視圖顯示給使用者,同時也解釋使用者的輸入并映射成模型層可執行的操作。

Struts1的控制層由ActionServlet和ActionMapping構成,ActionServlet繼承自Servlet,它包含一組基于配置的ActionMapping對象,每個ActionMapping對象實作了一個請求到模型層中的一個Action之間映射,ActionServlet接收并分發使用者的請求。

Model部分由Action和ActionForm對象構成,Strut1中所有的Action處理器對象都是必須繼承Action類,Action處理器對象用于封裝了具體的處理邏輯,調用業務邏輯子產品,并且把響應送出到合适的View元件以産生響應。通過ActionForm元件對象實作了對View和

Model之間互動的支援。 在Strut1中Action處理器是單例的,是以有線程安全的問題。

View部分是通過JSP技術實作的,并且提供了一套自定義的标記庫。

Struts2是Strut和webwork的整合,它的控制層由FilterDispatcher和Interceptor構成,FilterDispatcher根據請求調用相應的業務邏輯控制器(Action)并根據配置加載Action相關的所有Interceptor。

Strut2中的Action可以是一個pojo,通常包含了一個execute方法,該方法傳回一個字元串,當業務控制器處理完使用者請求後,根據處理結果不同,execute方法傳回不同字元串——每個字元串對應一個視圖名,。 (實際上Action是個被代理的對象,ActionProxy為Interceptor、Action和Result提供了執行環境。 )Struts 2 中的Action對象為每一個請求産生一個執行個體,是以沒有線程安全問題。在與spring內建時,應設定作用域scope為prototype。

Struts2并不強制View層的表現形式,可以是JSP、Freemarker模闆、二進制流輸出等等。也有自己的一套标簽,并支援OGNL表達式。

繼續閱讀