从jar文件中读取上下文(.war)中的资源

时间:2009-09-05 09:03:46

标签: servlets jar servletcontextlistener war

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

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

中部署为.war

我有一个用于读取配置文件的Utility包。我在default / lib

中部署了utility.jar

ontextInitialized的c ServletContextListener方法中,我正在阅读appConfig.xml并将IOStream传递到appConfig到我的实用工具类,后者读取此文件并加载所有上下文相对路径。

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

我试过跟在Utility Class中。

从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
}

1 个答案:

答案 0 :(得分:0)

以下任何一个都不会起作用,因为/ WEB-INF / config不在classpath中,所以classloader对它一无所知,

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”中读取它?

将配置文件存储在战争中并不是一个好主意。你应该考虑将它移到其他地方。