3

我在 jboss AS (5.1.0-GA) 中运行我的 sruts 2 (2.1.8.1) 应用程序。我将 a.war 和 b.war 放在同一个 /server/default/deploy 路径中,并将 struts 2 库放在 /server/default/lib 路径中。

应用程序或服务器中没有错误消息,但是当我出于某种原因输入http://localhost:8080/b/时,我进入了 b.jsp 页面,应用程序的消息资源中的消息。

所以,我的问题是:将 struts jar 放在服务器的 /lib 中只会创建所有应用程序必须使用相同的值堆栈的一个实例?如果是这样,我该怎么做才能为每个应用程序提供不同的实例,但将罐子保留在服务器路径中?

我应该把支柱罐子带回战争吗?

谢谢

我使用struts标签来获取系统标题

<s:property value="%{getText('system.title')}"/>

这是我对 a.war 的配置:

/WEB-INF/classes/a-message-resources.properties

system.title=Namefor system A

在 struts.xml 我有

<constant name="struts.custom.i18n.resources" value="a-message-resources" />

这是 b.war 的配置

/WEB-INF/classes/b-message-resources.properties

system.title=Namefor system B

在 struts.xml 我有

<constant name="struts.custom.i18n.resources" value="b-message-resources" />
4

1 回答 1

4

我想我可能知道这里发生了什么。

struts.custom.i18n.resources值被标记化,每个标记都添加到LocalizedTextUtil.DEFAULT_RESOURCE_BUNDLES. 这是一个静态的最终字符串列表。在将项目添加到列表(例如 system.title)之前,list.remove()在相同的令牌上调用,删除 system.title 的任何先前条目。

因为这个字段是静态的,并且因为它只允许每条消息输入一个条目,所以首先加载的 system.title 属性中的任何一个都会被下一个覆盖。

同样,您的 JBoss 实例似乎正在以导致共享静态变量的方式加载此类。您可以配置您的 JBoss 为每个应用程序单独加载此类。 这可能是一个好的开始

于 2012-05-05T04:00:18.457 回答