優點:
1. 實現MVC模式,結構清晰,使開發人員只關注商務邏輯的實現.
2.有豐富的tag可以用 ,Struts的標記庫(Taglib),如能靈活動用,則能大大提高開發效率
3. 頁面導航
使系統的脈絡更加清晰。通過一個設定檔,即可把握整個系統各部分之間的聯絡,這對於後期的維護有著莫大的好處。尤其是當另一批開發人員接手這個項目時,這種優勢體現得更加明顯。
4. 提供Exception處理機制 .
5. 資料庫連結池管理
6. 支援I18N
缺點:
一、 轉到展示層時,需要配置forward,如果有十個展示層的jsp,需要配置十次struts,而且還不包括有時候目錄、檔案變更,需要重新修改forward,注意,每次修改配置之後,要求重新部署整個項目,而tomcate這樣的伺服器,還必須重新啟動伺服器
二、 Struts 的Action必需是thread-safe方式,它僅僅允許一個執行個體去處理所有的請求。所以action用到的所有的資源都必需統一同步,這個就引起了安全執行緒的問題。
三、 測試不方便. Struts的每個Action都同Web層耦合在一起,這樣它的測試依賴於Web容器,單元測試也很難實現。不過有一個Junit的擴充工具Struts TestCase可以實現它的單元測試。
四、 類型的轉換. Struts的FormBean把所有的資料都作為String類型,它可以使用工具Commons-Beanutils進行類型轉化。但它的轉化都是在Class層級,而且轉化的類型是不可配置的。類型轉化時的錯誤資訊返回給使用者也是非常困難的。
五、 對Servlet的依賴性過強. Struts處理Action時必需要依賴ServletRequest 和ServletResponse,所有它擺脫不了Servlet容器。
六、 前端運算式語言方面.Struts整合了JSTL,所以它主要使用JSTL的運算式語言來擷取資料。可是JSTL的運算式語言在Collection和索引屬性方面處理顯得很弱。
七、 對Action執行的控制困難. Struts建立一個Action,如果想控制它的執行順序將會非常困難。甚至你要重新去寫Servlet來實現你的這個功能需求。
八、 對Action 執行前和後的處理. Struts處理Action的時候是基於class的hierarchies,很難在action處理前和後進行操作。
九、 對事件支援不夠. 在struts中,實際是一個表單Form對應一個Action類(或DispatchAction),換一句話說:在Struts中實際是一個表單只能 對應一個事件,struts這種事件方式稱為application event,application event和component event相比是一種粗粒度的事件