2011-10-26 23 views
2

我剛剛開始使用運行在Tomcat上的jax-rs設置Web服務。有沒有辦法將屬性文件與我的java項目(在eclipse中)捆綁在一起,以便在運行時讀取它的屬性?另外,如果可能的話,哪裏可以放置它的最佳位置(以便通過url無法看到),WebContent,WEB-INF等?如何通過jax-rs使用屬性文件?

謝謝。

+1

只需將它放入類路徑(WEB-INF/classes;在maven項目中,src/resources是適當的位置)並將其加載到類加載器。 – Artefacto

+0

我沒有Maven項目,WEB-INF/lib會不會足夠?如果我的類不是正在返回的Resource類,而是它正在創建的POJO(擴展了Authenticator),那麼在運行時對於文件Properties(「WEB-INF/lib/jaxrs.properties」)的路徑看起來如何? – Blaskovicz

回答

6

有幾個選項:

選擇1:你可以把它放在你的classpath下(在Eclipse中把它和源文件夾下),這樣你就可以通過類加載器訪問:MyClass.class.getResourceAsStream("myproperties.properites")

注重的是MyClass的也必須位於同一個源文件夾中(實際上它有點複雜,它必須位於同一個類加載器層次結構中,但是來自同一文件夾的任何類都可以完成這項工作)

選項2:將它放入WEB-INF夾。這是一個首選選項,因爲你不需要處理類路徑。您需要ServletContext才能訪問它:javax.servlet.ServletContext.getResourceAsStream("WEB-INF/myproperties.properites")

在jax-rs中,您可以在任何已註冊的資源或提供程序中使用@Context註釋來獲取ServletContext。

+0

),我是否需要物理上將Servlet上下文從資源傳遞到它的構造函數或通過setter,還是有辦法在那裏注入它? – Blaskovicz

+0

好吧,如果一個類不是通過JAX-RS創建的,那麼JAX_RS在這裏不會幫你。你需要手動完成。 – Tarlog

+0

我不得不像Someclass.class.getResourceAsStream(「../../ file.properties」)那樣做,但是如果一個類在另一個包中,這將需要改變。有沒有方法我可以指定一個文件的絕對路徑,即/src/file.properties什麼的? – Blaskovicz

0

對於GlassFish 3.1用戶,我能夠同時獲得Tarlog的選項,但我必須使用該文件的絕對路徑。對於選項1,我把文件中的源包文件夾中的NetBeans,我可以再通過訪問:

InputStream is = TestResource.class.getResourceAsStream("/test_model.js"); 

選項2我把文件下的WEB-INF和使用:

@Context ServletContext servletContext; 
InputStream is = servletContext.getResourceAsStream("/WEB-INF/test_model.js"); 

沒有前導斜槓,結果爲空。 HTH

相關問題