2012-12-21 70 views
2

我有包含另一個WAR的EAR。下面的項目結構如下所示:如何從ear/war/jar中讀取文件?

project.ear 
|-- lib 
|-- META-INF 
|-- project-web.war 
| |-- META-INF 
| |-- WEB-INF 
| | |-- classes 
| | | `-- com 
| | |   `-- example 
| | |    `-- services 
| | |     `-- ListPageService.class 
| | |-- lib 
| | |-- web.xml 
| | `-- weblogic.xml 
| `-- content.html 
`-- project-services.jar 

在戰爭中,有一個JAX-RS類ListPageService這需要讀取content.html文件。我如何訪問該文件?

+0

你的樹是不正確的;類文件應該位於content.war/WEB-INF/classes中。那麼你的戰爭檔案裏的內容是content.html -exactly-? – Gimby

+0

我更改了文件樹 – Alex

回答

2

獲取WAR文件中資源的常用方法是通過ServletContext.getResourcegetResourceAsStream。您應該能夠通過聲明javax.ws.rs.core.Context

@Context ServletContext servletContext; 

註釋字段以訪問一個JAX-RS類ServletContext然後在請求處理方法,你可以說

URL content = servletContext.getResource("/content.html"); 
// alternatively 
// InputStream content = servletContext.getResourceAsStream("/content.html"); 
2

編輯:此答案不再適用於現在制定的問題。建議的方法僅用於從類路徑獲取資源。

看看Class.getResourceAsStream方法。它允許您訪問在課程路徑中找到的文件。

+0

謝謝,但我遇到了下一個問題:如果我運行getClass()。getResourceAsStream(「。」),絕對路徑爲C:\ Oracle \ middleware \ user_projects \ domains \ base_domain \ servers \ AdminServer \ tmp \ _WL_user \ project-ear \ 7epkmz \ war \ WEB-INF \ lib \ _wl_cls_gen.jar。這個jar只包含* .class文件,沒有來自原始WAR的靜態內容。有什麼想法嗎? – Alex

+0

您指定的名稱是相對於班級的位置。當名稱以/開頭時,這可以被覆蓋。要在您的示例中使用該文件,請使用「/content.html」 – Henry

+0

Web內容資源根本不在類路徑中。這完全超出了我爲什麼這個答案已經有4個upvotes了。 – BalusC