`
wangyanlong0107
  • 浏览: 495108 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

【转】struts1多模块开发

 
阅读更多

可以将一个struts-config.xml分割成多个小的struts-config.xml。每个都必须按照struts-config DTD文件的格式进行编写。配置举例如下: 
<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-2.xml 
    </param-value> 
 </init-param> 
 <load-on-startup>1</load-on-startup> 
</servlet> 
当载入ActionServlet类时,struts将多个配置文件
拼成单个的配置文件(都放入一个ModuleConfig对象)。 

如果多个配置文件中有重复的元素则使用最后一个配置文件中的。

这种方法可以很好地解决修改冲突的问题,不同的开发人员可以在不同的配置文件中设置自己

的Action、ActionForm等等(当然不是说每个开发人员都需要自己的配置文件,可以按照系统

的功能模块进行划分)。但是,这里还是存在一个潜在的问题,就是可能不同的配置文件之间

会产生冲突,因为在 ActionServlet初始化的时候这几个文件最终还是需要合并到一起的。比

如,在struts-config.xml中配置了一个名为 success的<forward>,而在struts-config-

registration.xml中也配置了一个同样的< forward>,那么执行起来就会产生冲突。

为了彻底解决这种冲突,Struts 1.1中引进了模块(Module)的概念。一个模块就是一个独立

的子系统,你可以在其中进行任意所需的配置,同时又不必担心和其它的配置文件产生冲突。

因为前面我们讲过,ActionServlet是将不同的模块信息保存在不同的ModuleConfig对象中的。

要使用模块的功能,需要进行以下的准备工作:

1、为每个模块准备一个配置文件

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

决定采用多个模块以后,你需要将这些信息告诉控制器,这需要在web.xml文件进行配置。下面

是一个典型的多模块配置:

<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中将其对应的模块称为缺

省模块)的基础之上,增加模块对应的<init-param>。其中<param-name>表示为config/XXX的

形式,其中XXX为对应的模块名,<param-value>中还是指定模块对应的配置文件。上面这个例

子说明该应用有三个模块,分别是缺省模块、customer和order,它们分别对应不同的配置文件。

3、准备各个模块所需的ActionForm、Action和JSP等资源

但是要注意的是,模块的出现也同时带来了一个问题,即如何在不同模块间进行转发?有两种

方法可以实现模块间的转发,一种就是在< forward>(全局或者本地)中定义,另外一种就是

利用org.apache.struts.actions.SwitchAction。

(

模块转发<forward>元素,映射路径前面都默认加上模块名字,默认的模块(struts-config.xml)没有模块名字,所以不存在模块名字。

如果需要模块之间转发时,需要设置contextrelative元素,path设置为:模块名字+路径。

对于使用<html:form>标签尤其要注意,具体注意时间参考《使用struts1.x多模块应用注意事项》

)

下面就是一个全局的例子:
    <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>

如果你已经处在其他模块,需要转回到缺省模块,那应该类似下面这样定义,即模块名为空。

<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> 

使用这个action,向它传递两个参数prefix和page。prefix指明了目标模块名称,必须是以斜扛开头(“/”),page指明了相对于目标模块的位置。如: 
<html:link page="/toModule.do?prefix=moduleName&page=/SomeAction.do"> 
    Change Module 
</html:link>如果你要连接到一个action,别忘了加上”.do”。

分享到:
评论

相关推荐

    struts1多模块多配置文件

    本文将详细介绍如何在Struts1框架中实现多模块开发,并通过多配置文件来管理不同模块的配置信息。 #### 二、多模块架构的优势 1. **清晰的代码结构**:每个模块都有明确的功能边界,便于理解和维护。 2. **易于扩展...

    struts多模块.pdf

    ### Struts多模块开发概述与实践 #### 一、引言 在当今的软件开发领域,多模块开发和软件扩展性已成为评估一个框架优劣的关键指标。尤其对于框架型软件而言,其是否支持多模块开发、是否具备良好的扩展性及与其他...

    struts 多模块开发

    整个文档中的例子 博文链接:https://zhangzuanqian.iteye.com/blog/214982

    struts2 模块包含

    1. **Action配置**:在Struts2的配置文件(如struts.xml)中,每个Action元素代表一个模块。Action元素包含了与该模块相关的配置信息,如类名、结果页面、拦截器等。 2. **Interceptor拦截器**:拦截器是Struts2...

    转:struts1与struts2的区别

    - **Struts1**: 支持为每个模块单独配置Request Processors(即生命周期管理器),但模块内的所有Action必须共享相同的生命周期。 - **Struts2**: 通过配置拦截器堆栈(Interceptor Stacks)来为每个Action定制不同...

    struts多模块配制

    1. **模块化设计**:模块化是软件工程中的最佳实践,通过将大项目分解为多个小模块,可以更好地组织代码,便于团队协作,每个模块负责特定的业务逻辑,便于维护和测试。 2. **Struts配置文件**:每个模块通常有自己...

    struts的模块话开发

    以下是对Struts模块化开发的详细说明。 在Struts框架中,模块通常指的是ActionServlet配置中的 `&lt;package&gt;` 元素。每个`&lt;package&gt;`都可以看作是一个独立的处理单元,包含了特定业务逻辑的Action类、配置文件以及...

    struts1和struts2区别

    - **Struts1**:要求Action类继承自一个抽象基类,这限制了代码的灵活性,因为基于抽象类编程不利于多态性。 - **Struts2**:Action类可以实现Action接口或者直接使用ActionSupport基类,也可以是任何具有`execute...

    java Struts 1.x 框架 Web 开发

    7. **国际化和本地化**:Struts 1.x 支持多语言和文化环境,通过Resource Bundles管理不同地区的文本资源,方便实现国际化。 8. **异常处理**:通过配置全局异常处理,Struts 1.x 可以捕获并处理应用程序中抛出的...

    struts2和struts1 API及使用指南 chm

    Struts2则吸取了Struts1的经验教训,引入了拦截器(Interceptor)机制,使得业务逻辑的处理更加模块化和可扩展。Struts2的配置更加简洁,支持注解,使得开发者可以更快速地进行开发。此外,Struts2与Spring框架的...

    Struts多模块[定义].pdf

    Struts框架从1.1版本开始引入了对多模块开发的支持,使得开发者能够将复杂的应用拆分成更小、更易于管理和测试的部分。 在Struts中,每个模块对应一个独立的`struts-config.xml`配置文件,用于定义该模块的行为、...

    struts2 与 struts1的区别

    - **Struts1** 只支持在模块级别定义Request Processors,这意味着模块内的所有Action都共享相同的生命周期。 - **Struts2** 则引入了拦截器栈(Interceptor Stacks)的概念,允许针对每个Action定义不同的执行路径...

    Struts2和Struts1的区别,详细点,主要说说Struts2

    - **Struts1**支持为每个模块提供单独的配置文件,但不同模块间的Action实例共享,这可能带来线程安全问题。 - **Struts2**支持通过拦截器栈(Interceptor Stacks)来为每个Action实例提供定制化的功能,这种方式...

    ssh项目(自定义struts1)

    SSH项目,全称为Struts2、Spring和Hibernate的集成,是一种经典的Java Web开发框架组合。然而,根据提供的信息,这里提到的是一个基于Struts1的项目,而不是Struts2。Struts1是Apache软件基金会的一个开源项目,它...

    Struts更多文章模块

    在本篇文章模块中,我们将深入探讨Struts框架在处理"更多文章"功能时的关键技术和实现方式。 一、Struts框架基础 1.1 Struts概述:Struts是由Apache软件基金会维护的,它的核心是ActionServlet,负责处理HTTP请求,...

    struts1 jar包

    Struts1是一个经典的Java Web开发框架,由Apache软件基金会维护,它基于Model-View-Controller(MVC)架构模式,为构建动态、数据驱动的Web应用程序提供了强大的支持。标题中的"struts1 jar包"指的是Struts1框架的...

    Struts1入门教程实例

    - **模块化设计**:Struts框架提供了一种结构化的方式来组织代码,使得开发人员能够更好地管理项目的各个部分。 - **易于集成**:Struts可以很容易地与其他Java EE技术如JSP、Servlets以及第三方库集成。 - **强大的...

Global site tag (gtag.js) - Google Analytics