隨筆 - 7, 文章 - 4, 評論 - 2, 引用 - 0
          數(shù)據(jù)加載中……

          Front Controller

          a. 問題

            MVC給出了一個整個應(yīng)用的松散的耦合架構(gòu)。現(xiàn)在來看一下這樣一個經(jīng)常發(fā)生的情況。在某一個應(yīng)用中,用戶看到的視圖和他所做的操作密切相關(guān)。這是一些具有高度交互性的頁面,而這些頁面之間含有高度的依賴性。在沒有任何模式的時候,這個應(yīng)用只是一個許多獨立的頁面的集合,維護和擴展變得異常困難。

            § 當(dāng)一個頁面移動后,其他含有這個頁面鏈接的文件,都必須修改。

            § 當(dāng)有一系列頁面需要口令保護時,許多配置文件需要修改,或者頁面需要包含新的標(biāo)記。

            § 當(dāng)一個頁面需要一個新的表示層時,頁面中的標(biāo)記要被重新安排。

            當(dāng)這個系統(tǒng)變得復(fù)雜時,這些問題將變得更糟。如果用MVC來解決的話,就變成一個如何管理控制器和視圖之間交互的問題。

            b. 建議的解決方法

            前臺控制模式可以解決這個問題。這個模式中,所有的請求都被傳送到一個對象中。這個主要的對象將處理所有的請求,決定以后顯示那一個視圖,以及實現(xiàn)必要的安全需求。對于把視圖顯示以及其他功能實現(xiàn)集中到一個主要的對象中,將使修改變得很容易,對應(yīng)用的修改,可以在所有視圖中反映出來。

            c. 要點

            § 這個模式對于需要在多個含有動態(tài)數(shù)據(jù)的頁面之間進(jìn)行復(fù)雜導(dǎo)航的系統(tǒng)來說,是很有效的。

            § 這個模式對于要在所有頁面中都包含模板,轉(zhuǎn)換等的應(yīng)用來說,也是很有效的。

            § 由于視圖的選擇集中在前端控制器上,因此,視圖的導(dǎo)航變得更加容易理解和便于配置。

            § 視圖重用和變更會更加容易。

            § 視圖之間的復(fù)雜交互,使得控制器變得復(fù)雜。從而,當(dāng)應(yīng)用發(fā)展的時候,控制器將變得難以維護。不過,大部分情況下可以用XML映射來解決。

            § 實現(xiàn)應(yīng)用要求的安全性檢驗變得很簡單。

            § 這個模式不適合小型的,只顯示靜態(tài)內(nèi)容的應(yīng)用。

            d. 樣例

            § RequestMappings.xml 文件映射了傳入的請求,處理器以及下一個頁面。



          useRequestHandler="true"
          requiresSecurityCheck="true" nextScreen="screen2.jsp">



          com.blah1.blah2.blah3.request1Handler








            以上這個文件是控制器的指定配置,控制器的代碼如下:

            § FrontControllerImpl.java 利用上面的XML實現(xiàn)了控制器

          // all required imports
          // exceptions to be caught appropriately wherever applicable

          public class FrontControllerImpl extends HttpServlet {

          // all required declarations, definitions
          private HashMap requestMappings;

          public void init() {
          // load the mappings from XML file into the hashmap
          }

          public void doPost(HttpServletRequest request,

          HttpServletResponse response)
          throws IOException, ServletException

          {
          doGet(request, response);
          }

          public void doGet(HttpServletRequest request, HttpServletResponse response)
          throws IOException, ServletException {
          String currentPage= request.getPathInfo();
          // get all mapping info for "currentPage" from the hashmap
          // if "securityCheckRequired = true", do the security check
          // if "useRequestHandler = true", pass on the incoming request to the specified handler
          // forward the results to the given "nextScreen"
          }
          }

            用這種方法實現(xiàn)的控制器將很容易維護,當(dāng)應(yīng)用有新的變動的時候,只要修改XML文件就能解決了。前臺控制模式將使在視圖和控制器之前有復(fù)雜交互的J2EE應(yīng)用變得簡單。

          posted on 2005-01-30 12:52 jacky 閱讀(285) 評論(0)  編輯  收藏 所屬分類: Design Patten


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 鄂尔多斯市| 盘山县| 镇安县| 华阴市| 承德县| 龙州县| 大邑县| 彭阳县| 南宁市| 古浪县| 阜阳市| 页游| 海丰县| 绥德县| 墨脱县| 无为县| 屯留县| 南开区| 商南县| 英吉沙县| 赞皇县| 克拉玛依市| 彩票| 盈江县| 新乐市| 大埔县| 佛冈县| 博罗县| 海兴县| 郓城县| 运城市| 漳州市| 上蔡县| 阳江市| 富蕴县| 万州区| 安陆市| 营山县| 乐山市| 磐安县| 若尔盖县|