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的運行流程:
