從上一章中我們知道了接下來我們要去了解源碼的項目(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。