我有一个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定义。
答案 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")
即可轻松完成此操作