隨筆-3  評(píng)論-2  文章-1  trackbacks-0

              
                 在web.xml文件里配置一個(gè)派遣器ServletDispatcher,以接收所有以action結(jié)尾的url請(qǐng)求。并進(jìn)行http請(qǐng)求調(diào)度處理.
          <servlet>
             <servlet-name></servlet-name>
             <servlet-class>com.opensymphony.webwork.dispatcher.ServletDispatcher</servlet-class>
          </servlet>
          <servlet-mapping>
             <servlet-name>webwork</servlet-name>
             <url-pattern>*.action</url-pattern>
          </servlet-mapping>

          當(dāng)ServletDispatche調(diào)度器接收到一個(gè).action結(jié)尾的請(qǐng)求時(shí),會(huì)調(diào)用ServletDispatche類的service方法進(jìn)行處理,該方法最終是創(chuàng)建一個(gè)ActionProxy對(duì)象,并通過執(zhí)行ActionProxy中的execute方法來
          調(diào)用所請(qǐng)求的Action的execute方法.之前要執(zhí)行一些方法來創(chuàng)造條件:創(chuàng)建Action上下文===>從request中獲得值堆棧stack===>創(chuàng)建ActionProxyFactory對(duì)象,并初始化一個(gè)DefaultActionProxy對(duì)象====>通過DefaultAction的構(gòu)造函數(shù)調(diào)用ConfigurationManager獲得當(dāng)前請(qǐng)求的Action在xwork.xml中的配置信息====>DefaultActionProxy中的prepare方法通過創(chuàng)建一個(gè)ActionInvocation對(duì)象來實(shí)現(xiàn)對(duì)請(qǐng)求action的調(diào)用。

          AroundInterceptor攔截機(jī)-->
          DefaultActionInvocation中有一個(gè)數(shù)組維護(hù)了攔截機(jī)的執(zhí)行順序:
          1、StaticParametersInterceptor, 2、ParametersInterceptor, 3、WebWorkConversionErrorInterceptor
          4、ModelDrivenInterceptor 5、ExternalReferencesInterceptor
          6、StaticParametersInterceptor 7、parametersInterceptor, 8、WebWorkConversionErrorInterceptor
          9、ModelDrivenInterceptor 10、ValidationInterceptor
          注:這里1、2、3、4攔截機(jī)執(zhí)行了兩次,為什么會(huì)執(zhí)行兩次呢?
          疑問:這里的執(zhí)行順序和webwork-default.xml中的<interceptors>配置有何關(guān)聯(lián)?

          Action ---> 根據(jù)Action實(shí)現(xiàn)相應(yīng)的Action,ModelDriven接口調(diào)用基類的
          ParametersInterceptor中:
                final Map parameters = ActionContext.getContext().getParameters();

          從AroundInterceptor的context中取出頁面提交字段的名稱和值,然后它會(huì)先把stack.pus(modelDriven.getModel()); modelDriven.getModel()放到CompoundRoot中(CompounRoot是一個(gè)ArrayList)上面提到有四個(gè)攔截機(jī)執(zhí)行兩次,因?yàn)榈谝淮我猵ush進(jìn)去一個(gè)空的對(duì)象,方便填值,第二次放的是填充好的對(duì)象。也就是Action中g(shù)etModel()的對(duì)象。把值從parameters 設(shè)置到OgnlValueStack的CompoundRoot的第一個(gè)下標(biāo)中的Action里的getModel()對(duì)象里code:stack.setValue(name, value);name對(duì)應(yīng)的是getModel()對(duì)應(yīng)的字段,value為要填充的值.

          posted on 2005-12-06 23:12 java驛館 閱讀(494) 評(píng)論(0)  編輯  收藏 所屬分類: J2EE隨談

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 华容县| 清新县| 微山县| 遵义县| 绥江县| 湖州市| 海晏县| 廉江市| 梨树县| 泸溪县| 板桥市| 新丰县| 仲巴县| 囊谦县| 德阳市| 明星| 彭州市| 旬邑县| 阿拉善右旗| 怀来县| 双鸭山市| 河南省| 桐柏县| 太仆寺旗| 阳泉市| 江山市| 额济纳旗| 定兴县| 商南县| 班戈县| 福安市| 股票| 黄石市| 诸城市| 玉门市| 滕州市| 紫云| 滨海县| 鹤庆县| 澳门| 斗六市|