更新時間:2022-04-12 來源:黑馬程序員 瀏覽量:
在實際開發中,有時候可能會需要讀取Web應用中的一些資源文件,比如配置文件,圖片等。為此,在ServletContext接口中定義了一些讀取Web資源的方法,這些方法是依靠Servlet容器來實現的。Servlet容器根據資源文件相對于Web應用的路徑,返回關聯資源文件的IO流、資源文件在文件系統的絕對路徑等。表3-5中列舉了ServletContext接口中用于獲取資源路徑的相關方法,具體如下:
ServletContext接口的常用方法
了解了ServletContext接口中用于獲得Web資源路徑的方法后,接下來通過一個案例,分步驟演示如何使用ServletContext對象讀取資源文件,具體如下:
(1)創建一個資源文件。在chapter03項目中右擊src目錄,選擇【New】—>【Other】選項,進入創建文件的界面,如圖3-40所示。
新建文件的界面單擊圖3-40所示的【Next】按鈕,進入填寫文件名稱的界面,如下圖所示。
填寫文件名稱的界面在上圖中,【File name】文本框中的內容為資源文件的名稱,在此,將創建的資源文件命名為itcast.properties,并且選擇存放的目錄為src目錄。單擊【Finish】按鈕,完成配置文件的創建。在創建好的itcast.properties文件中,輸入如下所示的配置信息:
Company = itcast Address= Beijing
需要注意的是,Eclipse中src目錄下創建的資源文件在Tomcat服務器啟動時會被復制到項目的WEB-INF/classes目錄下,如下圖所示。
WEB-INF/classes目錄
(2)編寫讀取itcast.properties資源文件的Servlet。在cn.itcast.servlet包中創建一個名稱為TestServlet06的Servlet類,該類的實現代碼如文件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)方法獲得了關聯itcast.properties資源文件的輸入流對象,其中的path參數必須以正斜線“/”開始,表示itcast.properties文件相對于Web應用的相對路徑。
(3) 啟 動Tomcat服 務 器 , 在 瀏 覽 器 的 地 址 欄 中 輸 入地址“http://localhost:8080/chapter03/TestServlet06”訪問TestServlet06,瀏覽器的顯示結果如圖3-43所示。
運行結果從圖3-43中可以看出,itcast.properties資源文件的內容被讀取出來。由此可見,使用ServletContext可以讀取到Web應用中的資源文件。
(4)有的時候,開發者需要獲取的是資源的絕對路徑。接下來,對文件3-9TestServlet06.java進行修改,通過使用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,然后使用這個路徑創建關聯itcast.properties文件的輸入流對象。
(5)啟動Tomcat服務器,在瀏覽器的地址欄中再次輸入地址“http://localhost:8080/chapter03/TestServlet06”訪問TestServlet06,同樣可以看到圖3-43所顯示的內容。