Struts2框架

Struts2框架

Struts框架的起源前端

  • Struts :英文單詞含義爲金屬支架,在程序中表示起支撐做用的通用程序代碼
  • Struts框架出現的時間爲2001年,主要目的是爲了提升servletJSP的開發水準,和進行統一化的流程設定,在當時很是流行,可是隨着時間的推移,早期代碼的問題也逐漸顯露出來。
  1. struts框架基於servlet進行開發的,因此servlet的問題在這個框架中都能體現出來
  2. struts框架的流程是固定的,想要擴展業務流程很是的不方便。
  3. 只支持動態視圖JSP展示數據,對於如今的SEO(搜索引擎優化)支持很差

SEOSearch Engine Optimization),漢譯爲搜索引擎優化搜索引擎優化是一種利用搜索引擎的搜索規則來提升目的網站在有關搜索引擎內的排名的方式。SEO目的理解是:爲網站提供生態式的自我營銷解決方案,讓網站在行業內佔據領先地位,從而得到品牌收益。SEO包含站外SEO和站內SEO兩方面。java

。。。web

因此框架的開發人員在2007年對框架進行了版本的升級。可是這個升級不是簡單的代碼改善,而是從本質上改變了實現的方式,而且參考了其餘優秀的框架產品(WebWork),因此產生了struts2的框架,以前的框架稱之爲struts1框架。編程

Struts2框架改善的地方設計模式

  1. 核心基於Filter
  2. 流程能夠動態擴展
  3. 多例建立對象
  4. 支持多種視圖展示技術(JSPFreemarkerVolicity

由於struts1框架存在固有的一些問題,因此這裏咱們只介紹Struts2框架。Struts1框架再也不作介紹。tomcat

Struts2框架是一個輕量級MVC流程框架安全

  • 輕量級 :程序代碼不是不少,而且運行時,佔用的資源不是不少,還有就是框架沒有侵入性
  • MVC :模型,視圖,控制器,分層代碼。
  • 流程 :數據流程,數據從哪裏來,怎麼傳播的,在什麼地方顯示出來。

Struts2框架的文件結構服務器

  • apps : 包含了框架的多個應用壓縮包(war
  • docs : 框架的說明文檔。
  • lib : 框架依賴的jar
  • src : 框架的源碼文件夾

Struts2框架的環境搭建架構

  • JAR包(6個)
  • 配置文件(struts.xml
  • web.xml(增長過濾器)

struts2框架的第一個例子app

  • 參考struts2框架自帶的例子:struts2-blank-2.1.8.1.war(須要將文件拷貝到tomcat服務器的webapps中)
  • 擴展用戶登陸的功能,採用框架實現

struts2框架的源碼解讀

  • struts2框架是MVC流程框架,因此重點就在流程上,若是能將源碼的實現看懂,那麼對於框架的應用和技術實現就更加容易理解
  • 經過源碼的解讀,能夠發現,框架採用工廠模式和代理模式等設計模式,而且底層採用反射方式實現,因此理解好反射,對於框架的學習會更好。
  • 經過分析Struts2的源代碼,講解設計到的JavaEE設計模式和GoF設計模式。JavaEE前端控制器模式、GoF的代理模式ActionProxy、工廠模式(抽象工廠模式)ObjectFactory、責任鏈模式Interceptor、策略模式ResultType、模版方法模式ResultType內部實現、缺省適配器模式Interceptor內部實現;

整體來講設計模式分爲三大類:

建立型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式

結構型模式,共七種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。

行爲型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式。

Struts2流程圖

 

Struts2的應用

1) Action默認執行的方法名稱爲execute

繼承ActinSupport類(推薦)

實現Action接口

2) 擴展名

默認狀況下的擴展名有2個(action, 空字符串)

u 修改默認的擴展名

l struts.xml文件中增長常量標籤(推薦)

l struts.properties資源配置文件

l 過濾器初始化參數

3) 字符編碼

默認的字符編碼 UTF-8

u 框架核心是過濾器,因此能夠直接設定字符編碼。

只能解決post的亂碼問題。

4) 從新加載配置文件

u 默認狀況下,修改配置文件,必須從新啓動服務器才能夠起做用。影響開發效率

u 設定常量,讓程序運行時就能夠從新加載配置文件,能夠提升開發效率

u 開發模式

從新加載配置文件的設置以及開發模式的設置只能應用在開發階段,在生產環境中必定不能設置爲true

5) 命名空間

相似於java中的包

應用於訪問action的路徑

u 命名空間的訪問規則。

6) Action建立

框架經過配置文件中的class屬性反射建立對象。

多例建立,不會出現線程安全問題。

7) 動態方法調用

在請求路徑中,將方法名和action的訪問路徑使用感嘆號鏈接起來。

在配置文件中增長method屬性(推薦)

默認的方法名就是execute

u 方法名也能夠經過通配符進行設定。

8) 數據的流轉

u OGNLValueStack

u 數據的展現

使用El表達式能夠直接訪問action的屬性。

u 數據的存儲

l 屬性驅動模式

l 模型驅動模式

l 域驅動模式

u 數據的傳播

訪問存儲對象(Map

訪問真正的HTTP對象

9) 文件上傳

u 將文件的內容放置在請求體中傳遞給服務器

框架支持3中上傳組件(cospell),默認爲commons-fileupload

u 框架屏蔽了組件的使用。對於開發人員來說,只須要操做文件流就能夠了。

10) 國際化

資源(多語種)文件 – 起名規則

u 國際化的應用的場景。

11) 頁面跳轉

默認使用轉發方式(dispatcher)跳轉

u Action轉發 : chain

重定向 redirect

u Action重定向 : redirectAction

12) 文件下載

u 是以流的方式完成頁面的跳轉。

u 須要注意配置文件和類之間的關聯。

13) 模板視圖技術

u Freemarker

u JSP

14) 攔截器

默認有18個攔截器

u 自定義攔截器增長後,框架再也不提供默認攔截器

u 攔截器的聲明順序。

u 攔截器模擬過濾器的實現機制

15) 異常處理

u 統一異常處理

u 全局異常映射

u 全局結果映射

16) 團隊的支持

u 配置文件能夠劃分多個子配置文件

u 劃分的規則是根據功能模塊進行劃分

u 從主配置文件包含子配置文件

17) 對象工廠

u 框架的核心對象都是由對象工廠建立出來。

u 可使用自定義的對象工廠覆蓋框架的對象工廠。

18) 註解零配置。

u 執行框架流程,不須要增長配置文件

使用JDK1.5版本以後的新特性,註解功能

不推薦使用,違背OCP開發原則。

 Struts2 中,模型-視圖-控制器模式經過五個核心組件來實現 

19) Action

20) 攔截器

21) 值棧/OGNL

22) 結果類型

23) 結果/視圖技術

l Struts2框架MVC 架構圖

 

Struts2的總結

24) Struts2框架的優勢

輕量級的MVC的流程框架

l 統一管理頁面流轉

l 簡化了表單向控制器的賦值

l 簡化上傳操做

l 規範了團隊開發

體現了獨立服務概念(IOC)

增長攔截器的處理機制,能夠很容易進行功能的擴展。遵循AOP編程模式

u 提供了多種視圖展示技術。

u 線程安全。

u 測試起來更加的容易。

u 擁有由積極活躍的開發人員與用戶組成的成熟社區

25) Struts2框架的缺點

多例建立對象,性能降低(內存消耗大),執行效率低於servlet,因此在使用時會有侷限性

u Action比較臃腫,難於維護

u 底層實現方式很是複雜,致使學習成本增長(時間,難度)

u 因爲設計的緣由會致使安全隱患。

http://www.egov.com/user/login!getUsercode.action?usercode=success

http://www.egov.com/user/login!getUsercode.action?usercode=success&usertype=/WEB-INF/web.xml

Struts2的競爭對手

26) SpringMVC

27) JSF

28) WebWork

相關文章
相關標籤/搜索