struts.xml配置中的参数文件包含,基于属性

时间:2015-12-18 10:44:29

标签: spring properties struts2

我有一个Web应用程序(基于Spring,Struts 2构建),我正在尝试根据属性动态地在主struts.xml配置中包含一个struts配置文件。

在属性文件中定义了:

key=foo

我尝试在struts.xml中使用它:

<struts>
   ...
   <include file="/config/struts/struts-${key}.xml" />
</struts>

包含“struts-foo.xml”文件(或其他文件,具体取决于值)。

属性文件在Spring启动时加载,我可以在Spring的xml文件中使用它来参数化bean定义。

2 个答案:

答案 0 :(得分:0)

您可以利用Struts2插件框架。

您基本上创建了一个基于jar的项目,其中包含所有特定客户端的操作映射,支持类等。如果您还要部署到Servlet 3.0或更高版本的容器中,您也可以选择将jar工件包含在jar的META-INF \ resources目录中,以便进行清洁打包。

现在,您通常将内容放在struts.xml中以进行操作映射,只需将其放在struts-plugin.xml中并将此xml文件放在jar文件的根目录中。

当Struts2框架启动时,将扫描jar文件,struts-plugin.xml文件将被选中并自动包含在您的应用程序中。

我在maven构建过程中使用相同的设置,因此如果客户端的部署不包含特定功能或者要定制标准功能,我可以自定义来自股票的行动映射。

在我们的例子中,stock app是一个基于struts-plugin的jar,在任何其他jar之前加载,然后加载后续的feature jars来扩展或覆盖功能。实际的WAR项目内部很少,主要是用于部署其他项目工件组合的工件。

答案 1 :(得分:0)

如您所知,您可以更改struts.xml配置文件名,如下所示:

c:\any_directory> python c:\work\control\tests\mytests.py

您可以使用此功能动态更改struts.xml。

您需要扩展StrutsPrepareAndExecuteFilter并在此处加载动态配置。用<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> <init-param> <param-name>config</param-name> <param-value>struts-config.xml</param-value> </init-param> </filter> 中的struts替换你的新fildter。

web.xml

请查看public class MyStrutsPrepareAndExecuteFilter extends StrutsPrepareAndExecuteFilter{ @Override protected void postInit(Dispatcher dispatcher, FilterConfig filterConfig) { //load your config here } } 源代码。你可以看到如何加载配置,你可以如何改变它。

如果您只想动态更改应用程序消息,只需在StrutsPrepareAndExecuteFilter

中调用LocalizedTextUtil.addDefaultResourceBundle ("messages/customize")即可轻松完成此操作