Struts對多配置和模塊化的支持 (ZT)

          Posted on 2007-08-17 16:25 bluoy 閱讀(194) 評論(0)  編輯  收藏

          我們知道,在Struts 1.0中,我們只能在web.xml中為ActionServlet指定一個配置文件,這對于我們這些網(wǎng)上的教學(xué)例子來說當(dāng)然沒什么問題,但是在實際的應(yīng)用開發(fā)過程中,可能會有些麻煩。因為許多開發(fā)人員都可能同時需要修改配置文件,但是配置文件只能同時被一個人修改,這樣肯定會造成一定程度上的資源爭奪,勢必會影響開發(fā)效率和引起開發(fā)人員的抱怨。

          在Struts 1.1中,為了解決這個并行開發(fā)的問題,提出了兩種解決方案:

          1. 多個配置文件的支持
          2. 模塊的支持

           

          支持多個配置文件,是指你能夠為ActionServlet同時指定多個xml配置文件,文件之間以逗號分隔,比如Struts提供的MailReader演示例子中就采用該種方法。

          
                      <!-- Action Servlet Configuration -->
                      <servlet>
                      <servlet-name>action</servlet-name>
                      <servlet-class>
                          org.apache.struts.action.ActionServlet
                      </servlet-class> <init-param> <param-name>config</param-name> <param-value>
          /WEB-INF/struts-config.xml,
          /WEB-INF/struts-config-registration.xml
          </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>

          這種方法可以很好地解決修改沖突的問題,不同的開發(fā)人員可以在不同的配置文件中設(shè)置自己的Action、ActionForm等等(當(dāng)然不是說每個開發(fā)人員都需要自己的配置文件,可以按照系統(tǒng)的功能模塊進(jìn)行劃分)。但是,這里還是存在一個潛在的問題,就是可能不同的配置文件之間會產(chǎn)生沖突,因為在ActionServlet初始化的時候這幾個文件最終還是需要合并到一起的。比如,在struts-config.xml中配置了一個名為success的<forward>,而在struts-config-registration.xml中也配置了一個同樣的<forward>,那么執(zhí)行起來就會產(chǎn)生沖突。

          為了徹底解決這種沖突,Struts 1.1中引進(jìn)了模塊(Module)的概念。一個模塊就是一個獨立的子系統(tǒng),你可以在其中進(jìn)行任意所需的配置,同時又不必?fù)?dān)心和其它的配置文件產(chǎn)生沖突。因為前面我們講過,ActionServlet是將不同的模塊信息保存在不同的ModuleConfig對象中的。要使用模塊的功能,需要進(jìn)行以下的準(zhǔn)備工作:

          1、為每個模塊準(zhǔn)備一個配置文件

          2、配置web.xml文件,通知控制器

          決定采用多個模塊以后,你需要將這些信息告訴控制器,這需要在web.xml文件進(jìn)行配置。下面是一個典型的多模塊配置:

          
                      <init-param>
                      <param-name>config</param-name>
                      <param-value>
                          /WEB-INF/struts-config.xml
                      </param-value> </init-param> <init-param> <param-name>config/customer</param-name> <param-value>
                          /WEB-INF/struts-config-customer.xml
                      </param-value> </init-param> <init-param> <param-name>config/order</param-name> <param-value>
                          /WEB-INF/struts-config-order.xml
                      </param-value> </init-param>

          要配置多個模塊,你需要在原有的一個<init-param>(在Struts 1.1中將其對應(yīng)的模塊稱為缺省模塊)的基礎(chǔ)之上,增加模塊對應(yīng)的<init-param>。其中<param-name>表示為config/XXX的形式,其中XXX為對應(yīng)的模塊名,<param-value>中還是指定模塊對應(yīng)的配置文件。上面這個例子說明該應(yīng)用有三個模塊,分別是缺省模塊、customer和order,它們分別對應(yīng)不同的配置文件。

          3、準(zhǔn)備各個模塊所需的ActionForm、Action和JSP等資源

          但是要注意的是,模塊的出現(xiàn)也同時帶來了一個問題,即如何在不同模塊間進(jìn)行轉(zhuǎn)發(fā)?有兩種方法可以實現(xiàn)模塊間的轉(zhuǎn)發(fā),一種就是在<forward>(全局或者本地)中定義,另外一種就是利用org.apache.struts.actions.SwitchAction。

          下面就是一個全局的例子:

          
                      ...
                      <struts-config>
                      ...
                      <global-forwards>
                      <forward name="toModuleB"
                      contextRelative="true"
                      path="/moduleB/index.do"
                      redirect="true"/>
                      ...
                      </global-forwards>
                      ...
                      </struts-config>
                      

          可以看出,只需要在原有的path屬性前加上模塊名,同時將contextRelative屬性置為true即可。此外,你也可以在<action>中定義一個類似的本地<forward>。

          
                      <action-mappings>
                      <!-- Action mapping for profile form -->
                      <action path="/login"
                      type="com.ncu.test.LoginAction"
                      name="loginForm"
                      scope="request"
                      input="tile.userLogin"
                      validate="true">
                      <forward name="success" contextRelative="true" path="/moduleA/login.do"/>
                      </action>
                      </action-mappings>
                      

          如果你已經(jīng)處在其他模塊,需要轉(zhuǎn)回到缺省模塊,那應(yīng)該類似下面這樣定義,即模塊名為空。

          
                      <forward name="success" contextRelative="true" path="/login.do"/>
                      

          此外,你也可以使用org.apache.struts.actions.SwitchAction,例如:

          
                      ...
                      <action-mappings>
                      <action path="/toModule"
                      type="org.apache.struts.actions.SwitchAction"/>
                      ...
                      </action-mappings>
                      ...
                      


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 沙河市| 略阳县| 石楼县| 景德镇市| 方山县| 昌都县| 新竹市| 肥西县| 贞丰县| 上饶县| 襄樊市| 驻马店市| 田林县| 庐江县| 双城市| 乌什县| 元谋县| 驻马店市| 休宁县| 台南县| 什邡市| 昆山市| 杂多县| 苍南县| 黔西| 余干县| 剑河县| 辽源市| 宁远县| 香港| 南陵县| 平南县| 乐业县| 施甸县| 裕民县| 那曲县| 泽库县| 峨眉山市| 墨玉县| 安宁市| 安阳市|