0

我正在使用 JBoss4.0.1 和 Struts2.1.6

我有一个应用程序,它有一些配置文件(文件夹 WEB-INF/config 中的 appConfig.xml)。此配置文件包含要读取的其他文件的相对路径。(other.xml、some.xml 等)。应用程序在 default/deploy 中部署为 .war

我有一个读取配置文件的实用程序包。我已经在 default/lib 中部署了 utility.jar

在我的 contextInitialized方法中,ServletContextListener我正在读取appConfig.xml并传递IOStreamappConfig我的实用程序类,它读取此文件并加载所有上下文相关路径。

我现在如何阅读这些文件?因为如果我尝试创建一个输入流,它会返回 NULL。

我尝试在实用程序类中进行以下操作。

从 ServletContextListener 的 contextInitialized 方法内部调用 read 方法

public void read(){ 
this.getClass().getClassLoader.getResourceAsStream("/WEB-INF/config/some.xml");
}

public void read(ClassLoader cl){ 
  cl.getResourceAsStream("/WEB-INF/config/some.xml"); --> Null
  cl.getResourceAsStream("/../config/some.xml"); --> Null
  cl.getResourceAsStream("../config/some.xml"); --> Null
}

public void read(ServletContext ct){ 
 ct.getResourceAsStream("/WEB-INF/config/some.xml");.
 ct.getResourceAsStream("/../config/some.xml"); --> Null
 ct.getResourceAsStream("../config/some.xml"); --> Null
}
4

1 回答 1

0

以下都不起作用,因为 /WEB-INF/config 不在类路径中,所以类加载器对此一无所知,

public void read(){ 
this.getClass().getClassLoader.getResourceAsStream("/WEB-INF/config/some.xml");
}

public void read(ClassLoader cl){ 
  cl.getResourceAsStream("/WEB-INF/config/some.xml"); --> Null
  cl.getResourceAsStream("/../config/some.xml"); --> Null
  cl.getResourceAsStream("../config/some.xml"); --> Null
}

那些 2 不起作用,因为它脱离了上下文(..不能是第一个元素),

public void read(ServletContext ct){ 

 ct.getResourceAsStream("/../config/some.xml"); --> Null
 ct.getResourceAsStream("../config/some.xml"); --> Null
}

我不太明白你的意图。如果您知道文件在“/WEB-INF/config/some.xml”中,为什么要从“/../config/some.xml”中读取它?

将配置文件存储在 war 中并不是一个好主意。您应该考虑将其移至其他地方。

于 2009-09-05T11:25:42.147 回答