教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Java培訓之ServletContext讀取web應用中的資源文件

更新時間:2016年07月25日18時01分 來源:傳智播客Java培訓學院 瀏覽次數(shù):

有時候,我們希望讀取web應用中的一些資源文件,比如配置文件、圖片等等。為此,在ServletContext接口中提供了一些讀取web資源的方法,這些方法是依靠Servlet容器來實現(xiàn)的。Servlet容器根據(jù)資源文件相對于web應用的路徑,返回關聯(lián)資源文件的IO流、資源文件在文件系統(tǒng)的絕對路徑等。下面我們來一一了解這些方法,具體如下:

1.獲取真實路徑

假如現(xiàn)在web應用下有一個test.txt文件,想要在Servlet中獲取這個資源文件,就可以使用ServletContext的相關方法來獲取。下面我們通過一個案例來了解這個方法該如何使用,詳情請參考ServletContext獲取資源方法案例詳解,點擊此處 下載源代碼,如下所示:
(1)創(chuàng)建web應用,Example15,該應用下新建一個Servlet類,PathServlet,主要代碼如例1-1所示:
例1-1 PathServlet.java
public class PathServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
//”/”表示web應用的根路徑
      System.out.println("ServletContext get real path:");
        ServletContext servletContext=this.getServletContext();
        String path=servletContext.getRealPath("/");
        System.out.println(path);
        String indexPath=servletContext.getRealPath("/index.jsp");
        System.out.println(indexPath);
    }
}
(2)PathServlet在web.xml文件中配置的訪問路徑是:“/PathServlet”。
(3)將web應用Example15發(fā)布到Tomcat服務器,然后啟動Tomcat服務器,在瀏覽器地址欄上輸入:http://localhost:8080/Example15/PathServlet,控制臺打印結(jié)果,如圖1-1所示:

圖1-1 控制臺打印結(jié)果
由圖1-1可知,ServletContext接口的getRealPath(String path)方法返回的是資源文件在服務器文件系統(tǒng)上的真實路徑。參數(shù)path代表資源文件的虛擬路徑,它應該以正斜線(/)開始,“/“表示當前web應用的根目錄,也可以不以“/“開始,但是建議大家一斜線開始,這樣比較規(guī)范一些。

2.獲取資源流

ServletContext不僅可以獲取資源的真實路徑,還可以獲取資源流,即將資源以輸入流的方式獲取,下面通過一個案例來詳細了解該方法的使用,具體如下:
(1)修改PathServlet,在該類的doGet()方法中添加如下代碼,如例1-3所示:
例1-3 StreamServlet.java
  //使用ServletContext獲取資源流
        System.out.println("ServletContext get inputstream:");
        InputStream input=servletContext.getResourceAsStream("/index.jsp");
        System.out.println(input);
(2)重新啟動Tomcat服務器,在瀏覽器地址欄上輸入:http://localhost:8080/Example15/StreamServlet,控制臺顯示結(jié)果如圖1-2所示:

圖1-2 控制臺打印結(jié)果
由圖1-2可知,ServletContext接口的getResouceAsStream(String path)方法可以獲取path指定資源的流,path路徑可以不以“/”開頭,類似于getRealPath(String path)方法。其實這個方法也可以理解為,先獲得資源的真實路徑,再使用InputStream input=new FileInputStream(new File(servletContext.getRealPath(path)))創(chuàng)建一個輸入流。

3.獲取指定目錄下的所有資源路徑

使用ServletContext可以獲取指定目錄下的所有資源路徑,例如獲取WEB-INF目錄下的所有資源路徑:
(1)修改PathServlet,在該類的doGet()方法中添加如下代碼,如例1-4所示:
例1-5 getResourcePaths()方法使用
//使用ServletContext獲取指定目錄下所有資源路徑
        System.out.println("ServletContext get all path:");
        Set<String> paths=servletContext.getResourcePaths("WEB-INF");
        System.out.println(paths);
 (2)重新啟動Tomcat服務器,在瀏覽器地址欄再次訪問http://localhost:8080/Example15/PathServlet,控制臺打印結(jié)果如圖1-3所示:

圖1-3 控制臺打印結(jié)果
由圖1-3可知,通過ServletContext接口的getResourcePaths(String path)方法,將WEB-INF目錄下的所有資源路徑都獲取到了,該方法的返回值是一個Set集合,需要注意的是WEB-INF目錄下的lib和classes都是目錄,但是通過getResourcePaths()方法不會進一步會獲得lib和classes目錄下的資源路徑。而且,該方法的參數(shù)一定要以”/”開頭,否則會報錯。

本文版權(quán)歸傳智播客Java培訓學院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客Java培訓學院
首發(fā):http://metathetuscanyresort.com/javaee
0 分享到:
和我們在線交談!