框架學習:webWork框架和struts2框架的結構和分析

五柳-先生發表於2016-03-21

上篇部落格中,我簡單的介紹了我們分層開發中每一層中擁有的框架,而且介紹了我常用的框架struts1的結構和原理分析,那麼今天我繼續介紹我熟悉的框架struts2的框架的結構和原理分析。

       在說struts2框架之前,我要先介紹另外一個框架webwork框架,這個框架也是一個mvc的框架,這個框架的設計思路是採用攔截鏈將使用者的請求的資料轉發到Action中,並負責將Action的處理結果轉換成對使用者的響應。它的這種設計思路能夠和ServletAPI分離,鑑於我們的上篇部落格介紹的struts1的缺點,所以webwork框架解決了struts1的這個缺點。
       我們來看一下
webwork框架的結構圖:

 

 

       有了這個流程圖,我就不給大家講解具體的原理流程了,它採用的是攔截鏈的機制,通過這些攔截鏈完成使用者的相應請求,從而與servletAPI分離,當與servlet分離開的時候,也就是表明和容器解耦了;另外,我們從結構圖中看到它的檢視模版有jsp、FreeMarker等等,它的表示層技術比struts1框架的飽滿許多。

       所以,webwork框架解決了struts1框架存在的問題,而且它的設計思路是非常好的,鑑於此,struts2框架就在struts1框架的基礎上引入了webwork框架的設計思路應運而生了。所以我們就能夠發現struts2兼具struts1的特性而且通過引入webwork框架的設計思路解決了struts1的一些缺點。

         struts2框架的大致的體系圖:

      

 

        從圖中我們能夠看出它是引入的webwork框架的設計思路,而且它也是基於mvc的一個開源的框架。之後我們來說一下struts2框架的一個執行流程(流程圖和webwork框架非常類似):

 

 

 

  1. 瀏覽器傳送請求,通過幾層過濾器完成一些功能,之後到actionmapper中,之後將請求傳到核心控制器中
  2. 核心控制器filterDispatcher根據請求決定呼叫合適的Action
  1. 呼叫webwork的攔截器鏈自動請求通用功能,如校驗之類的操作
  1. 回撥action的execute方法,獲取使用者請求執行相應的業務邏輯
  2. 之後返回字串,匹配result,之後跳轉到相應的檢視或其他的文件
  3. 之後在執行相應的攔截器鏈自動請求功能,隨後轉到web客戶端。

 

       這樣我們就對struts2框架的結構上的東西做了一個簡單的介紹。在上篇部落格講解了struts1框架,所以有必要在這裡對他倆進行一下對比(我僅僅總結了五條我認為比較重要的,以後如果發現其他的在隨時補充):

 

  1. 在Action實現類方面的對比(struts1的Action繼承action,struts2實現介面,也可以不實現,可以定製服務)
  2. 執行緒模式方面的對比(struts1存線上程安全問題,struts2不存在)
  3.  ServletAPI依賴方面的對比(struts1依賴servletAPI,struts2不是)
  4. 可測性方面的對比(struts1難測試,依賴容器,struts2不是)
  5. 封裝請求引數的對比(struts1使用actionform;struts2直接寫到action,並且支援pojo物件)

 

       這篇部落格就介紹到這裡,巨集觀上的學習以前一直做的不好,所以這段時間一直在解決這個學習上出現的問題,希望我的這些重構的框架學習部落格能夠對大家有所幫助。下節課我會繼續介紹我經常使用的框架的結構和執行流程的分析,敬請關注!

相關文章