1. 程式人生 > >自己實現Struts2(一)Struts流程介紹和環境搭建

自己實現Struts2(一)Struts流程介紹和環境搭建

為什麼要自己實現Struts2

Struts2是無疑是一個經典的、優秀的框架,實現了MVC模式,層次結構清晰,而且還提供了一些非常有用的外掛。當然了,我的目的不是為了介紹Struts2的全部功能,說老實話Struts2的很多功能我都沒用過也不知道。雖然這幾年Struts2已經式微,逐漸被Spring MVC替代,但是Struts2作為一個曾經非常流行的框架,它整體框架的實現思想無疑是十分優秀的,這系列的文章就會介紹怎麼實現一個擁有Struts2框架流程的精簡版Struts2。

我們習慣了拿來主義,很多人都不提倡重複造輪子,但是輪子用多了,就可能會喪失創造力。在我看來,實現一個框架,可以讓你對它的整體框架有更深刻的思考,提高自己的創造力。引用一下錢老的話

錢學森:手上無劍與有劍不用不是一回事

自己不能造輪子和可以造輪子但是不造是兩碼事

需要什麼知識

要自己實現一個精簡版Struts2,你得知道Java Web的基本知識,像Servlet、Filter什麼的,然後你得使用過Struts2,並且瞭解其中的一些核心功能。我會假設你滿足上面的要求。

Struts2框架執行流程

先貼上一張Struts2的架構圖
Struts2架構圖
需要注意的是FilterDispatcher自2.1.3開始就被StrutsPrepareAndExecuteFilter替代了。

現在來介紹一下它是怎麼一個流程

  1. 客戶端提交一個請求,被StrutsPrepareAndExecuteFilter攔截到了(StrutsPrepareAndExecuteFilter配置的攔截路徑一般都是/*)。

  2. 在StrutsPrepareAndExecuteFilter攔截到請求後會訪問ActionMapper來分析請求資訊以決定是否呼叫某個action(因為有可能請求的是其它的靜態資源或者不符合規定字尾的)。

  3. 如果要訪問action,那麼StrutsPrepareAndExecuteFilter會把請求的處理交給ActionProxy物件。

  4. ActionProxy物件會通過ConfigurationManager載入核心配置檔案struts.xml(Struts的action的配置資訊檔案)。

  5. ActionProxy讀取到要訪問的action的配置資訊後建立一個ActionInvocation物件,ActionInvocation實現了命令模式,在action呼叫的前後遞迴地呼叫涉及到的攔截器(Interceptor)。

  6. 一旦action執行完畢,會返回一個result,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。

好了,流程介紹完了,下面就來搭建一下我們的環境。

環境搭建

先新建一個Web工程,我把工程命名為JStruts2(我的英文名是Jason),工程名你們可以自行選擇。然後匯入一些需要用到的jar包

  • commons-beanutils-1.9.3.jar : 封裝請求引數的時候要用到,一個內省工具包
  • commons-logging.jar : beanutils依賴的jar包
  • dom4j-1.6.1.jar : 讀取配置檔案時用到,解析XML的
  • jaxen-1.1-beta-6.jar : 配合dom4j,令其支援XPath(XML路徑語言,不是很難的,不知道的可以去了解一下)

當然了,上面的這些jar包版本可以隨意,不做強制要求。還需要注意的是我的工程用的字符集是UTF-8的。

現在就可以啟動Tomcat執行一下了。