以下摘自网友 spiritsl(梦雨心蓝) 的回复 : 在struts1.1中使用应用模块(Application Modules) Struts 1.1的一个新特性是应用模块的概念。应用模块允许将单个Struts应用划分成几个模块,每个模块有自己的Struts配置文件,
JSP页面,Action等等。这个新特性是为了解决大中型的开发队伍抱怨最多的一个问题,即为了更好的支持并行开发允许多个配置
文件而不是单个配置文件。 在用struts进行大型项目开发中,使用这种新特性将是非常好的选择。 下面我以一个非常简单的例子来展示这一功能。 通常在单模块进行开发时,文件的最一般的目录结构如下:
test/
..../web-inf/
.........../classes
.........../lib
.........../*.tld
.........../struts-config.xml
........... /web.xml
........... /validator-rules.xml
........... /validation.xml
........... ...
..../js
..../css           
..../main1.jsp (本例使用的一个简单的jsp页面)
..../*.jsp
... .. 
  
  
如果我们增加一个单独的模块如:test1,则文件的最一般的目录结构如下:
test/
..../test1   ****
........./main11.jsp (本例使用的一个简单的jsp页面)
........./*.jsp  ****
..../web-inf/
.........../classes
.........../lib
.........../*.tld
.........../struts-config.xml
........... /struts-test1-config.xml *****
........... /web.xml
........... /validator-rules.xml
........... /validation.xml
........... ...
.../js
... /css           
.../main1.jsp (本例使用的一个简单的jsp页面)
.../*.jsp
... ..   
  [旁边带有“****”的为新增的一些文件或目录]
  
以下为变更的几个xml配置文件:
 1.struts-config.xml
         在原来的action-mapping 增加switchAction 如:
          ....
          ....
  <action-mappings>    <!-- Edit user registration -->    <action    path="/login"
              type="com.ifreeway.rms.v12.action.LoginAction"          
             scope="request">
     <forward name="error"              path="/main1.jsp"/>
   </action>
   <action    path="/login1"
              type="com.ifreeway.rms.v12.action.LoginAction1"          
             scope="request">
     <forward name="error"              path="/main1.jsp"/>
   </action> 
   <action   path="/switchdo"   type="org.apache.struts.actions.SwitchAction"/> ****
 </action-mappings>    
 ....
 ....     
 [旁边带有“****”的为新特性中增加的配置]
 2.struts-test1-config.xml
           添加输入这个模块的actionmapping  如下:
     ....
     ....
   <action-mappings>    <!-- Edit user registration -->    <action    path="/login3"
              type="com.ifreeway.rms.v12.action.LoginAction2"          
             scope="request">
     <forward name="error"              path="/main11.jsp"/>
   </action>   
 </action-mappings>
 ....
 ....
 3.web.xml
 ....
 ....
 <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</param-value>
   </init-param>
   <init-param>
     <param-name>config/test1</param-name> *****
     <param-value>/WEB-INF/struts-test1-config.xml</param-value> *****
   </init-param>    
   <init-param>
     <param-name>debug</param-name>
     <param-value>3</param-value>
   </init-param>
   <init-param>
     <param-name>detail</param-name>
     <param-value>3</param-value>
   </init-param>
   <load-on-startup>2</load-on-startup>
 </servlet>  
 ....
 ....
[旁边带有“****”的为新特性中增加的配置] 大家可以看到在struts-test1-config.xml中增加了下面代码:
<action   path="/switchdo"   type="org.apache.struts.actions.SwitchAction"/>
因为在struts1.1中模块之间的导航要使用到org.apache.struts.actions.SwitchAction,如果你查看struts1.1的源代码可以发现
org.apache.struts.actions.SwitchAction需要两个参数:prefix 和 page 下面对这个参数逐一说明:
这两个参数均要以“/”开头
prefix 简单一点就是新增模块的名字,本例为:test1
page  就是在新的strutsconfig配置文件中要使用的actionmapping的名字 就本例为:login3.do 注意:如果是要使用却省模块的调用的话 prefix=空字符串 好了下面给出模块间转换的方法 启动Tomcat
http://localhost:8080/test/switchdo.do?prefix=/test1&page=/login3.do
则调用struts-test1-config.xml下的/login3.do
http://localhost:8080/test/switchdo.do?prefix=&page=/login1.do
则调用struts-config.xml下的/login1.do
http://localhost:8080/test/switchdo.do?prefix=&page=/login.do
则调用struts-config.xml下的/login.do

解决方案 »

  1.   

    你先要把STRUTS的结构看懂,还有配置文件里面的信息是什么意思,怎么应用这些信息才可以
      

  2.   

    不用swichAction行不行...
    结构:
    WebRoot
    ----test
    --------struts-config.xml
    --------test.jsp
    ---WEB-INF
    ---------struts.config.xml
    ---------web.xml
    这样的结构.....
      

  3.   

    配置web.xml文件
      <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</param-value> //========>就是这个地方,用豆号隔开,指向其它的xml文件
        </init-param>
        <init-param>
          <param-name>debug</param-name>
          <param-value>2</param-value>
        </init-param>
        <init-param>
          <param-name>detail</param-name>
          <param-value>3</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
      </servlet>
      

  4.   

    什么意思..没有看懂..大哥能不能具体点啊...我的web.xml文件是这样的..
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
    <web-app>
    <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</param-value>
    </init-param>
    <init-param>
    <param-name>config/regedit</param-name>
    <param-value>/WEB-INF/struts-config-regedit.xml</param-value>
    </init-param>
    <init-param>
    <param-name>config/client</param-name>
    <param-value>/WEB-INF/struts-config-client.xml</param-value>
    </init-param>
    <init-param>
    <param-name>debug</param-name>
    <param-value>3</param-value>
    </init-param>
    <init-param>
    <param-name>detail</param-name>
    <param-value>3</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
    <welcome-file>standSys.jsp</welcome-file>
    </welcome-file-list>
    <taglib>
    <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
    <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
    </taglib>
    <taglib>
    <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
    <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
    </taglib>
    <taglib>
    <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
    <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
    </taglib>
    <taglib>
    <taglib-uri>/WEB-INF/struts-template.tld</taglib-uri>
    <taglib-location>/WEB-INF/struts-template.tld</taglib-location>
    </taglib>
    <taglib>
    <taglib-uri>/WEB-INF/struts-tiles.tld</taglib-uri>
    <taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
    </taglib>
    </web-app>
    因为我的其它文件是在不同的目录下面...而不是在同一目录....你说的是这样吧.. <init-param>
    <param-name>config</param-name>
    <param-value>/WEB-INF/struts-config.xml,/WEB-INF/struts-config-regedit.xml,/WEB-INF/struts-config-client.xml</param-value>
    </init-param>
      

  5.   

    现在出的问题是我在链接的时候出现的问题......我有一个regeditAction.
    我前一页面的一个链接是这样的<html:link page="/regedit">regedit</html:link>
    struts-config.regedit.xml里面的内容是这样的...
    <form-beans >
    <form-bean name="regeditForm" type="com.regedit.forms.regeditForm" />
    </form-beans><action-mappings >
    <action
    attribute="regeditForm"
    name="regeditForm"
    path="/regedit"
    scope="request"
    type="com.regedit.actions.regeditAction"
    unknown="false"
    validate="false" >
    <forward
    name="success"
    path="/regedit/regedit.do"
    redirect="false"
    contextRelative="false" />
    </action>
    </action-mappings >
      

  6.   

    struts1.1里由于每个模块都可以分开开发,所以需要的form可以在struts-config.xml文件里配置了,不需要再另外写bean.当然,最好根据每个模块config文件,例如struts-model-config.xml.
    <?xml version="1.0" encoding="ISO-8859-1" ?><!DOCTYPE struts-config PUBLIC
              "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
              "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"><!--
         This is the Struts configuration file for the example application,
         using the proposed new syntax.     NOTE:  You would only flesh out the details in the "form-bean"
         declarations if you had a generator tool that used them to create
         the corresponding Java classes for you.  Otherwise, you would
         need only the "form-bean" element itself, with the corresponding
         "name" and "type" attributes.
    -->
    <struts-config>
      <form-beans>
    <form-bean       name="investForm"
                         type="org.apache.struts.validator.DynaValidatorForm">
      <form-property name="invest_id" type="java.lang.String"/>   
      <form-property name="invest_subject" type="java.lang.String"/>   
      <form-property name="invest_content" type="java.lang.String"/>   
      <form-property name="invest_startdate" type="java.lang.String"/>
      <form-property name="invest_enddate" type="java.lang.String"/>
      <form-property name="invest_company" type="java.lang.String"/>
      <form-property name="invest_email" type="java.lang.String"/>
      <form-property name="invest_tel" type="java.lang.String"/>
      <form-property name="invest_fax" type="java.lang.String"/>   
      <form-property name="invest_address" type="java.lang.String"/>
      <form-property name="invest_count" type="java.lang.String"/>
      <form-property name="invest_place" type="java.lang.String"/>
      <form-property name="invest_linkman" type="java.lang.String"/>
      <form-property name="invest_memberid" type="java.lang.String"/>
      <form-property name="admin_id" type="java.lang.String"/>
      <form-property name="invest_valid" type="java.lang.String"/>
      <form-property name="pageNum" type="java.lang.String"/>
        </form-bean>
    另外,在配置文件里还有其他重要的部分.
     <!-- ========== Global Forward Definitions ============================== -->
      <global-forwards>
        <forward name="investStageError"  path="stageError" />
    <forward name="investError"       path="backError" />
      </global-forwards>
      <!-- ========== Action Mapping Definitions ============================== -->
      <action-mappings>
        <!-- 信息前台首页 -->
    <action    path="/default"
                   type="com.invest.action.DefaultAction"
               name="listInvestForm"
       validate="false"
               scope="request">
           <forward name="success" path="default" redirect="true"/>
        </action>
      

  7.   

    ZT:
    关于Struts的Action_mapping 
    由应用逻辑信息确定ActionMapping 
    ctionMapping为整个应用确定的“线路图”,在配置文件struts-config.xml对ActionMapping进行定义,通过转发请求(forward)来理顺应用的处理流程,确定应用中每个用户请求对应的动作。 通常我们在开发Struts时,应该先花出其简单的流程图,那个Action对应那个FormBean,将链接到哪个页面,或Forward到哪个Action.基本上有了这张草图,我们在写Action_mapping时,会节省很多时间和去除许多不必要的错误.然后在开发代码的过程中一步一步的具体完善我们的Struts-config.xml. 当一个Action类处理完一个逻辑业务后,它返回forward在ActionMapping中被定义.一个Action返回的forward完全有多种可能,尽管一个Action一般只定义其相关的几个forward。那么,如果有多个Action都可能返回的同一个forward,那么就可以将其定义为全局转发(global forward)。如下: 
    <!-- ========== Global Forward 定义 --> 
    <global-forwards> 
    <!--一个报错的forward--> 
    <forward name="error" path="/Errorpage.jsp"/> 
    </global-forwards> 
    这也就相当于是一个全局的函数或变量等,在整个逻辑运行中起着作用.一旦某个Action有需要forward error时,这个<forward name="error" path="/Errorpage.jsp"/>就会产生作用,进行链接到Errorpage.jsp. 我们在来看下相关的Action元素的属性 
    <!-- ========== Action Mapping 定义 --> 
    <action-mappings> 
    <!-- <action>元素的相关属性 --> 
    <!-- 
    具体的内容请看一看org.apache.struts.action.ActionMapping的相关文档,你就会了解的更多 
    path - 当前Action对应的用户请求URI路径 
    type - 实现当前Action的Java class的完整名字 
    name - 当前Action中用到的ActionForm的名字,其具体信息在配置文件其他地方另有详细定义 
    unknown - 如果将该属性设置为true,那么就是声明这个Action将处理整个应用中所有未找到相应处理Action的请求,当然,一个应用系统中也只会有一个Action的unknown属性可以设为true 
    scope - Action中所用到的ActionForm的生存期,可以为“request”或“session”,随着生存期的设置,该Action也会在相应的时间被创建 
    input - 该Action中相关ActionForm获取用户输入的输入页面,当将ActionForm设为自动验证输入数据,发现不合法数据返回错误时,将返回该页面 
    validate - 如果本属性为true则在Action动作之前其对应的ActionForm的validate方法会自动被调用,一般用以验证用户输入的数据 
    forward 元素 - 定义当前Action相关的ActionForward 
    --> struts-config.xml就是MVC模式的的Controller。 
    而Struts中的jsp页面就是MVC模式的的View. 
    Action&ActionFormBean就是MVC模式的的Module. 
    所以我们的应该把时间多花些在struts-config.xml上面,以保证每一个Action定义及其相关定义是符合应用的需求的。 由于Action类将是由Struts来调用的。所以它的主要方法应该是一个抽象方法,而由每个继承的子类来具体实现,或者在其中做一些所有Action都会做的通用机制.一些参数的中文意思. 
    参数mapping:其类型为ActionMapping,将在本Action做跳转选择用 
    参数actionForm:由Struts根据本次HTTP请求数据填充完成的ActionForm对象 
    参数request:此Action所有处理的本次HTTP请求(对象) 
    参数response:此Action输出数据所要用到的HTTP响应(对象) 
      

  8.   

    多谢这位同仁的帮助....有MSN或是QQ吗....能加你具体聊一下这方面的问题吗?小弟现在在做一个项目..而且struts学学了几天了..可是有太多的应用方面存在着一定的问题....还请给多多指教.....当然你所说的这么多..对我很有帮助...就是还有链接的问题没有搞定.