隨筆-3  評論-2  文章-1  trackbacks-0

              
                 在web.xml文件里配置一個派遣器ServletDispatcher,以接收所有以action結尾的url請求。并進行http請求調度處理.
          <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>

          當ServletDispatche調度器接收到一個.action結尾的請求時,會調用ServletDispatche類的service方法進行處理,該方法最終是創建一個ActionProxy對象,并通過執行ActionProxy中的execute方法來
          調用所請求的Action的execute方法.之前要執行一些方法來創造條件:創建Action上下文===>從request中獲得值堆棧stack===>創建ActionProxyFactory對象,并初始化一個DefaultActionProxy對象====>通過DefaultAction的構造函數調用ConfigurationManager獲得當前請求的Action在xwork.xml中的配置信息====>DefaultActionProxy中的prepare方法通過創建一個ActionInvocation對象來實現對請求action的調用。

          AroundInterceptor攔截機-->
          DefaultActionInvocation中有一個數組維護了攔截機的執行順序:
          1、StaticParametersInterceptor, 2、ParametersInterceptor, 3、WebWorkConversionErrorInterceptor
          4、ModelDrivenInterceptor 5、ExternalReferencesInterceptor
          6、StaticParametersInterceptor 7、parametersInterceptor, 8、WebWorkConversionErrorInterceptor
          9、ModelDrivenInterceptor 10、ValidationInterceptor
          注:這里1、2、3、4攔截機執行了兩次,為什么會執行兩次呢?
          疑問:這里的執行順序和webwork-default.xml中的<interceptors>配置有何關聯?

          Action ---> 根據Action實現相應的Action,ModelDriven接口調用基類的
          ParametersInterceptor中:
                final Map parameters = ActionContext.getContext().getParameters();

          從AroundInterceptor的context中取出頁面提交字段的名稱和值,然后它會先把stack.pus(modelDriven.getModel()); modelDriven.getModel()放到CompoundRoot中(CompounRoot是一個ArrayList)上面提到有四個攔截機執行兩次,因為第一次要push進去一個空的對象,方便填值,第二次放的是填充好的對象。也就是Action中getModel()的對象。把值從parameters 設置到OgnlValueStack的CompoundRoot的第一個下標中的Action里的getModel()對象里code:stack.setValue(name, value);name對應的是getModel()對應的字段,value為要填充的值.

          posted on 2005-12-06 23:12 java驛館 閱讀(494) 評論(0)  編輯  收藏 所屬分類: J2EE隨談
          主站蜘蛛池模板: 慈利县| 裕民县| 康平县| 嫩江县| 潞西市| 汝阳县| 民丰县| 乳山市| 汉中市| 宣化县| 沂源县| 大邑县| 边坝县| 镇巴县| 屏东县| 嘉义市| 沈阳市| 汉沽区| 时尚| 寿光市| 塔河县| 麻阳| 岑溪市| 当涂县| 花莲市| 仙桃市| 朝阳县| 景洪市| 新兴县| 嘉禾县| 道真| 阜宁县| 泸水县| 无锡市| 定结县| 华亭县| 永丰县| 南漳县| 广西| 丹凤县| 宜良县|