模擬struts架構

總體來說,MVC架構現在對於做開發的我們來說已經是達成共識了,沒有誰還在用那種兩層的結構來建立平臺爲別人提供服務了。反而從參與的項目來說,架構會遠比MVC還要複雜的多。現在想對struts進行一下簡單模擬,以便對此框架進一步理解。

 

這裏的模擬主要用到Servlet的知識。

 

 

1、理解一下struts在我們開發中的作用:

(通常)struts有一個配置文件struts.xml,頁面的請求(可能是.action的請求)首先會在web.xml文件中根據對struts的跳轉配置(這個配置就是一個servlet)在struts.xml中找到相應的action,然後找到相應的類和類中相應的方法,執行完成後又根據執行返回的結果到struts.xml中找相應的Action,然後返回到對應結果的頁面或做其它動作。

也就是說struts在其中起到了一個控制作用,這個控制作用正是我們想理解和模擬的。

 

2、我們在模擬時需要做的事情:

     1)在web.xml中struts需要配置的servlet應該由我們來指定,這樣後面的控制工作才能由我們來進行。

     2)struts.xml文件的內容我們也可以自己定義,其中的內容不過是xml元素,我們在模擬時簡單的由Properties文件進行模擬。

     3)命名方式及執行的方法也可以進行模擬,在接收到請求後到web.xml和Properties文件進行相應的配置查詢,然後找到相應的類和方法(這個方法還可以叫做execute),將業務處理完成後返回一個success或fail( 這個返回結果我們也會在配置文件中配置達到整個流程儘量的像struts)。

 

這基本就是我們要達的的目的。

 

3、實踐:

    1)先來看下我做好的v0.1的工程結構:

 

       順便說一下,這裏利用了myeclipse的web project。其實完全可以自己建立一個類似的目錄結構來進行而完全不使用ide,不過那樣的話,你需要兩個jar包作支持:

       servlet-api.jar

       jsp-api.jar

       當然這個完全就是爲了使用servlet所需要的。

 

      在這裏你可以看到整個過程所涉及的文件及方法:

      web.xml文件,Propertier.properties文件,及兩個相應的.jsp文件(用於測試)。

 

     

 

    2)在index.jsp文件中的內容:

 

      只是一個提交請求的輸入框。

 

     

 

    3)result.jsp文件中的內容:

      在這裏我希望取到從index.jsp中提交到後臺的username。

 

     

 

 

      4)web.xml文件中的內容:

 

       在這裏你需要規劃好你的servlet類是哪一個,工程的代碼結構會是什麼樣,不過這些都不重要,重要的是你的servlet-class要與你使用的servlet路徑一致。這裏說明一點,我們整個模擬過程,只用到一個servlet類。

 

     

 

 

 

 

      5)properties.properties文件內容:

       注意,這裏的簡單模擬是這樣的:index要與index.jsp中from中的method相應對應,而.action只是用於在web.xml中進行請求地址匹配的。

      

 

 

 

      6) 看下ServletAction類中的內容:

 

       大概解釋下:在加載web.xml時,會自動將以.action結尾的請求發送到這個類中來,這樣就開始初始化init方法,在這裏我們將properties.properties文件加載到內存且以鍵值對的方式進行保存,便於後續對相應類和跳轉頁面的取用。然後在service方法中,我們根據post中的的請求(index.action)在properties.properties文件中找到相應的類,然後利用java的反射機制將對應的action類進行實例化。然後就執行我們在action類中定義的execute方法。執行完成execute方法後,接收到一個返回對象,這個對象是用來進行跳轉控制的類。

 

      

 

 

      7)看下IndexAction類:

 

        在這裏我們模擬了struts類中默認執行的方法,只不過我們是指定執行此方法的,如果進一步修改也是可以實現這一機制的。另外注意一點,struts會繼續相應的類,我們的也不例外,我們定義了自己的Actions類,這樣利於我們對action類的擴展需要(及需要執行的方法)。

 

 

      

 

 

      對於繼續的類比較簡單,就在這裏一同看下:

 

     

 

      8)最後一個需要的類,這個類用於根據execute方法執行完成後的結果進行相應的跳轉控制:

 

        這裏有一個兩個輸入參數的構造方法,這裏需要參考上一步中execute的執行,如果是成功的話,自然是需要執行跳轉的,如果不成功當然不能將傳遞的參數通過後臺傳遞到頁面去,所以定義了一個isDirect變量,會根據這個變量的變化進行相應的控制動作。

 

      

 

 

 

 

 

結論:

整個模擬的過程很簡單,但真實的讓我們感覺到了struts的實現原理的機制。從這裏的實現來看,感受最深的是struts使用配置文件進行邏輯控制的過程。框架其實就是那麼一回事兒,但真正的學習和使用時我們可以利用它的可藉助於它的易用性來爲我們的開發加速。

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章