標籤:web應用 架構師 javabean ssh struts
通過一步步的封裝我們實現了Struts的基本雛形,我們解決了Struts怎麼實現MVC的問題,我們現在僅僅有了Struts的基礎,對Struts的學習才剛剛開始,這篇我們要通過對比MVC來理解Struts的執行流程,最後深入Struts的源碼,一看究竟。
MVC
M:商務邏輯,業務資料可以重複使用,我們經常說的javabean(其實struts沒有實現業務層,也無法實現)
V:顯示邏輯,同一份資料,對應多中顯示方法,JSP代碼實現
C:控制流程程器,Servlet代碼實現。
我們通過時序圖看一下MVC模式的執行流程,如所示:
Struts
從前面幾篇部落格,我們知道了Struts是基於JSP和Servlet的一個開源的Web應用程式框架,對MVC進行了高度封裝,並且我們從MVC一步步的封裝了一個Struts。
目錄:
【SSH進階之路】Struts基本原理 + 實現簡單登入(二)
【SSH進階之路】一步步重構MVC實現Struts架構——從一個簡單MVC開始(三)
【SSH進階之路】一步步重構MVC實現Struts架構——封裝商務邏輯和跳轉路徑(四)
【SSH進階之路】一步步重構MVC實現Struts架構——徹底去掉邏輯判斷(五)
【SSH進階之路】一步步重構MVC實現Struts架構——完善轉向頁面,大功告成(六)
那我們就先畫一個跟我們前面的例子一致,並且也跟MVC大致相同的時序圖,為了協助大家理解Struts的整個更詳細的流。如下所示:
大致流程:
深入源碼:
我們理解Struts的基本流程之後,我們還需要深入源碼一看究竟,我們學Struts不僅僅是為了使用,還要理解它的真正原理。如果你只為了簡單的使用,可以到此為止,如果你想成為一個優秀的架構師,你還不能止步。
時序圖如下所示:
從上面的圖中我們可以發現ActionServlet幾乎完成了Struts的所有的功能,跟MVC的控制器一樣,起到了非常重要的作用,我們再將它更加細粒度的解析一下,如所示:
從上面的流程圖,我們可以發現RequestProcessor起到了至關重要的作用,完成了截取URL,設定映射關係,以及反射建立ActionForm,然後設定值,再反射建立Action,最後再執行execute方法,完成轉向。此時,我們的思路已經非常清晰了。下面我用自己的語言總結一下Struts的流程。
Struts流程
我們已經看完了Struts的基本流程以及也深入源碼看了一遍Struts的實現流程,下面我們需要用自己的語言來總結一下。
1) 用戶端發出http請求。
2)根據web.xml配置,該請求被ActionServlet接收。
3)根據struts-config.xml配置,ActionServlet先將請求中的參數填充到ActionForm中,然後ActionServlet再將請求發送到Action 進行處理。
4)是否驗證,需要驗證則調用ActionForm的validate方法,驗證失敗則跳轉到input,成功則繼續。
5)Action從ActionForm獲得資料,調用javabean(Model)中的業務方法處理資料。
6)Action返回ActionForward對象,跳轉到相應JSP頁面或Action。
7)返回http響應到用戶端。
上面的流程到處都是,看一看還行,看兩看就煩,我們還是以一張圖進行梳理:
總結
最後,相信經過這一遍遍的對比和分析,你已經對Struts的基本原理了如指掌。
引子:
下篇部落格,我們會更新一些Hibernate的內容,先從基本原理入手,再給大家搭建Hibenate的開發環境,現實簡單一實例。
【SSH進階之路】深入源碼,詳解Struts基本實現流程