Struts2的基本工作流程認識

    前邊對Struts2有了一些瞭解,爲了進一步理解,對其工作流程進行分析。

    一、從無到有的過程

        在不用Struts框架之前我們需求的功能也是可以實現的,下面就從最初當我們不用框架的基本功能實現方法過度到使用框架,同時體會框架的強大之處。

        1、  需求:實現如下鏈接訪問:/mytest/addAction.action、/mytest/deleteAction.action、/helloworld/helloworldaction.action。在邏輯部分實現類名輸出。

        2、  基本實現

首先需要爲每個請求創建一個類,在對應的類中調用execute方法實現邏輯功能。同時定義一個Filter,根據路徑判斷創建哪個對象並調用其方法。

        3、  增強擴展性

爲了代碼的通用性和複用性,在這裏定義一個接口:Action,在接口中定義execute方法,然後讓別的Action實現該接口。在Filter中就不再直接new對象,而是通過反射獲取對象,同時將需要反射創建的對象和對應的請求以鍵值對的形式放到Map中

        4、  增加配置文件

經過上邊幾步之後,代碼中還是有些問題,代碼中所有的有關請求的字符串都是寫死的,這樣擴展性就是一個很大的問題,由於配置文件是不用的編譯的,因此可以考慮將變動的請求鏈接都配置到配置文件中。爲了讓轉向頁面也是可配置的,可以讓execute方法返回一個字符串,用來指定轉向頁面。在代碼運行時解析配置文件,

    二、過程分析

        此時代碼執行過程爲:首先tomcat啓動→加載web.xml文件→加載過濾器→加載並解析配置文件。這樣在需要一個新的請求時只需要增加配置文件信息,Action類和轉向的JSP頁面即可。

    三、Struts2框架實現及流程

        Struts2框架的實現過程大致就是上邊的過程,但是struts2的框架將更多的功能實現都封裝了起來,例如;數據封裝、類型轉化、國際化等。下面對其執行流程進行分析:

        1、  web客戶端發送請求信息

        2、  到達Tomcat,創建HttpServletRequest和HttpServletResponse對象,被struts2的過濾器StrutsPrepareAndExecuteFilter攔截。

        3、  通過ActionMapping對象判斷是否爲Action請求。如果不是,直接轉向JSP頁面。(下面爲Action請求)

        4、  依次調用從ExcuteOperations到Dispatcher調用到DefaultActionProxyFactory,創建一個代理類StrutsActionProxy。

        5、  創建ActionInvocation,然後相關Action和攔截器都會放到ActionInvocation中。

        6、  依次執行攔截器。

        7、  調用到Action方法,返回需要轉向的字符串。

        8、  通過返回的字符串,創建Result對象,並轉向對應JSP頁面

        9、  攔截器依次出棧,返回結果在JSP頁面渲染。

    四、體會

        Struts2中18個攔截器的設計思想很有借鑑意義,如果不將這些功能分開來,就會導致整個攔截器過於龐大,而且不便於控制和切換,Struts2的攔截器通過配置文件,設計成了一個可以配置的一個功能,如果不需要就可以將其去掉,而且還可以自己定義和添加,從而顯的十分靈活。這是我們設計軟件需要追求的一種好的效果。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章