美麗涵涵童裝店--說我博客名字,給你們打折!
          隨筆 - 82  文章 - 266  trackbacks - 0
          <2009年6月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011


          點擊這里給楊愛友發消息
          美麗涵涵童裝店
          說我博客名字,給你們打折!

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章檔案

          好友的BLOG

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

           

          1.       struts原理

          Struts中的控制層功能:

          1、 接受客戶端請求

          2、 調用M層模型組件執行相應的業務邏輯。

          3、 獲取M層業務邏輯的處理結果

          4、 根據處理結果選擇合適的視圖呈現給客戶端。

          Contrler層核心控制組件是:ActionServlet,繼承javax.Servlet.Http.HttpServlet,并實現了init(),doGet()、doPost()、destroy()等Servlet生命周期所用到的方法。還添加了一個process(),它本身不復雜,但它會調用其他的復雜方法。

              該框架以 ActionServlet作為核心控制器,整個應用由客戶端請求驅動。當客戶端向Web應用發送請求時,請求將被Struts 1的核心控制器 ActionServlet 攔截,ActionServlet根據請求決定是否需要調用業務邏輯控制器處理用戶請求,若需要,ActionServlet將該請求發送給對應的業務邏輯控制器,業務邏輯控制器調用模型來處理用戶請求,當處理完成后,其處理結果通過jsp呈現給用戶。

          ActionServlet接收到來自Servlet容器的客戶請求時,具體處理步驟:

          1、根據瀏覽器是post還是get請求調用doPost()、doGet()方法,在其中調用ActionServlet的process()方法。

          2、Process()獲取RequestProcessor對象,調用RequestProcessor對象的process()方法

          3、Process()讀取struts-config.xml,在其中查找<action>子元素,查找的條件是:用戶請求的URI與action元素的path屬性值一樣,找到后確定name屬性,根據name找到<form-bean>元素,再根據action元素的name匹配值找到相應的ActionForm bean。

          4、 調用ActionForm bean的setter方法填充FormBean的屬性,然后調用FormBean的validate()方法,對表單數據的有效性進行驗證。

          5、 RequestProcessor的process()方法根據3中找到的<action>中的type屬性尋找Action bean對象(有則使用,無則創建),然后將FormBean對象,封裝的請求對象等信息發給找到的Action對象,Action bean調用自己的execute()方法處理。

          6、Action bean的execute()方法執行完璧后,返回一個ActionForward對象,又回到RequestProcessor對象的process()方法,process方法將根據ActionForward請求重新定向到指定的頁面。

          2.       Struts1的不足

          (1)支持的表現技術單一。只支持jsp。

          (2)與Servlet API 嚴重耦合,難于測試。在Struts1的邏輯控制器內充滿了大量的servlet API,尤其是HttpServletRequest 和 HttpServletResponse 這兩個參數,需要通過web容器來實例化,非常難于測試。

          (3)代碼嚴重依賴Servlet API,屬于代碼入侵式設計。在處理方法中,包含大量的Struts 1 API,如: ActionMapping、ActionForm、ActionForward等,一旦系統重構,離開struts1時,這些代碼將毫無用處。

          3.       webwork簡介

          它主要包括兩部:核心控制器ServletDispatcher,由框架提供;業務邏輯控制器,由程序員控制。與struts1相比,他完全從于servlet分離,更容易測試。處理流程:當用戶向web應用發送一個請求時,該請求經過webwork過濾器過濾,由核心控制器攔截,若請求需要webwork的業務邏輯控制器處理,該控制器則調用Action映射器,該映射器將用戶請求轉發到對應的業務邏輯控制器。主要,這里的業務邏輯控制器并不是開發者實現的控制器,而是webwork創建的控制器代理。

          在創建控制器代理時,webwork需要得到開發者定義的xwork.xml配置文件,控制器代理以用戶實現的控制器為目標,以攔截器鏈中的攔截器作為處理。

          當開發者自己的控制器處理完請求后,返回的只是普通的字符串,該字符串對應到指定的視圖資源。指定的視圖資源經過攔截器鏈的處理后,生成對客戶端的相應輸出。

          它的優勢:

          1)      Action沒有與Servlet API 耦合,易于測試;

          2)      )Action無需與WebWork耦合,代碼重用率高;

          3)      支持更多的表現層技術,有更好的適應性。

          4.struts2簡介

          從總體上講,struts2是以webwork思想為核心,同樣適用攔截器做為處理,以用戶的業務邏輯控制器做為目標,創建一個控制器代理。控制器代理負責處理用戶請求,處理請求時調用業務邏輯控制器的execute方法。具體處理流程如下:

          (1)瀏覽器發送請求。

          (2)核心控制器FilterDispatcher根據請求決定調用合適的Action。

          (3)webwork的攔截器鏈自動對請求應用通用功能。

          (4)回調業務邏輯控制器Action的execute方法,該方法先獲取用戶請求參數,然后調用模型層進行數據處理。

          (5)處理完后返回瀏覽器。

          5.struts1和strut2對比

          (1)在實現類方面的對比:struts1繼承action累,struts2可以實現一個接口。

          (2)線程模式方面對比:struts1是單例模式,要特別注意線程安全;struts2每一個請求都產生一個實例,不存在線程安全問題。

          (3)servlet依賴程度對比:struts1的Action依賴于servlet API,struts2與servlet完全分離,更易測試。

          (4)封裝請求參數的對比:struts1必須使用一個actionForm來封裝請求參數;struts2直接使用Action屬性來封裝用戶請求參數。

          6.開發流程:

          1.       創建web應用。

          2.       增加struts2功能。

          1) 在web.xml中配置struts2核心Filter;

          2) 將相關jar包復制到web-info/lib下;

          3) 在web.xml/classes下增加struts.xml配置文件。

          3.       實現控制器類。

          控制器類是一個包含execute方法的pojo類,其屬性與jsp表單屬性對應。

          struts2的攔截機制負責解析用戶請求中的參數,并將這些參數賦值給Action的屬性。

          4.       配置Action。

          將業務邏輯控制器Action配置到struts.xml中,該配置文件還定義了處理

          結果與視圖資源的映射關系。

          5.       增加視圖資源,如error.jsp、welcome.jsp等。

          posted on 2009-06-09 17:15 楊愛友 閱讀(338) 評論(0)  編輯  收藏 所屬分類: java相關技術
          美麗涵涵童裝店
          親,說我博客名字,給你們打折!
          主站蜘蛛池模板: 自治县| 西乌珠穆沁旗| 陆丰市| 辽阳市| 隆林| 云浮市| 社会| 锦州市| 尉氏县| 油尖旺区| 贵溪市| 宕昌县| 怀宁县| 蓝山县| 永川市| 商丘市| 郧西县| 定南县| 巴林左旗| 建平县| 泽库县| 张掖市| 班玛县| 昌乐县| 乡宁县| 千阳县| 蚌埠市| 拜城县| 临泉县| 吴堡县| 凤台县| 云南省| 库尔勒市| 沙洋县| 西畴县| 读书| 乐亭县| 江陵县| 合作市| 张北县| 法库县|