2009-09-05 114 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