posts - 35,  comments - 6,  trackbacks - 0
          一、WebWork的框架初始化過程
          利用WebWork做的項目,在服務器啟動時完成WebWork的框架初始化。具體是通過
          Web.xml中配置好的FilterDispatcher過濾器中的init(FilterConfig filterConfig)方法完成。
          并且web.xml中配置好FilterDispatcher的映射,當用戶用映射好的結尾資源請求瀏覽器時,FillterDispather會進行請求處理.
                 具體實現是通過以下步驟:
          1、    通過FilterDispatcher中的
          public void init(FilterConfig filterConfig) throws ServletException方法,進行框架的初始化
          2、    Init方法又同過調用DispatcherUtils類的
          public static void initialize(ServletContext servletContext)方法創建
          DispatcherUtils實例,同時間接調用DispatcherUtils類的
          protected void init(ServletContext servletContext)方法初始化Configuration
          配置,創建對象創建的工廠ObjectFactoryObjectTypeDeterminer
          至此完成WebWork框架的初始化。
          二、WebWork的用戶請求處理過程
          所有以web.xml中映射FilterDispatcher結尾的服務請求將由FilterDispatcher進行處理。 1、從用戶請求的服務名中解析出對應Action的名稱。
             具體完成是:戶按webwork規則請求時,服務器會調用FilterDispatcher的doFilter方法,完成第二步的內容。
                 2、遍歷 HttpServletRequest、HttpSession、ServletContext 中的數據,并將其復制到
          Webwork的Map中,為下一步創建Action事例打下基礎。
          具體完成是:過調用DispatcherUtils的serviceAction方法中的
          Map extraContext = createContextMap(request, response, mapping, context);完成以上信息的封裝。
                 3、以上一步封裝好的信息為參數,調用 ActionProxyFactory創建對應的 ActionProxy實例。ActionProxyFactory 將根據 Xwork 配置文件(xwork.xml)中的設定,創建ActionProxy實例,ActionProxy中包含了 Action的配置信息(包括 Action名稱,對應實現類等等)。
                 具體完成是:通過
          ActionProxy proxy = ActionProxyFactory.getFactory().createActionProxy(namespace, name, extraContext, true, false);//創建動態代理
                 DefaultActionProxyFactory實現ActionProxyFactory的createActionProxy方法,返回new DefaultActionProxy(namespace, actionName, extraContext, true, true);
                 DefaultActionProxy是對ActionProxy的默認實現,
          通過DefaultActionProxy類的DefaultActionProxy(namespace, actionName, extraContext, true, true)構造方法實例化DefaultActionProxy,同時得到用戶請求的actionName及namespace,
          并通過
          config = ConfigurationManager.getConfiguration().getRuntimeConfiguration().getActionConfig(namespace, actionName);
          ConfigurationManager
          publicstaticsynchronized Configuration getConfiguration() {
                  if (configurationInstance == null) {
                      configurationInstance = new DefaultConfiguration();
                      try {
                          configurationInstance.reload();
                      } catch (ConfigurationException e) {
                          configurationInstance = null;
                          throw e;
                      }
                  } else {
                      conditionalReload();
                  }
           
                  returnconfigurationInstance;
          }    
          1.   完成對xwork.xml(具體操作類是XmlConfigurationProvider)配置信息的讀取。獲得與此次請求相關的ActionConfig
           
                 4、ActionProxy創建對應的Action實例,并根據配置進行一系列的處理程序。
                 通過DefaultActionProxy類的
          invocation = ActionProxyFactory.getFactory().createActionInvocation(this, extraContext);
          //通過createActionInvocation方法創建動作調用類ActionInvocation,處理被Action調用的方法
          privatevoid resolveMethod() {
                  // if the method is set to null, use the one from the configuration
                  // if the one from the configuration is also null, use "execute"
                  if (!TextUtils.stringSet(this.method)) {
                      this.method = config.getMethodName();
                      if (!TextUtils.stringSet(this.method)) {
                          this.method = "execute";
                      }
                  }
          }
          然后調用DispatcherUtilsserviceAction方法中的
          if (mapping.getResult() != null) {
                          Result result = mapping.getResult();
                          result.execute(proxy.getInvocation());
                      } else {
                          proxy.execute();
          }
           
          完成用戶的最終要執行的action方法。
          public String execute() throws Exception {
                  ActionContext nestedContext = ActionContext.getContext();
                  ActionContext.setContext(invocation.getInvocationContext());
           
                  String retCode = null;
           
                  try {
                      retCode = invocation.invoke();
                  } finally {
                      if (cleanupContext) {
                          ActionContext.setContext(nestedContext);
                      }
                  }
           
                  return retCode;
              }
          最終處理ActionContext對象
          Action調用提交給ActionInvocation處理
           
          三、WebWork的執行流程圖
           
          posted on 2009-07-08 11:09 NG 閱讀(236) 評論(0)  編輯  收藏

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


          網站導航:
           
          <2009年7月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          常用鏈接

          留言簿(1)

          隨筆檔案(35)

          文章分類(5)

          文章檔案(2)

          新聞檔案(5)

          java link

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 黄山市| 永和县| 措勤县| 微博| 苗栗市| 特克斯县| 贵阳市| 南皮县| 镇远县| 本溪| 虎林市| 灵宝市| 涟源市| 杂多县| 鄂伦春自治旗| 武强县| 普兰店市| 祁东县| 甘南县| 枞阳县| 历史| 都江堰市| 泰安市| 明水县| 道真| 石阡县| 四平市| 威宁| 明溪县| 荃湾区| 平昌县| 沁源县| 武汉市| 邯郸县| 永兴县| 墨脱县| 武川县| 德惠市| 双鸭山市| 兰考县| 沙坪坝区|