1. 程式人生 > >Struts2(一)——總體介紹

Struts2(一)——總體介紹

這篇部落格開始將總結一下有關框架的知識,在開發中合適的利用框架會使我們的開發效率大大提高。當今比較流行的開源框架:

  • 關注資料流程的MVC框架Struts1/2, WebWork, Spring MVC……)
  • 關注資料關係的容器框架Spring, GUICE……)
  • 關注資料操作的持久層框架(HibernateIBatis……)

當然了,各個公司可能也有在此基礎上擴充套件開發的自己使用的框架,但是很多原理的東西都是類似的,所以學習會一套框架,然後能夠舉一反三,幫助我們很快的接受新的知識。

           SSHStrutsStruts2的一些知識。所謂框架麼,其實就像我們蓋房子一樣,需要先搭建支架,然後再進行添磚加瓦,使之達到完美。而在軟體開發中,框架也是一樣的:就是將通用的程式碼進行封裝,使我們可以重複利用,達到了高效開發的效果。當然既然已經搭建好的框架,用到我們的系統中,我們就需要學習它,怎麼使我們自己獨有的程式碼和框架進行完美的結合。因為大家都在用這些優秀的框架,所以框架的學習,其實就是框架規範的學習。有了規範,有個約束,有了統一,才能更加有利於合作的開發。

    下邊先看一下Struts2總括知識:還是比較多的,三大框架之一麼:


這篇部落格先從總體的角度,進行對Struts2的進行巨集觀瞭解。看前三個小標題:

一,Struts2簡介:

       1,來由:Struts(金屬支架),在程式中表示起支撐作用的通用程式程式碼,Struts2是在Struts1框架的基礎上融合了WebWork優秀框架升級得到的。

       2,解釋:Struts2框架是一個輕量級的MVC流程框架,輕量級是指程式的程式碼不是很多,執行時佔用的資源不是很多,MVC流程框架就是說它是支援分層開發,控制資料的流程,從哪裡來,到那裡去,怎麼來,怎麼去的這樣一個框架;

               3,升級的改善:

                       Struts1的缺點:

  1. struts框架基於servlet進行開發的,所以servlet的問題在這個框架中都能體現出來
  2. struts框架的流程是固定的,想要擴充套件業務流程非常的不方便。
  1. 只支援動態檢視JSP展現資料,對於現在的SEO(搜尋引擎優化)支援不好

                  Struts2框架改善的地方:

  1. 核心基於Filter
  2. 流程可以動態擴充套件
  3. 多例建立物件
  4. 支援多種檢視展現技術(JSPFreemarkerVolicity

二,簡單對Struts2瞭解後,看一下如何進行

Strut2的搭建:

             1,新建Web專案:進行必備Jar包的拷貝,放到lib目錄以便專案的引用,這個我們通過apache官方網站下載後,可以參照裡邊的例項:

             2,拷貝框架的核心配置檔案Struts.xml,放到src目錄下,保留一個基本配置即可,這裡沒網的話需要我們自己配置一下xml檔案對應的DTD或者schema檔案,方便我們後期的編寫:

[html] view plain copy  print?
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">
  5. <struts>
  6. </struts>

          3,然後在我們的web.xml檔案中進行核心排程器的配置,這裡我們一般過濾所有訪問路徑即可:
[html] view plain copy  print?
  1. <!-- 配置框架的核心排程器 -->
  2.             <filter>
  3.                 <filter-name>struts2</filter-name>
  4.                 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  5.             </filter>
  6.             <filter-mapping>
  7.                 <filter-name>struts2</filter-name>
  8.                 <url-pattern>/*</url-pattern>
  9. </filter-mapping>


這樣我們的Struts2框架就算搭建出來了,我們就可以使用框架進行開發了,當然瞭如何使用框架,如何很得心應手的運用框架,還需要不斷的使用才行。

三,Struts2框架的原始碼分析,這也是我當時學習最頭疼,但是最讓我最感興趣的地方,因為這些原始碼才真正將一些神奇的功能進行了解答:(由於原始碼步驟過多,而且學習程度不夠深,這裡簡單說一下大概步驟)

            1Tomcat等伺服器啟動時,框架做的事情:——>反射建立了StrutsPrepareAndExecuteFilter物件,相當於使用Struts2的一個準備物件吧,——>然後建立了Dispatcher(核心排程器),——>通過此物件,載入物件預設的配置檔案(org/apache/struts2/default.properties),解析了預設的xml檔案(struts-default.xml等),——>並試圖載入我們編寫的xml檔案或者屬性檔案,——>並建立了我們需要用的PrepareOperations和ExecuteOperations物件。

          2,當我們訪問jsp頁面時,這裡會進行頁面編碼設定,反射建立我們的DefaultActionMapper物件,進行對URI的獲取,解析,封裝,由於是直接訪問的jsp頁面,也就是靜態的,直接跳轉,相對來說比較簡單。

          3,傳送actin請求時,這裡比較麻煩,——>利用DefaultActionMapper,進行對URI的獲取解析,例如訪問那個類,那個方法,是不是動態訪問(帶有!號),有什麼特殊處理(有.x  .y結尾等)。進行相關資訊的解析後,——>Dispatcher(核心排程器)反射建立StrutsActionProxyFactory代理物件工廠,這裡在反射建立我們要訪問的類時,——>模仿了動態代理,建立了代理物件StrutsActionProxy和擴充套件物件DefaultActionInvocation,——>擴充套件物件又建立了我們的目標物件工廠,——>然後反射建立了我們想要訪問的目標物件action。——>然後通過呼叫代理物件,執行擴充套件物件中的方法,——>執行我們框架預設的18個攔截器,——>反射呼叫訪問action方法,——>獲取執行後的結果result,——>最後進行相關介面或者action的指向。

這裡自我感覺是挺麻煩的,應該畫張圖更好,可是步驟太多,不知道圖得多大,所以簡單的檔案描述了一下重要的過程,忽略了很多。想說的是要重點掌握幾個檔案:Struts-default.xml配置檔案,default.properties預設的屬性檔案,dispatcher核心排程器,還有就是模擬動態代理訪問action的代理物件(StrutsActionProxy)和擴充套件物件(DefaultActionInvocation),當然瞭解越多越好,這樣才能幫助我們更好的掌握這個框架,更有利於我們對其進行靈活運用,擴充套件,更有修改……

           Struts2框架大致容貌是這樣的,我認為學習這些框架重點不是死記那些規範,那些規則,重要的是我們學習這個框架的思想,這樣我們遇到新的框架時才不至於束手無策。就像我們拆膝上型電腦時,重要的不是我們記住那麼部件在那,先裝那個,後裝那個;而是我們電腦的組成部分,電腦的組裝思路。因為每一個牌子的電腦的內部結構都是有差異的,但是每個牌子的電腦都會有cpu,cpu安裝都需要矽膠等等,知道原理本質,我們才能舉一反三,融會貫通。