1. 程式人生 > >控制層SpringMVC和Struts2的區別

控制層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方式。