Struts2 源碼分析——核心機制

通過上一章我們明白我們要學(xué)習(xí)的知識點和目標(biāo)。所以這章我將從使用者來講struts2的機制原理。我們都清楚的知道struts2的核心思想是MVC思想六荒。MVC全名是Model View Controller阅懦,是模型(model)-視圖(view)-控制器(controller)的縮寫。說到MVC思想我就不得不講到另一個可能讓人迷糊的知識點(三層架構(gòu))贫母。有多很面試官會問:MVC和三層架構(gòu)是不是同一個東西。如果不是他們又別分是什么盒刚。我們來看一下下面的定義腺劣。

三層架構(gòu)的定義

1.表現(xiàn)層:項目的界面UI相關(guān)的邏輯代碼。你可以理解為Web界面因块。Winform等等都可以說為表現(xiàn)層橘原。

2.業(yè)務(wù)層:項目相關(guān)業(yè)務(wù)邏輯代碼。例如下單業(yè)務(wù)涡上。我們最后一定要計算總的消費金額類似的邏輯趾断。而計算這一步就是屬于業(yè)務(wù)層的。當(dāng)界面用戶看到的數(shù)字就是表現(xiàn)層的吩愧。

3.數(shù)據(jù)層:根據(jù)數(shù)據(jù)庫相關(guān)的邏輯代碼芋酌。不管是什么樣子的項目一般多要對數(shù)據(jù)進行增刪改查的操作。這些代碼都是屬于數(shù)據(jù)層的雁佳。

MVC思想的定義

1.模型(model):你可以理解為業(yè)務(wù)相關(guān)的數(shù)據(jù)代碼脐帝。筆者當(dāng)年把模型對象和這邊的模型相混在一起。這邊的模型是大業(yè)務(wù)來講甘穿。而模型對象只是某一個業(yè)務(wù)完成之后的數(shù)據(jù)存放而以腮恩。

2.視圖(view):界面UI相關(guān)的顯示代碼。

3.控制器(controller):用于處理業(yè)務(wù)相關(guān)的交互代碼温兼。你可以理解為從視圖或從用戶那直接讀取數(shù)據(jù)秸滴,控制用戶輸入的數(shù)據(jù),向模型(model)發(fā)送數(shù)據(jù)募判。

從上面的定義來看的話荡含,我相信還是有很多朋友會看不懂咒唆。筆者當(dāng)年也為這些概念的東西思考了很久。也問我很多人释液,找了很多資料全释。可是還是有會有一點亂误债。來看一張圖片浸船。如下。

這張圖是筆者自己的畫的寝蹈。不好看是必然李命。這不是重點。筆者想要講的是MVC和三層之間的關(guān)系箫老。從圖片上我們就可以看到三層和MVC不是同一東西封字。其中視圖(view)-控制器(controller)在筆者看來只是把表現(xiàn)層上面的代碼更加的細節(jié)化,變得更加有組織耍鬓。而模型(model)只是把業(yè)務(wù)層和數(shù)據(jù)層包在里面而以阔籽。而模型(model),視圖(view)牲蜀,控制器(controller)之間的數(shù)據(jù)交流用模型對象來實現(xiàn)笆制。這邊的模型對象就是代碼常常看到的Model類對象各薇。圖片上有倆個1紅色圓形標(biāo)志项贺。就是筆者認(rèn)為控制器(controller)可以從視圖或從用戶那直接讀取數(shù)據(jù)。

小總結(jié):

我們可以理解為三層和MVC對代碼組織的方式不一樣子峭判。三層用的是UI顯示相關(guān)的代碼,業(yè)務(wù)相關(guān)代碼棕叫,數(shù)據(jù)庫相關(guān)代碼的方式進行劃分林螃。而MVC用的是業(yè)務(wù)邏輯,數(shù)據(jù)(這里筆指的是模型對象)俺泣,界面UI顯示分離的方式來進行化劃分疗认。所以筆者認(rèn)為他們的思想不沖突。硬要說的話伏钠,筆者認(rèn)為MVC是二層,表現(xiàn)層和業(yè)務(wù)邏輯層(其中包含上的業(yè)務(wù)層和數(shù)據(jù)層)横漏。在筆者看來只要把MVC+三層的思想引入任何一個項目的話,都會讓這個項目整體結(jié)構(gòu)上變得更新的清楚熟掂。這里講一個搞笑的事情缎浇。記得當(dāng)年我是這樣子認(rèn)為業(yè)務(wù)層就是一個dll或JAR,而數(shù)據(jù)層也是一個dll或JAR。而表現(xiàn)層就是應(yīng)用的主要項目赴肚。比如 exe應(yīng)用或是aspx/jsp應(yīng)用素跺。然后表現(xiàn)層應(yīng)用引入業(yè)務(wù)層DLL 二蓝,業(yè)務(wù)層項目引用數(shù)據(jù)層DLL。沒有別的意義了指厌。呵呵呵刊愚。

struts2 的機制原理

不管是什么樣子的文檔說明。如果能有一個類似于流程圖的圖片來說明相關(guān)的業(yè)務(wù)細節(jié)的話踩验。那真是太完美了鸥诽。對筆者而來言,現(xiàn)在是復(fù)習(xí)struts2箕憾。所以有一張能說明struts2機制的圖片的話牡借,我只能說事半功陪。我找了很多張圖片厕九。而如下圖片在筆者看來是最好的蓖捶。

請把目光移到上面這張圖片的底部。相信在看這張圖片的時候扁远,很多人會不明白這張圖片要說明什么俊鱼。主要原因筆者認(rèn)為:一是對struts2的基本知識不是很了解;二是沒有認(rèn)真的看這張圖片畅买,只會看圖片的上面部分并闲,沒有看底部的定義。我們來看一下底部是在說明什么谷羞。

橙黃色(Servlet Filters):struts2的過濾器帝火。

藍色(Struts core):表示struts2核心部分的知識點。

綠色(Interceptors):表示攔截器湃缎。如果不清楚攔截器的朋友犀填。你們可以去看一下AOP思想。當(dāng)然Spring在這方面做的非常棒了嗓违。

黃色(User Created):用于說明這部分是開發(fā)人員自己定義的部分九巡。即是所為的開發(fā)代碼。

其實圖片上面應(yīng)該還有一個定義:淡黑色蹂季,如HttpServletRespose和HttpServletRequest冕广。用于表示 用戶的一次請求。

好了偿洁∪龊海看了上面的定義之后,筆者就可以來講解struts2的機制了涕滋。

1.每一次請求(HttpServletRequest)都會通過上面圖片中的橙黃色(Servlet Filters)部分睬辐。即是struts2的過濾器。

2.當(dāng)請求到FliterDispatcher的時候,它會去調(diào)用ActionProxy溉委,ActionProxy會去判斷是否調(diào)用過ConfigurationManager并加載過struts.xml鹃唯。如果沒有就調(diào)用ConfigurationManager并加載struts.xml,在跳入第三步瓣喊。否則如果有就直接跳入第三步坡慌。

3.ActionProxy通過ActionInvocation來執(zhí)行用戶請求對應(yīng)Acion的攔截器。

4.找到對應(yīng)的Acion并執(zhí)行對應(yīng)的方法藻三。

5.根據(jù)Acion執(zhí)行的結(jié)果開始組裝回返的結(jié)果信息洪橘。

6.把對應(yīng)的結(jié)果信息放入HttpServletRespose并回返給用戶顯示出來。

上面值的注意是Filter過濾器和攔截器棵帽。他們會先執(zhí)行上部分熄求,然后去執(zhí)行對應(yīng)的Action,最后在去執(zhí)行下部分逗概。其中ActionProxy弟晚,ConfigurationManager,F(xiàn)literDispatcher等等這里有逾苫,并不代表源碼里面就有卿城。可能會換個名字铅搓。這里更多的是用于表示一種機制概念而以瑟押。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市星掰,隨后出現(xiàn)的幾起案子多望,更是在濱河造成了極大的恐慌,老刑警劉巖氢烘,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怀偷,死亡現(xiàn)場離奇詭異,居然都是意外死亡播玖,警方通過查閱死者的電腦和手機枢纠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來黎棠,“玉大人,你說我怎么就攤上這事镰绎∨д叮” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵畴栖,是天一觀的道長随静。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么燎猛? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任恋捆,我火速辦了婚禮,結(jié)果婚禮上重绷,老公的妹妹穿的比我還像新娘沸停。我一直安慰自己,他們只是感情好昭卓,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布愤钾。 她就那樣靜靜地躺著,像睡著了一般候醒。 火紅的嫁衣襯著肌膚如雪能颁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天倒淫,我揣著相機與錄音伙菊,去河邊找鬼。 笑死敌土,一個胖子當(dāng)著我的面吹牛镜硕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纯赎,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼谦疾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了犬金?” 一聲冷哼從身側(cè)響起念恍,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎晚顷,沒想到半個月后峰伙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡该默,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年瞳氓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栓袖。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡匣摘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出裹刮,到底是詐尸還是另有隱情音榜,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布捧弃,位于F島的核電站赠叼,受9級特大地震影響擦囊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嘴办,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一瞬场、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涧郊,春花似錦贯被、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至双仍,卻和暖如春枢希,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背朱沃。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工苞轿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逗物。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓搬卒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親翎卓。 傳聞我的和親對象是個殘疾皇子契邀,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容