Struts2的基本流程的詳細介紹


Struts2基本流程

 

概述

Struts2框架由三部分構成:核心控制器、業務控制器和用戶實現的業務邏輯組件。在這三部分中,struts2框架提供了核心控制器StrutsPrepareAndExecuteFilter,而用戶需要實現業務控制層和業務邏輯層。

一、核心控制器 StrutsPrepareAndExecuteFilter

 StrutsPrepareAndExecuteFilter與struts2以前版本中的FilterDispatcher一樣。它是struts2框架的核心控制器,該控制器作為一個Filter運行在web應用中,它負責攔截所有的用戶請求,當用戶請求到達時,該Filter會過濾用戶請求,如果用戶請求以action結尾,該請求就會被轉入struts2框架來處理。

Struts2框架獲取*.action請求后,將根據*.action請求的前面部分決定調用那個業務邏輯組件,例如:對於login.action請求,Struts2調用名為login的Action來處理該請求。

Struts2用戶處理請求的Action實例,並不是用戶實現的業務控制器,而是Action代理--因為用戶實現的業務控制器並沒有與ServletAPI耦合,顯示無法處理用戶請求,而struts2框架提供了系列攔截器,該系列攔截器負責將HttpServletRequest請求中的桉樹解析出來,傳入Action中,並huidiaoAction的execute方法來處理用戶請求。

上面的處理過程是典型的AOP(面向切面編程)處理方式,如圖所示的處理模型:

從圖看出,用戶實現的Action僅僅是struts2的Action代理的代理目標,用戶實現的業務控制器Action則包含了對用戶請求的處理,用戶的請求數據包含在HttpServletRequest對象中, 而用戶Action類無需訪問HttpServletRequest對象,攔截器會將請求數據解析出來並傳給業務邏輯組件Action實例

二、業務控制器

簡述:左右項目開發中action控制層,用戶接受數據,封裝數據,調用業務邏輯層

業務控制器組件就是用戶Action類的實例,Action類通常包含了一個excute方法,該方法返回一個字符串-----該字符串就是一個邏輯視圖名,當業務控制器處理完用戶請求后,根據處理結果不同,excute方法返回不同字符串。

每個字符串對應一個視圖名

在寫完控業務制器后,需要配置Action的如下三個部分定義

●Action所處理的URL

●Action組件所對應的實現類

●Action里包含的邏輯視圖和物理資源之間的對應關系

每個Action都要處理一個用戶請求,而用戶請求總是包含了指定URL,當StrutsPrepareAndExecuteFilter攔截到用戶請求后,根據請求的URL和Action處理URL之間的對應關系來處理轉發

三、struts2的模型組件

Java EE 應用里的模型組件,通常指系統的業務邏輯組件,而隱藏在系統邏輯組件下面的,可能還包含了DAO,領域對象等組件。

MVC框架里的業務控制器會調用模型組件的方法來處理用戶請求,也就是說,業務控制器不會對用戶請求進行實際處理,用戶請求最終由模型組件負責處理,業務控制器只是中間負責調度器,這也是稱Action為控制器的原因

四、Struts2的視圖組件

Struts2已經改變了struts1只能使用JSP作為視圖技術的現狀,允許使用其他模版技術。

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

當我們在struts.xml文件中配置Action時,要為Action元素指定系列result子元素,每個result子元素定義一個邏輯視圖和物理視圖之間的映射,如果沒有指定type屬性,默認使用JSP左右視圖資源。也可以指定很多類型 chain 轉發到指定action中,redircter,重定向。

五、運行流程

Struts2框架的運行流程非常相似於WebWork框架的流程,struts2其實就是WebWork2.2的升級版,因此,struts2的運行流程與WebWork運行流程完全相同,如圖WebWork的運行流程:

 

•1、客戶端向Servlet容器(如Tomcat)提交一個請求
 
•2、請求經過一系列過濾器(如ActionContextCleanUp過濾器等)
 
•3、核心控制器被調用,詢問ActionMapper來決定請求是否需要調用某個Action
 
•4、如果ActionMapper決定需要調用某個Action,核心控制器把控制權委派給ActionProxy (備注:JSP請求無需調用Action)
 
•5、ActionProxy通過Configuration Manager詢問框架的配置文件(struts.xml),找到需調用的Action類
 
•6、ActionProxy創建一個ActionInvocation的實例
 
•7、 ActionInvocation負責調用Action,在此之前會依次調用所有配置的攔截器
 
•8、Action執行完畢,ActionInvocation負責根據結果碼字符串在struts.xml的配置中找到對應的返回結果
 
•9、攔截器被再次執行
 
•10、過濾器被再次執行
 
 
Struts  2 核心接口和類
•ActionMapper
–根據請求的URI查找是否存在對應Action調用
•ActionMapping
–保存調用Action的映射信息,如namespace、name等
•ActionProxy
–在XWork和真正的Action之間充當代理
•ActionInvocation
–表示Action的執行狀態,保存攔截器、Action實例
•Interceptor
–可以在請求處理之前或者之后執行的Struts 2組件
–Struts 2絕大多數功能通過攔截器完成
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM