前提,网上不少资料说的都是在非OSGI环境下,因此采用替换Struct.xml的dtd文件路径可以成功。但是在OSGI环境中,由于其特殊原因,这种方法是无效的(很可能是Classloader的原因,时间紧没有查到根。)。很多人建议说使用file协议,写绝对路径,这很显然也不符合实际,我们将来有Struct.xml文件的Bundle不少,难道部署到服务器上就必须要全部替换下吗?那岂不是很麻烦啊?
其实我采用的方法也不先进,因为引入DTD方式有内部方式和外部方式。内部引用的方式实际上就是将DTD文件的定义和XML放在一起(具体的大家可以查和其相关的资料)。外部方式不连网不能用,我就将每个Bundle的每个Struts.xml文件都加上DTD定义我,问题解决了。
这个解决办法的缺点是每个Bundle的Struts配置文件中都要加这段话,不过好在我们使用了Maven可以生成项目骨架,我们将其配置到Maven的骨架文件中,就OK了,这不是嘴好的解决办法,但是保持了程度的独立性。希望之后能找到更好的办法。姑且记下来,以防忘记。