一、ServletConfig對象 當(dāng)servlet配置了初始化參數(shù)后,web容器在創(chuàng)建servlet實例對象時,會自動將這些初始化參數(shù)封裝到ServletConfig對象中,并在調(diào)用servlet的init方法時,將ServletConfig對象傳遞給servlet。進而,程序員通過ServletConfig對象就可以得到當(dāng)前servlet的初始化參數(shù)信息。 首先,需要創(chuàng)建私有變量:private ServletConfig config = null; 其次,要重寫init方法,傳入config,令this.config = config;從而獲得ServletConfig對象 最后,就可以獲得<init-parm>中的配置信息了 //獲取初始化參數(shù) //獲得配置文檔中<init-param>標(biāo)簽下name對應(yīng)的value 在開發(fā)中ServletConfig的作用有如下三個: 1)獲得字符集編碼 String charset =this.config.getInitParameter("charset"); String username =this.config.getInitParameter("username"); String password =this.config.getInitParameter("password"); 3)獲得配置文件 String configFile =this.config.getInitParameter("config");
WEB容器在啟動時,它會為每個WEB應(yīng)用程序都創(chuàng)建一個對應(yīng)的ServletContext對象,它代表當(dāng)前web應(yīng)用。 1)ServletContext對象應(yīng)用1:多個web組件之間使用它實現(xiàn)數(shù)據(jù)共享 ServletConfig對象中維護了ServletContext對象的引用,開發(fā)人員在編寫servlet時,可以通過ServletConfig.getServletContext方法獲得ServletContext對象。由于一個WEB應(yīng)用中的所有Servlet共享同一個ServletContext對象,因此Servlet對象之間可以通過ServletContext對象來實現(xiàn)通訊。ServletContext對象通常也被稱之為context域?qū)ο蟆?/p> 在serlvet中,可以使用如下語句來設(shè)置數(shù)據(jù)共享 ServletContext context =this.getServletContext(); //servletContext域?qū)ο?br> context.setAttribute("data","共享數(shù)據(jù)"); //向域中存了一個data屬性 在另一個servlet中,可以使用如下語句來獲取域中的data屬性 ServletContext context =this.getServletContext(); 2)通過servletContext對象獲取到整個web應(yīng)用的配置信息 String url =this.getServletContext().getInitParameter("url"); String username =this.getServletContext().getInitParameter("username"); 3)通過servletContext對象實現(xiàn)servlet轉(zhuǎn)發(fā) 由于servlet中的java數(shù)據(jù)不易設(shè)置樣式,所以serlvet可以將java數(shù)據(jù)轉(zhuǎn)發(fā)到JSP頁面中進行處理 this.getServletContext().setAttribute("data","serlvet數(shù)據(jù)轉(zhuǎn)發(fā)"); 4)通過servletContext對象讀取資源文件 在實際開發(fā)中,用作資源文件的文件類型,通常是:xml、properties,而讀取xml文件必然要進行xml文檔的解析,所以以下例子只對properties文件進行讀取(在一個web工程中,只要涉及到寫地址,建議最好以/開頭) 在web工程中,我們一般來說,是不能采用傳統(tǒng)方式讀取配置文件的,因為相對的是jvm的啟動目錄(tomcat的bin目錄),所以我們要使用web絕對目錄來獲取配置文件的地址 讀取資源文件的三種方式: 第一種:使用ServletContext的getResourceAsStream方法:返回資源文件的讀取字節(jié)流 InputStream in =this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties"); prop.load(in); 第二種:使用ServletContext的getRealPath方法,獲得文件的完整絕對路徑path,再使用字節(jié)流讀取path下的文件 String path =this.getServletContext().getRealPath("/WEB-INF/classes/db.properties"); //相比第一種方法的好處是:除了可以獲取數(shù)據(jù),還可以獲取資源文件的名稱 第三種:使用ServletContext的getResource方法,獲得一個url對象,調(diào)用該類的openStream方法返回一個字節(jié)流,讀取數(shù)據(jù) URL url =this.getServletContext().getResource("/WEB-INF/classes/db.properties"); 5)web工程中,不同位置的資源文件的讀取方式 一、當(dāng)資源文件在包下面時 6)在非servlet程序中如何讀取配置文件:用類裝載器 1)用類裝載方式讀取 in =StudentDao.class.getClassLoader().getResourceAsStream("cn/itcast/context/db.properties"); URL url =StudentDao.class.getClassLoader().getResource("db.properties"); 這樣可以獲得資源文件名稱:String path = url.getPath(); 3)注意:在線程休眠過程中,即使改動了資源文件,獲取到的還是原始內(nèi)容 解決方案: URL url =StudentDao.class.getClassLoader().getResource("db.properties");
4)注意:用類裝載器讀取資源文件時,千萬要注意,資源文件絕對不能太大,否則極易導(dǎo)致內(nèi)存溢出 |
|