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

Servlets 从jar文件读取上下文(.war)中的资源,servlets,jar,servletcontextlistener,war,Servlets,Jar,Servletcontextlistener,War,我正在使用JBoss4.0.1和Struts2.1.6 我有一个应用程序,它有一些配置文件(WEB-INF/config文件夹中的appConfig.xml)。 此配置文件包含要读取的其他文件的相对路径。(other.xml、some.xml等)。应用程序在默认/部署中部署为.war 我有一个读取配置文件的实用程序包。我已经在default/lib中部署了utility.jar 在ServletContextListener的contdeInitialized方法中,我正在读取appConfig

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

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

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

ServletContextListener
的c
ontdeInitialized
方法中,我正在读取
appConfig.xml
并将
appConfig
上的
IOStream
传递给我的实用程序类,该类读取此文件并加载所有上下文相关路径

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

我试过在实用程序类中使用以下工具

读取方法是从ServletContextListener的contextInitialized方法内部调用的

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
}

由于/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个不起作用,因为它脱离了上下文(…不能是第一个元素)

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


在war中存储配置文件不是一个好主意。你应该考虑把它移到别处。

谢谢你的评论,只是想添加一些东西来帮助你理解。1.WEB-INF/config已添加到类路径2中。这是一次性配置,所以我需要在.war中使用它。3.可以有多个应用程序上下文来具有相同的配置,因此我创建了一个实用程序包来读取这种配置。现在,在上下文中,我希望实用程序读取我的配置文件。我希望这能更好地帮助你理解这个问题,感谢你的帮助。我已经试着回答类似的问题。希望这有帮助。
public void read(ServletContext ct){ 

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