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


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

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章檔案

          好友的BLOG

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

           

          1.       struts原理

          Struts中的控制層功能:

          1、 接受客戶端請(qǐng)求

          2、 調(diào)用M層模型組件執(zhí)行相應(yīng)的業(yè)務(wù)邏輯。

          3、 獲取M層業(yè)務(wù)邏輯的處理結(jié)果

          4、 根據(jù)處理結(jié)果選擇合適的視圖呈現(xiàn)給客戶端。

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

              該框架以 ActionServlet作為核心控制器,整個(gè)應(yīng)用由客戶端請(qǐng)求驅(qū)動(dòng)。當(dāng)客戶端向Web應(yīng)用發(fā)送請(qǐng)求時(shí),請(qǐng)求將被Struts 1的核心控制器 ActionServlet 攔截,ActionServlet根據(jù)請(qǐng)求決定是否需要調(diào)用業(yè)務(wù)邏輯控制器處理用戶請(qǐng)求,若需要,ActionServlet將該請(qǐng)求發(fā)送給對(duì)應(yīng)的業(yè)務(wù)邏輯控制器,業(yè)務(wù)邏輯控制器調(diào)用模型來(lái)處理用戶請(qǐng)求,當(dāng)處理完成后,其處理結(jié)果通過jsp呈現(xiàn)給用戶。

          ActionServlet接收到來(lái)自Servlet容器的客戶請(qǐng)求時(shí),具體處理步驟:

          1、根據(jù)瀏覽器是post還是get請(qǐng)求調(diào)用doPost()、doGet()方法,在其中調(diào)用ActionServlet的process()方法。

          2、Process()獲取RequestProcessor對(duì)象,調(diào)用RequestProcessor對(duì)象的process()方法

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

          4、 調(diào)用ActionForm bean的setter方法填充FormBean的屬性,然后調(diào)用FormBean的validate()方法,對(duì)表單數(shù)據(jù)的有效性進(jìn)行驗(yàn)證。

          5、 RequestProcessor的process()方法根據(jù)3中找到的<action>中的type屬性尋找Action bean對(duì)象(有則使用,無(wú)則創(chuàng)建),然后將FormBean對(duì)象,封裝的請(qǐng)求對(duì)象等信息發(fā)給找到的Action對(duì)象,Action bean調(diào)用自己的execute()方法處理。

          6、Action bean的execute()方法執(zhí)行完璧后,返回一個(gè)ActionForward對(duì)象,又回到RequestProcessor對(duì)象的process()方法,process方法將根據(jù)ActionForward請(qǐng)求重新定向到指定的頁(yè)面。

          2.       Struts1的不足

          (1)支持的表現(xiàn)技術(shù)單一。只支持jsp。

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

          (3)代碼嚴(yán)重依賴Servlet API,屬于代碼入侵式設(shè)計(jì)。在處理方法中,包含大量的Struts 1 API,如: ActionMapping、ActionForm、ActionForward等,一旦系統(tǒng)重構(gòu),離開struts1時(shí),這些代碼將毫無(wú)用處。

          3.       webwork簡(jiǎn)介

          它主要包括兩部:核心控制器ServletDispatcher,由框架提供;業(yè)務(wù)邏輯控制器,由程序員控制。與struts1相比,他完全從于servlet分離,更容易測(cè)試。處理流程:當(dāng)用戶向web應(yīng)用發(fā)送一個(gè)請(qǐng)求時(shí),該請(qǐng)求經(jīng)過webwork過濾器過濾,由核心控制器攔截,若請(qǐng)求需要webwork的業(yè)務(wù)邏輯控制器處理,該控制器則調(diào)用Action映射器,該映射器將用戶請(qǐng)求轉(zhuǎn)發(fā)到對(duì)應(yīng)的業(yè)務(wù)邏輯控制器。主要,這里的業(yè)務(wù)邏輯控制器并不是開發(fā)者實(shí)現(xiàn)的控制器,而是webwork創(chuàng)建的控制器代理。

          在創(chuàng)建控制器代理時(shí),webwork需要得到開發(fā)者定義的xwork.xml配置文件,控制器代理以用戶實(shí)現(xiàn)的控制器為目標(biāo),以攔截器鏈中的攔截器作為處理。

          當(dāng)開發(fā)者自己的控制器處理完請(qǐng)求后,返回的只是普通的字符串,該字符串對(duì)應(yīng)到指定的視圖資源。指定的視圖資源經(jīng)過攔截器鏈的處理后,生成對(duì)客戶端的相應(yīng)輸出。

          它的優(yōu)勢(shì):

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

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

          3)      支持更多的表現(xiàn)層技術(shù),有更好的適應(yīng)性。

          4.struts2簡(jiǎn)介

          從總體上講,struts2是以webwork思想為核心,同樣適用攔截器做為處理,以用戶的業(yè)務(wù)邏輯控制器做為目標(biāo),創(chuàng)建一個(gè)控制器代理。控制器代理負(fù)責(zé)處理用戶請(qǐng)求,處理請(qǐng)求時(shí)調(diào)用業(yè)務(wù)邏輯控制器的execute方法。具體處理流程如下:

          (1)瀏覽器發(fā)送請(qǐng)求。

          (2)核心控制器FilterDispatcher根據(jù)請(qǐng)求決定調(diào)用合適的Action。

          (3)webwork的攔截器鏈自動(dòng)對(duì)請(qǐng)求應(yīng)用通用功能。

          (4)回調(diào)業(yè)務(wù)邏輯控制器Action的execute方法,該方法先獲取用戶請(qǐng)求參數(shù),然后調(diào)用模型層進(jìn)行數(shù)據(jù)處理。

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

          5.struts1和strut2對(duì)比

          (1)在實(shí)現(xiàn)類方面的對(duì)比:struts1繼承action累,struts2可以實(shí)現(xiàn)一個(gè)接口。

          (2)線程模式方面對(duì)比:struts1是單例模式,要特別注意線程安全;struts2每一個(gè)請(qǐng)求都產(chǎn)生一個(gè)實(shí)例,不存在線程安全問題。

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

          (4)封裝請(qǐng)求參數(shù)的對(duì)比:struts1必須使用一個(gè)actionForm來(lái)封裝請(qǐng)求參數(shù);struts2直接使用Action屬性來(lái)封裝用戶請(qǐng)求參數(shù)。

          6.開發(fā)流程:

          1.       創(chuàng)建web應(yīng)用。

          2.       增加struts2功能。

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

          2) 將相關(guān)jar包復(fù)制到web-info/lib下;

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

          3.       實(shí)現(xiàn)控制器類。

          控制器類是一個(gè)包含execute方法的pojo類,其屬性與jsp表單屬性對(duì)應(yīng)。

          struts2的攔截機(jī)制負(fù)責(zé)解析用戶請(qǐng)求中的參數(shù),并將這些參數(shù)賦值給Action的屬性。

          4.       配置Action。

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

          結(jié)果與視圖資源的映射關(guān)系。

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

          posted on 2009-06-09 17:15 楊愛友 閱讀(328) 評(píng)論(0)  編輯  收藏 所屬分類: java相關(guān)技術(shù)
          美麗涵涵童裝店
          親,說我博客名字,給你們打折!
          主站蜘蛛池模板: 银川市| 兴安盟| 吉木萨尔县| 饶河县| 莱西市| 襄城县| 大同市| 乌海市| 马尔康县| 吴江市| 邵阳县| 兴隆县| 沙坪坝区| 乌海市| 高安市| 青川县| 彭阳县| 白沙| 康保县| 江都市| 晋中市| 泰兴市| 凌海市| 邮箱| 巩留县| 玉溪市| 万宁市| 铜山县| 漳州市| 河西区| 靖西县| 霍山县| 吉木萨尔县| 海原县| 肇庆市| 三都| 云霄县| 永善县| 集安市| 凭祥市| 中卫市|