Java 如何在struts.xml中重新映射动作实现类?

Java 如何在struts.xml中重新映射动作实现类?,java,struts2,Java,Struts2,如何从struts2.xml将操作的实现类注入struts.xml中 假设struts.xml如下所示: <struts> <action name="EnginesList" class="example.EnginesListAction"> <result name="*">viewengines.jsp</result> </action> </struts> viewengine

如何从struts2.xml将操作的实现类注入struts.xml中

假设struts.xml如下所示:

<struts>
    <action name="EnginesList" class="example.EnginesListAction">
        <result name="*">viewengines.jsp</result>
    </action>
</struts>

viewengines.jsp
然后我想实现:当struts2.xml存在(或不为空)时,struts2.xml中的类映射将覆盖struts.xml中的类映射。因此,如果我有以下定义,在运行时EnginesList将映射到example.EnginesListAction2,而不是example.EnginesListAction

// struts.xml:
<struts>    
    <action name="EnginesList" class="example.EnginesListAction">
        <result name="*">viewengines.jsp</result>
    </action>
    <include file="struts2.xml" />
</struts>

// struts2.xml
<struts>    
    <action name="EnginesList" class="example.EnginesListAction2">
        <result name="*">viewengines.jsp</result>
    </action>
</struts>
//struts.xml:
viewengines.jsp
//struts2.xml
viewengines.jsp
由于名称冲突,这似乎不起作用。那么,实现最终目标的最佳方式是什么


添加背景信息

  • Team-A开发并维护struts.xml。我的团队(team-B)使用team-A的代码库,并将其部署在单独的数据中心
  • Team-B需要将一些操作映射到不同的类。但是,我们不能在struts.xml中直接修改它,因为它将改变Team-A服务的行为
  • 所以我想要的是有一个单独的文件(struts2.xml),它的类映射可以覆盖struts.xml中的类映射。操作包名称没有更改。JSP代码中没有更改。此struts2.xml将仅部署在team-B的数据中心中
    实现这一点的简单方法是使用多个(单独的)struts配置文件,并将它们导入主
    struts.xml
    文件

    在您的例子中,将
    struts.xml
    重命名为
    struts1.xml
    。将这两个文件包括在主
    struts.xml

    <include file="struts1.xml"></include>
    <include file="struts2.xml"></include>
    
    
    
    我不确定这些文件的导入顺序,因此无法评论第2个文件中的映射是否会影响第1个文件中的映射,反之亦然。您可以自己尝试确定必须首先包含哪个文件

    有关包括配置的更多信息,请参阅


    有关完整示例,请参阅链接。

    您的最终目标是什么?为什么需要它?@AleksandrM struts.xml由团队A维护,我们的团队(团队B)不允许修改struts.xml中的类映射,因此我们必须从单独的文件中插入类映射。如果此注入有效,则A组启动其服务器时仅加载struts.xml,B组启动其服务器时同时加载struts.xml和struts2.xml。@zzhang编辑问题您可以在“编辑:标记”下添加详细信息,而不从中删除重要内容,尝试以这种方式修改问题。您可以使用DI容器,如spring。有一个S2 spring插件,它允许spring创建和自动连接操作。@zzhang:什么时候解决问题?如果愿意,可以将解决方案作为答案发布+一个好问题。