Strut2基本流程及原理

來源:互聯網
上載者:User
1.Struts 2的基本流程
  Struts 2架構由3個部分組成:核心控制器FilterDispatcher、業務控制器和使用者實現的商務邏輯組件。在這3個部分裡,Struts 2架構提供了核心控制器FilterDispatcher,而使用者需要實現業務控制器和商務邏輯組件。
2.核心控制器:FilterDispatcher
  FilterDispatcher是Struts 2架構的核心控制器,該控制器作為一個Filter運行在Web應用中,它負責攔截所有的使用者請求,當使用者請求到達時,該Filter會過濾使用者請求。如果使用者請求以action結尾,該請求將被轉入Struts 2架構處理。

Struts 2架構獲得了*.action請求後,將根據*.action請求的前面部分決定調用哪個商務邏輯組件,例如,對於login.action請求,Struts 2調用名為login的Action來處理該請求。

Struts 2應用中的Action都被定義在struts.xml檔案中,在該檔案中定義Action時,定義了該Action的name屬性和class屬性,其中name屬性決定了該Action處理哪個使用者請求,而class屬性決定了該Action的實作類別。

Struts 2用於處理使用者請求的Action執行個體,並不是使用者實現的業務控制器,而是Action代理——因為使用者實現的業務控制器並沒有與Servlet API耦合,顯然無法處理使用者請求。而Struts 2架構提供了系列攔截器,該系列攔截器負責將HttpServletRequest請求中的請求參數解析出來,傳入到Action中,並回調Action 的execute方法來處理使用者請求。

顯然,上面的處理過程是典型的AOP(面向切面編程)處理方式。圖3.19顯示了這種處理模型。 

圖3.19  Struts 2的攔截器和Action

從圖3.19中可以看出,使用者實現的Action類僅僅是Struts 2的Action代理的代理目標。使用者實現的業務控制器(Action)則包含了對使用者請求的處理。使用者的請求資料包含在 HttpServletRequest對象裡,而使用者的Action類無需訪問HttpServletRequest對象。攔截器負責將 HttpServletRequest裡的請求資料解析出來,並傳給商務邏輯組件Action執行個體。
3.業務控制器
  正如從圖3.19所看到的,業務控制器組件就是使用者實現Action類的執行個體,Action類裡通常包含了一個execute方法,該方法返回一個字串——該字串就是一個邏輯視圖名,當業務控制器處理完使用者請求後,根據處理結果不同,execute方法返回不同字串   ——每個字串對應一個視圖名。

程式員開發出系統所需要的業務控制器後,還需要配置Struts 2的Action,即需要配置Action的如下三個部分定義:

—  Action所處理的URL。

—  Action組件所對應的實作類別。

—  Action裡包含的邏輯視圖和實體資源之間的對應關係。

每個Action都要處理一個使用者請求,而使用者請求總是包含了指定URL。當Filter Dispatcher攔截到使用者請求後,根據請求的URL和Action處理URL之間的對應關係來處理轉寄。
4.Struts 2的模型組件
  實際上,模型組件已經超出了MVC架構的覆蓋範圍。對於Struts 2架構而言,通常沒有為模型組件的實現提供太多的協助。

文字框: 圖3.20 控制器調用模型組件Java EE應用裡的模型組件,通常指系統的商務邏輯組件。而隱藏在系統的商務邏輯組件下面的,可能還包含了DAO、領域對象等組件。

通常,MVC架構裡的業務控制器會調用模型組件的方法來處理使用者請求。也就是說,商務邏輯控制器不會對使用者請求進行任何實際處理,使用者請求最終由模型組件負責處理。業務控制器只是中間負責調度的調度器,這也是稱Action為控制器的原因。

圖3.20顯示了這種處理流程。

提示  在圖3.20中看到Action調用商務邏輯組件的方法。當控制器需要獲得商務邏輯組件執行個體時,通常並不會直接擷取商務邏輯組件執行個體,而是通過原廠模式來獲得商務邏輯組件的執行個體;或者利用其他IoC容器(如Spring容器)來管理商務邏輯組件的執行個體。
5.Struts 2的視圖組件
  Struts 2已經改變了Struts 1隻能使用JSP作為視圖技術的現狀,Struts 2允許使用其他的模板技術,如FreeMarker、Velocity作為視圖技術。

當Struts 2的控制器返回邏輯視圖名時,邏輯視圖並未與任何的視圖技術關聯,僅僅是返回一個字串,該字串作為邏輯視圖名。

當我們在struts.xml檔案中配置 Action時,不僅需要指定Action的name屬性和class屬性,還要為Action元素指定系列result子項目,每個result子項目定義一個邏輯視圖和物理視圖之間的映射。前面所介紹的應用都使用了JSP技術作為視圖,故配置result子項目時沒有指定type屬性,預設使用JSP 作為視圖資源。

如果需要在Struts 2中使用其他視圖技術,則可以在配置result子項目時,指定相應的type屬性即可。例如,如果需要使用FreeMarker,則為result指定值為freemarker的type屬性;如果想使用Velocity模板技術作為視圖資源,則為result指定值為velocity的type屬性……
6.Struts 2的運行流程
  經過上面介紹,我們發現Struts 2架構的運行流程非常類似於WebWork架構的流程。

提示  在Struts 2的官方網站,我們可以找到如下說法:Essentially,Struts 2.0 is the technical equivalent of WebWork 2.3。Aside from the package and property renaming,it isn't much different than,say,migrating from WebWork 2.1 to 2.2——意思是說:Struts 2.0技術等同於WebWork 2.3架構,除了包和屬性被改名外。從WebWork 2.2遷移到Struts 2不會比從WebWork 2.1遷移到WebWork 2.2更複雜。

這裡我們可以看到,Struts 2其實就是WebWork 2.2的升級版,這也就不難理解:為什麼WebWork和Struts 2如此相似!

因此,Struts 2的運行流程與WebWork的運行流程完全相同,讀者可以參看圖1.8來瞭解Struts 2的運行流程。
[url]
http://www.17xie.com/read-100729.html[/url]好東西很多,需要的都快去!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.