更新時間:2022-04-12 來源:黑馬程序員 瀏覽量:
在實(shí)際開發(fā)中,有時候可能會需要讀取Web應(yīng)用中的一些資源文件,比如配置文件,圖片等。為此,在ServletContext接口中定義了一些讀取Web資源的方法,這些方法是依靠Servlet容器來實(shí)現(xiàn)的。Servlet容器根據(jù)資源文件相對于Web應(yīng)用的路徑,返回關(guān)聯(lián)資源文件的IO流、資源文件在文件系統(tǒng)的絕對路徑等。表3-5中列舉了ServletContext接口中用于獲取資源路徑的相關(guān)方法,具體如下:
ServletContext接口的常用方法
了解了ServletContext接口中用于獲得Web資源路徑的方法后,接下來通過一個案例,分步驟演示如何使用ServletContext對象讀取資源文件,具體如下:
(1)創(chuàng)建一個資源文件。在chapter03項(xiàng)目中右擊src目錄,選擇【New】—>【Other】選項(xiàng),進(jìn)入創(chuàng)建文件的界面,如圖3-40所示。
新建文件的界面單擊圖3-40所示的【Next】按鈕,進(jìn)入填寫文件名稱的界面,如下圖所示。
填寫文件名稱的界面在上圖中,【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ù)器啟動時會被復(fù)制到項(xiàng)目的WEB-INF/classes目錄下,如下圖所示。
WEB-INF/classes目錄
(2)編寫讀取itcast.properties資源文件的Servlet。在cn.itcast.servlet包中創(chuàng)建一個名稱為TestServlet06的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(); //獲取相對路徑中的輸入流對象 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資源文件的輸入流對象,其中的path參數(shù)必須以正斜線“/”開始,表示itcast.properties文件相對于Web應(yīng)用的相對路徑。
(3) 啟 動Tomcat服 務(wù) 器 , 在 瀏 覽 器 的 地 址 欄 中 輸 入地址“http://localhost:8080/chapter03/TestServlet06”訪問TestServlet06,瀏覽器的顯示結(jié)果如圖3-43所示。
運(yùn)行結(jié)果從圖3-43中可以看出,itcast.properties資源文件的內(nèi)容被讀取出來。由此可見,使用ServletContext可以讀取到Web應(yīng)用中的資源文件。
(4)有的時候,開發(fā)者需要獲取的是資源的絕對路徑。接下來,對文件3-9TestServlet06.java進(jìn)行修改,通過使用getRealPath(String path)方法獲取資源文件的絕對路徑,修改后的代碼如文件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(); //獲取文件絕對路徑 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對象的getRealPath(String path)方法獲得itcast.properties資源文件的絕對路徑path,然后使用這個路徑創(chuàng)建關(guān)聯(lián)itcast.properties文件的輸入流對象。
(5)啟動Tomcat服務(wù)器,在瀏覽器的地址欄中再次輸入地址“http://localhost:8080/chapter03/TestServlet06”訪問TestServlet06,同樣可以看到圖3-43所顯示的內(nèi)容。
Servlet是用來做什么的?Servlet技術(shù)的特點(diǎn)