ServletContext讀取web應用中的資源文件
1.獲取真實路徑
ServletContext接口的getRealPath(Stringpath)方法返回的是資源文件在服務器文件系統上的真實路徑(帶有盤符)。
參數path代表資源文件的虛擬路徑,它應該以正斜線(/)開始,“/“表示當前web應用的根目錄,也可以不以“/“開始。
示例如下:
public class PathServlet extends HttpServlet{
publicvoid doGet(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
//”/”表示web應用的根路徑
ServletContextservletContext=this.getServletContext();
String path=servletContext.getRealPath("/");
System.out.println(path);
String indexPath=servletContext.getRealPath("/index.jsp");
System.out.println(indexPath);
}
}
2.獲取資源流
ServletContext接口的getResouceAsStream(String path)方法可以獲取path指定資源的流。
參數path代表資源文件的虛擬路徑,它應該以正斜線(/)開始,“/“表示當前web應用的根目錄,也可以不以“/“開始。
其實這個方法也可以理解爲,先獲得資源的真實路徑,再使用InputStream input=new FileInputStream(newFile(servletContext.getRealPath(path)))創建一個輸入流。
示例如下:
ServletContext servletContext=this.getServletContext();
//使用ServletContext獲取資源流
InputStream input=servletContext.getResourceAsStream("/index.jsp");
System.out.println(input);
3.獲取指定目錄下的所有資源路徑
通過ServletContext接口的getResourcePaths(String path)方法,該方法的返回值是一個Set集合。該方法的參數一定要以”/”開頭,否則會報錯。
例如將WEB-INF目錄下的所有資源路徑都獲取到:
ServletContext servletContext=this.getServletContext();
//使用ServletContext獲取指定目錄下所有資源路徑
Set<String> paths=servletContext.getResourcePaths("/WEB-INF");
System.out.println(paths);//[/WEB-INF/lib, /WEB-INF/classes,/WEB-INF/web.xml]
注意:WEB-INF目錄下的lib和classes都是目錄,但是通過getResourcePaths()方法不會進一步會獲得lib和classes目錄下的資源路徑。