首頁(yè)技術(shù)文章正文

Servlet如何讀取Web資源文件?【操作演示】

更新時(shí)間:2022-04-12 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

在實(shí)際開(kāi)發(fā)中,有時(shí)候可能會(huì)需要讀取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ì)路徑等。表3-5中列舉了ServletContext接口中用于獲取資源路徑的相關(guān)方法,具體如下:

ServletContext接口的常用方法
ServletContext接口的常用方法

了解了ServletContext接口中用于獲得Web資源路徑的方法后,接下來(lái)通過(guò)一個(gè)案例,分步驟演示如何使用ServletContext對(duì)象讀取資源文件,具體如下:

(1)創(chuàng)建一個(gè)資源文件。在chapter03項(xiàng)目中右擊src目錄,選擇【New】—>【Other】選項(xiàng),進(jìn)入創(chuàng)建文件的界面,如圖3-40所示。

創(chuàng)建文件

新建文件的界面單擊圖3-40所示的【Next】按鈕,進(jìn)入填寫(xiě)文件名稱的界面,如下圖所示。

填寫(xiě)文件名稱

填寫(xiě)文件名稱的界面在上圖中,【File name】文本框中的內(nèi)容為資源文件的名稱,在此,將創(chuàng)建的資源文件命名為itcast.properties,并且選擇存放的目錄為src目錄。單擊【Finish】按鈕,完成配置文件的創(chuàng)建。在創(chuàng)建好的itcast.properties文件中,輸入如下所示的配置信息:

Company = itcast
Address= Beijing

需要注意的是,Eclipse中src目錄下創(chuàng)建的資源文件在Tomcat服務(wù)器啟動(dòng)時(shí)會(huì)被復(fù)制到項(xiàng)目的WEB-INF/classes目錄下,如下圖所示。

WEB-INF/classes目錄

(2)編寫(xiě)讀取itcast.properties資源文件的Servlet。在cn.itcast.servlet包中創(chuàng)建一個(gè)名稱為T(mén)estServlet06的Servlet類,該類的實(shí)現(xiàn)代碼如文件3-9所示。

文件TestServlet06.java

package cn.itcast.servlet;
import java.io.*;
import java.util.Properties;
import javax.servlet.*;
import javax.servlet.http.*;
public class TestServlet06 extends HttpServlet {
    public void doGet(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        ServletContext context = this.getServletContext();
        PrintWriter out = response.getWriter();
        //獲取相對(duì)路徑中的輸入流對(duì)象
        InputStream in = context
        .getResourceAsStream("/WEB-INF/classes/itcast.properties");
        Properties pros = new Properties();
        pros.load(in);
        out.println("Company=" + pros.getProperty("Company") + "<br>");
        out.println("Address=" + pros.getProperty("Address") + "<br>");
    }
    public void doPost(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

在文件3-9中,使用ServletContext的getResourceAsStream(String path)方法獲得了關(guān)聯(lián)itcast.properties資源文件的輸入流對(duì)象,其中的path參數(shù)必須以正斜線“/”開(kāi)始,表示itcast.properties文件相對(duì)于Web應(yīng)用的相對(duì)路徑。

(3) 啟 動(dòng)Tomcat服 務(wù) 器 , 在 瀏 覽 器 的 地 址 欄 中 輸 入地址“http://localhost:8080/chapter03/TestServlet06”訪問(wèn)TestServlet06,瀏覽器的顯示結(jié)果如圖3-43所示。

啟 動(dòng)Tomcat服 務(wù) 器

運(yùn)行結(jié)果從圖3-43中可以看出,itcast.properties資源文件的內(nèi)容被讀取出來(lái)。由此可見(jiàn),使用ServletContext可以讀取到Web應(yīng)用中的資源文件。

(4)有的時(shí)候,開(kāi)發(fā)者需要獲取的是資源的絕對(duì)路徑。接下來(lái),對(duì)文件3-9TestServlet06.java進(jìn)行修改,通過(guò)使用getRealPath(String path)方法獲取資源文件的絕對(duì)路徑,修改后的代碼如文件3-10所示。

文件3-10TestServlet06.java

package cn.itcast.servlet;
import java.io.*;
import java.util.Properties;
import javax.servlet.*;
import javax.servlet.http.*;
public class TestServlet06 extends HttpServlet {
    public void doGet(HttpServletRequest request, 
        HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        ServletContext context = this.getServletContext();
        //獲取文件絕對(duì)路徑
        String path = context
                    .getRealPath("/WEB-INF/classes/itcast.properties");
        FileInputStream in = new FileInputStream(path);
        Properties pros = new Properties();
        pros.load(in);
        out.println("Company=" + pros.getProperty("Company") + "<br>");
        out.println("Address=" + pros.getProperty("Address") + "<br>");
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

在文件3-10中,使用ContextServlet對(duì)象的getRealPath(String path)方法獲得itcast.properties資源文件的絕對(duì)路徑path,然后使用這個(gè)路徑創(chuàng)建關(guān)聯(lián)itcast.properties文件的輸入流對(duì)象。

(5)啟動(dòng)Tomcat服務(wù)器,在瀏覽器的地址欄中再次輸入地址“http://localhost:8080/chapter03/TestServlet06”訪問(wèn)TestServlet06,同樣可以看到圖3-43所顯示的內(nèi)容。



猜你喜歡:

Servlet是用來(lái)做什么的?Servlet技術(shù)的特點(diǎn)

servlet事件監(jiān)聽(tīng)器工作步驟介紹

ServletFileUpload類方法有哪些?

Java培訓(xùn)之ServletContext的介紹與獲取

黑馬程序員Java高級(jí)軟件工程師培訓(xùn)

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!