Java-web底層技術回顧之: Servlet獲取當前web應用下的資源API

servlet讀取web應用下的資源文件相關問題記錄

在java web中通過servletContext接口中定義的一系列方法可以獲取到web應用下的資源文件。這些方法需要依靠servlet容器提供功能:

getResourcePaths方法

該方法

Set getResourcePaths(String path)

該方法返回一個Set集合,集合中包含資源目錄中子目錄和文件的路徑名稱。參數path必須以正斜線(/)開始,指定匹配資源的部分路徑。

在測試中遇到以下幾點問題:

  • 該方法實際會以/WEB-INF/爲根目錄進行遍歷,所以當path參數爲/時,其返回的爲/WEB-INF/下的所有文件及目錄的集合

測試1:

Set<String> resources = getResourcePaths("/"); ---> 輸出: [/WEB-INF/]

從結果中可以看出,該方法以/WEB-INF/爲根目錄進行向下搜索的。

測試2:
在web-inf目錄下加入資源目錄及文件:
/WEB-INF/images/...

Set<String> resources = getResourcePaths("/"); ---> 輸出: [/WEB-INF/]

總結: 該方法只會返回/WEB-INF/。(此處有疑問)該方法如果傳入的是在classes下的資源時並不會返回資源目錄下的資源集合,只會返回null,所以該方法並不能在classes目錄中中生效(此處也有疑問)

getRealPath

該方法API即:

String getRealPath(String path);

該方法以正斜線(/)開始,/表示當前web應用的根目錄,如果serlvet無法將虛擬路徑轉換爲文件系統的真實路徑,則返回null,這個方法返回一個文件在服務器上的真實路徑(文件的絕對路徑)。

String realPath = getRealPath("/image/image.jpg") ---->  C:\Users\Linux\Desktop\idea\heiketu\src\main\webapp\images\image.jpg
  • 這個方法會返回一個文件所在的絕對路徑(文件絕對路徑,即在服務器上的絕對位置)。

getResource

此方法API爲:

URL getResource(String path);

此方法返回映射到某個資源文件的URL對象,參數path與getResourPaths相同,必須要以/開始,/表示當前Web應用的根目錄。
測試結果:

URL resource = context.getResource("/");
System.out.println("[返回的資源URL] ---: " + resource); ----> [返回的資源URL] ----: [返回的資源URL] ---: jndi:/localhost/main/

這個方法範圍的是文件的URL地址,如果傳入的是具體文件,則會返回null(這個有存疑)

getResourceAsStream

方法的API爲

InputStream getResourceAsStream(String path);

該方法會從項目的根路徑進行查找,返回資源文件的輸入流對象。
這個api接收參數與getResource方法的接收參數相同,必須以/開始,從項目根路徑進行查找。如果傳入的是絕對路徑則會拋出NullException異常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章