深入理解Struts2
簡單介紹
??Struts 2是Struts的下一代產品。是在 struts 1和WebWork的技術基礎上進行了合并的全新的Struts 2框架。
其全新的Struts 2的體系結構與Struts 1的體系結構區別巨大。Struts 2以WebWork為核心。採用攔截器的機制來處理用戶的請求,這種設計也使得業務邏輯控制器能夠與ServletAPI全然脫離開,所以Struts 2能夠理解為WebWork的更新產品。盡管從Struts 1到Struts 2有著太大的變化。但是相對于WebWork,Struts 2的變化非常小。
? 不管從struts2的設計角度看,還是從struts2在實際項目中的易用性來看,struts2都是一個非常優秀的mvc框架。
與struts1相比,struts2同意使用使用普通的Java對象作為action,給予aop思想的爛機器機制,提供了幾號的可擴展性。
mvc思想及其優勢
? mvc并非Java語言所特有的設計思想,也并非web應用所特有的思想,他是全部面向對象程序設計語言都應遵循的規范。mvc是一種設計模式,將應用分為三層:model、view、controller。這三層以最少的耦合協同工作,從而提高應用的可擴展及可維護性。
? 從設計模式角度來看,mvc非常相似于觀察者模式,但與觀察者模式存在少許的區別:觀察者模式下的觀察者和被觀察者能夠是兩個互相對等的對象。但對于mvc思想而言,被觀察者往往僅僅是單純的數據體。而觀察者則是單純的視圖頁面。
mvc的特點
? 多格式圖相應一個模型。
? 模型返回的數據與現實邏輯分離。
? 應用被切割為三層,減少了隔層之間的耦合性。
? 控制層吧不同的模型和不同的視圖組合在一起,完畢不同的請求。
? 符合軟件project化管理的精神。
struts2的工作流程
配置步驟
? 1.web.xml文件里定義核心filter來攔截用戶請求。
? 2.假設須要以post方式提交請求,則定義包括表單數據的JSP頁面。假設僅僅僅僅是以get方式發送請求。則無需經過這一步。
? 3.定義處理用戶請求的action類。
? 4.配置action。
? 5.配置處理結果和物理視圖資源之間的相應關系。
? 6.編寫資源視圖
工作流程
?
優缺點
優點:
? 1. 實現MVC模式,結構清晰,使開發人員僅僅關注業務邏輯的實現.
? 2. 有豐富的tag能夠用 ,Struts的標記庫(Taglib),如能靈活動用,則能大大提高開發效率。
另外,就眼下國內的JSP開發人員而言,除了使用JSP自帶的經常使用標記外,非常少開發自己的標記,也許Struts是一個非常好的起點。
? 3. 頁面導航.頁面導航將是今后的一個發展方向,其實,這樣做。使系統的脈絡更加清晰。
通過一個配置文件,就可以把握整個系統各部分之間的聯系,這對于后期的維護有著莫大的優點。
尤其是當還有一批開發人員接手這個項目時,這種優勢體現得更加明顯。
? 4. 提供Exception處理機制 .
? 5. 數據庫鏈接池管理
? 6. 支持I18N
缺點:?
? 1. 轉到展示層時。須要配置forward。每一次轉到展示層,相信大多數都是直接轉到jsp,而涉及到轉向,須要配置forward,假設有十個展示層的jsp,須要配置十次struts,并且還不包括有時候文件夾、文件變更。須要又一次改動forward。注意。每次改動配置之后。要求又一次部署整個項目,而tomcate這種server。還必須又一次啟動server。假設業務變更復雜頻繁的系統。這種操作簡單不可想象。如今就是這樣。幾十上百個人同一時候在線使用我們的系統,大家能夠想象一下,我的煩惱有多大。
? 2.Struts 的Action必需是thread-safe方式,它僅僅同意一個實例去處理全部的請求。所以action用到的全部的資源都必需統一同步,這個就引起了線程安全的問題。
? 3. 測試不方便. Struts的每一個Action都同Web層耦合在一起,這樣它的測試依賴于Web容器,單元測試也非常難實現。
只是有一個Junit的擴展工具Struts TestCase能夠實現它的單元測試。
? 4.類型的轉換. Struts的FormBean把全部的數據都作為String類型。它能夠使用工具Commons-Beanutils進行類型轉化。但它的轉化都是在Class級別,并且轉化的類型是不可配置的。類型轉化時的錯誤信息返回給用戶也是非常困難的。
? 5.對Servlet的依賴性過強. Struts處理Action時必須要依賴ServletRequest 和ServletResponse,全部它擺脫不了Servlet容器。
? 6.前端表達式語言方面.Struts集成了JSTL,所以它主要使用JSTL的表達式語言來獲取數據。
但是JSTL的表達式語言在Collection和索引屬性方面處理顯得非常弱。
? 7. 對Action運行的控制困難. Struts創建一個Action,假設想控制它的運行順序將會非常困難。
甚至你要又一次去寫Servlet來實現你的這個功能需求。
? 8.對Action 運行前和后的處理. Struts處理Action的時候是基于class的hierarchies。非常難在action處理前和后進行操作。
? 9.對事件支持不夠. 在struts中,實際是一個表單Form相應一個Action類(或DispatchAction)。換一句話說:在Struts中實際是一個表單僅僅能相應一個事件,struts這種事件方式稱為application event。application event和component event相比是一種粗粒度的事件。
?
? 不論什么一種技術的誕生都有其優缺點,在項目中依據實際情況選擇性使用,文章中有不足之處。請大家批評指正。
轉載于:https://www.cnblogs.com/cxchanpin/p/7001129.html
總結
以上是生活随笔為你收集整理的深入理解Struts2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于input file img实时预览
- 下一篇: spring batch @Enable