2009-09-05 73 views
0

我使用JBoss4.0.1和Struts2.1.6阅读上下文中资源(的.war)从一个jar文件

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

我有一个工具包,读取配置文件。我已经部署了默认内部utility.jar/lib目录

在C ontextInitialized方法ServletContextListener我读了appConfig.xmlappConfig传递IOStream我的工具类,它读取该文件并加载所有上下文相对路径。

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

我试过下面的Utility类。

读法是从的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 
} 
+0

我试过类似的问题在[这篇文章](http://stackoverflow.com/questions/4585553/how-to-load-resource-from-jar-file-packaged-in-a-war-file/16082211#16082211)。希望这可以帮助。 – Rupesh 2013-04-18 11:56:42

回答

0

以下会工作,因为/ WEB-INF中没有名为/配置是不是在类路径,以便类装载器并不知道这件事,

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

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

+0

感谢您的意见,只是想添加一些东西为您的理解。 1. WEB-INF/config被添加到类路径中 2.这是一次性配置,所以我需要它在.war中。 3.可以有多个应用程序上下文具有相同的配置,所以我创建了一个读取这种配置的实用程序包。 现在从上下文中我希望实用程序读取我的配置文件。 我希望这会更好地帮助你理解问题 你的帮助表示赞赏。 – 2009-09-07 10:56:10