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

全國(guó)咨詢/投訴熱線:400-618-4000

Java培訓(xùn)之ServletContext讀取web應(yīng)用中的資源文件

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

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

1.獲取真實(shí)路徑

假如現(xiàn)在web應(yīng)用下有一個(gè)test.txt文件,想要在Servlet中獲取這個(gè)資源文件,就可以使用ServletContext的相關(guān)方法來(lái)獲取。下面我們通過(guò)一個(gè)案例來(lái)了解這個(gè)方法該如何使用,詳情請(qǐng)參考ServletContext獲取資源方法案例詳解,點(diǎn)擊此處 下載源代碼,如下所示:
(1)創(chuàng)建web應(yīng)用,Example15,該應(yīng)用下新建一個(gè)Servlet類,PathServlet,主要代碼如例1-1所示:
例1-1 PathServlet.java
public class PathServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
//”/”表示web應(yīng)用的根路徑
      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文件中配置的訪問(wèn)路徑是:“/PathServlet”。
(3)將web應(yīng)用Example15發(fā)布到Tomcat服務(wù)器,然后啟動(dòng)Tomcat服務(wù)器,在瀏覽器地址欄上輸入:http://localhost:8080/Example15/PathServlet,控制臺(tái)打印結(jié)果,如圖1-1所示:

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

2.獲取資源流

ServletContext不僅可以獲取資源的真實(shí)路徑,還可以獲取資源流,即將資源以輸入流的方式獲取,下面通過(guò)一個(gè)案例來(lái)詳細(xì)了解該方法的使用,具體如下:
(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)重新啟動(dòng)Tomcat服務(wù)器,在瀏覽器地址欄上輸入:http://localhost:8080/Example15/StreamServlet,控制臺(tái)顯示結(jié)果如圖1-2所示:

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

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)重新啟動(dòng)Tomcat服務(wù)器,在瀏覽器地址欄再次訪問(wèn)http://localhost:8080/Example15/PathServlet,控制臺(tái)打印結(jié)果如圖1-3所示:

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

本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://m.fskzgqt.cn/javaee
0 分享到:
和我們?cè)诰€交談!