Struts2框架結構

轉載文章     https://blog.csdn.net/qq_32166627/article/details/70050012

Struts2是一個相對流行的MVC框架。在說Struts2之前,我們先回顧一下傳統的servlet/jsp實現的MVC架構,其運行機制是:jsp頁面(視圖view)發送消息到servlet(控制器Controller),servlet獲取請求數據,處理業務邏輯,分發轉向。這樣的話,servlet就太臃腫了,什麼活兒都是servlet在幹,而且業務邏輯全是硬編碼,代碼都寫死了不利於維護。

Struts2框架的MVC分別對應: 
V:jsp+OGNL 
C:action類 
M:javabean+ModelDriven

Struts2框架的控制器將“獲取請求”和“分發轉向”代碼抽取出來寫在配置文件裏,這樣一來,控制器(action類)就能專注於業務邏輯的處理了。

正文
1,一個完整的Struts2項目的web目錄結構及主要文件的執行流程

各文件執行流程關係

由上圖可以看出,Struts2的MVC各個部分都是圍繞着struts.xml文件執行的,這樣就解放了控制器的負擔,而且解決了硬編碼的問題。

2,Struts2框架的內部執行過程 
上面講了MVC中個文件的執行過程,那只是一小部分,現在來看一下整個struts2框架的執行機制,下面的圖來源於官網,然後加了自己的改動。

由上圖看出,整個框架的運行又緊緊圍繞着核心過濾器StrutsPrepareAndExecuteFilter展開工作。深入到filter的源碼中會對理解有所幫助。下面幾篇博客對filter的介紹很好。

(1),struts2請求過程源碼分析:博客1 
(2),Struts 2配置文件加載順序:博客2

3,默認攔截器 
struts-default.xml配置文件中定義了一個默認攔截器棧,這些攔截器就是動作方法執行之前的要執行的。常用的有封裝用戶表單數據到javabean的modelDriven攔截器,用於輸入驗證的validation攔截器,等等。

4,View和Controller之間的交互 
從視圖頁面每次發來的用戶請求都會產生一些數據,這些數據都存放在哪兒呢?實際上,每次動作類執行前,核心過濾器StrutsPrepareAndExecuteFilter都會創建2個對象:ActionContext和ValueStack,這2個對象存儲了動作訪問期間用到的所有數據。這些數據又可以在jsp頁面上通過strut標籤和OGNL表達式來取得。

(1),ActionContext是一個map數據結構,其中的key是一些常見的域對象(application,session,request等),而value又是一個map。也就是說ActionContext是一個大map包裹着一些小map。

(2),ValueStack是一個ArrayList數據結構,並且是一個棧結構,每次都在棧頂存取數據。

5,Controller與Model之間的交互 
C和M之間的交互比較簡單,利用Struts框架提供的攔截器:ModelDriven,即可實現將用戶表單提交的數據封裝到對應的javabean中。要點:(1)javabean類自己編寫。(2)動作類要實現ModelDriven接口。(3)實現抽象方法getModel()。

總結
本文從宏觀角度解讀了Struts2框架的基本結構,每個部分的具體細節以後再講。
--------------------- 
作者:name_s_Jimmy 
來源:CSDN 
原文:https://blog.csdn.net/qq_32166627/article/details/70050012 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章