Struts2 源碼分析——項目分析

從上一章中我們知道了接下來我們要去了解源碼的項目(struts2-showcase)荧库。而這一章將講述我三年后在次接觸struts2-showcase項目是一個什么樣子的情況。我有一個工作習慣坑质。在參于每一個新項目開發(fā)的時候跷敬,我都希望項目負責人能跟我講講這個項目到底用到了哪些知識點。這樣子的目標是讓我心中對項目會有一個大體上的概念愕乎。悲劇的是struts2-showcase作者是不可能為你這個小小的角色特意打電話或是EMAIL你的鸵熟。所以我的入手點是看這個項目的需要的JAR副编。如圖下。

從上面的圖片里面的紅框我們可以大概判斷出流强。可能用的是struts2 + spring +?hibernate架構呻待。而界面是用sitemesh + struts2-Tiles來實現(xiàn)的打月。在這里我并不認了hibernate有被用到。因為我沒有看到主要的hibernate包蚕捉。而且這個項目并沒有用到數(shù)據(jù)庫方面的知識奏篙。所以最有可能是struts2 + spring 架構。為了進一步確定迫淹,我點開eclipse項目里同的WEB-INF來看秘通。如下圖

我可以看到applicationContext.xml,而沒有看到hibernate相關的配置文件敛熬,我還特意去放代碼的根目標(src)里面去找肺稀。這次我更加確定用的是Spring,沒有用hibernate知識點应民。

項目總結:

1.主體架構:struts2 + spring 架構话原。

2.界面顯示:sitemesh + struts2-Tiles。

3.其他:DWR框架,模板引擎(velocity,freemarker)诲锹。

struts2入口類

從上面的總結我們可以看到項目用到的相關知識點繁仁。當然這是我個人的分析并不全面。要分析一個開源的框架只有項目結合來分析才是最完美的归园。而接下來我們要做的是找到對應的入口類黄虱。顯然我們要從Web.xml入手。從Web.xml上面我們可以找到我們需要的類庸诱。StrutsPrepareFilter類和StrutsExecuteFilter類捻浦。如圖下(web.xml的部分內容)

從圖片中我們可看到struts2的入口類晤揣,我們可以想像一點struts2是不是用過濾器(Filter)來實現(xiàn)MVC思想呢?而不是用Servlet呢默勾?碉渡。由于筆者正真看struts2源碼是在四年前,所以當筆看到上面圖片的寫法的時候母剥,筆者腦中就會有這樣子的想法:每一個用戶請求都會通過struts2來進行過濾來找到對應用戶要請求的類滞诺。然后類執(zhí)行對應的方法并返回相應的結果。在通過struts2來回應相關的結果頁面环疼。如圖下习霹。

我有個毛病,有思想之后炫隶,我都會試著去證明一下淋叶。首先假設我的想法是對的話,那么我們的目標也明確下來伪阶。我們就是要了解struts2是什么樣子處理每個用戶請求煞檩。又是什么樣子去處理找到對應的類。讓我們在看看上面的Web.xml 的信息栅贴。我們會發(fā)現(xiàn)這條內容(org.apache.struts2.dispatcher.filter.StrutsPrepareFilter)斟湃。我們可以根據(jù)這個內容找到他所在的JAR包——struts2-core-2.5.2.jar。讓我們點開他檐薯。如圖下凝赛。

從上面的圖片我們能發(fā)現(xiàn)在filter包下有四個類分別為:FilterHostConfig.class,StrutsExecuteFilter.class,StrutsPrepareAndExecuteFilter.class,StrutsPrepareFilter.class。從這點上我們就明白這將是未來要用到的第一個類坛缕。用心的程序員會發(fā)現(xiàn)上面還有com.opensymphony.xwork2墓猎。從這一點上我們不難發(fā)現(xiàn)這就是關于xwork2的源碼。既是Webwork框架的源碼赚楚。沒有錯毙沾,struts2是基于Webwork上面在進行研發(fā)的。所以如果是學過Webwork的人會很易容上手struts2直晨。讓我們回頭過來看看這四個類搀军。根據(jù)類名我就可以想像一種可能情況:StrutsExecuteFilter.class +?StrutsPrepareFilter.class ==?StrutsPrepareAndExecuteFilter.class。我也試用把StrutsPrepareFilter類刪除掉勇皇,只用StrutsExecuteFilter罩句。不好意思,不行敛摘。我記得我以前有帶過一個新生门烂,他只用一個StrutsExecuteFilter類。而后做一個下午,最后受不了就是不知道哪里出錯了屯远。就跑過來找我蔓姚。我一看:小樣的,你是想讓我打死你嗎慨丐?

文章總結

這一章主要的目標是讓我們明白我們將要應對的知識點有坡脐。spring相關的知識。還有界面相關的知識房揭。同時讓我們明白我們要入口類有哪一些备闲。在進行struts2的Web.xml配置的時候,有倆種方式捅暴。一種是用StrutsExecuteFilter.class +?StrutsPrepareFilter.class恬砂,一種是用?StrutsPrepareAndExecuteFilter.class。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(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
  • 正文 為了忘掉前任昏鹃,我火速辦了婚禮尚氛,結果婚禮上,老公的妹妹穿的比我還像新娘洞渤。我一直安慰自己阅嘶,他們只是感情好,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著讯柔,像睡著了一般抡蛙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上魂迄,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天粗截,我揣著相機與錄音,去河邊找鬼捣炬。 笑死熊昌,一個胖子當著我的面吹牛,可吹牛的內容都是我干的遥金。 我是一名探鬼主播浴捆,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼稿械!你這毒婦竟也來了选泻?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤美莫,失蹤者是張志新(化名)和其女友劉穎页眯,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體厢呵,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡窝撵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了襟铭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碌奉。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖寒砖,靈堂內的尸體忽然破棺而出赐劣,到底是詐尸還是另有隱情,我是刑警寧澤哩都,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布魁兼,位于F島的核電站,受9級特大地震影響漠嵌,放射性物質發(fā)生泄漏咐汞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一儒鹿、第九天 我趴在偏房一處隱蔽的房頂上張望化撕。 院中可真熱鬧,春花似錦挺身、人聲如沸侯谁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽墙贱。三九已至热芹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惨撇,已是汗流浹背伊脓。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留魁衙,地道東北人报腔。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像剖淀,于是被迫代替她去往敵國和親纯蛾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法纵隔,類相關的語法翻诉,內部類的語法,繼承相關的語法捌刮,異常的語法碰煌,線程的語...
    子非魚_t_閱讀 31,598評論 18 399
  • 一. Java基礎部分.................................................
    wy_sure閱讀 3,805評論 0 11
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)绅作,斷路器芦圾,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • (一)Struts、Spring役拴、Hibernate、Mybatis框技術 1.Struts2.0有幾種標簽庫 【...
    獨云閱讀 3,233評論 0 62
  • 桃花陣 昨日钾埂,小貓問小豬河闰,周末去哪?小豬答曰:”聽說某地桃花盛開褥紫,我要去看桃花姜性,走走桃花運∷杩迹“小貓笑著說:”去吧部念,...
    夏寒夢閱讀 171評論 0 0