1. 程式人生 > >ServletConfig和ServletContext以及讀取資源的方法

ServletConfig和ServletContext以及讀取資源的方法

ServletConfig物件

當servlet配置了初始化引數後,web容器在建立servlet例項物件時,會自動將這些初始化引數封裝到ServletConfig物件中,並在呼叫servlet的init方法時,將ServletConfig物件傳遞給servlet。進而,程式設計師通過ServletConfig物件就可以得到當前servlet的初始化引數資訊。

//獲得配置文件中<init-param>標籤下name對應的value
this.getServletConfig().getInitParameter("name");
//獲取所有初始化引數
Enumeration e = this
.getServletConfig().getInitParameterNames(); while(e.hasMoreElements()){ String name = (String) e.nextElement(); String value = this.getServletConfig().getInitParameter(name); System.out.println(name + "=" + value); }

一般應用於
1.獲取字符集編碼
String charset = this.getServletConfig().getInitParameter("charset");


2.獲得資料庫連線資訊
String url = this.getServletConfig().getInitParameter("url");
String username = this.getServletConfig().getInitParameter("username");
String password = this.getServletConfig().getInitParameter("password");
3.獲得配置檔案
String configFile = this.getServletConfig().getInitParameter("config");

ServletContext物件

web容器在啟動時,它會為每個WEB應用程式都建立一個對應的ServletContext物件,它代表當前web應用。當應用關閉(或reload tomcat)時,自動銷燬。
1.多個servlet通過ServletConfig()實現資料共享
由於一個web應用中的所有Servlet共享同一個ServletContext物件,因此Servlet物件之間可以通過ServletContext物件來實現通訊。ServletContext物件通常也被稱之為context域物件。

//servletContext域物件
ServletContext servletcontext = this.getServletContext();
//向域中存了一個屬性
servletcontext.setAttribute("String",object);

//另一個servlet
ServletContext servletcontext = this.getServletContext();
//獲取域中的屬性
String value = (String) context.getAttribute("String"); 

2.通過servletContext物件獲取到整個web應用的配置資訊
獲取單個servlet配置資訊用servletConfig,當配置資訊是全體時:

<context-param>
    <param-name>name</param-name>
    <param-value>huangxin</param-value>
</context-param>

那麼用 this.getServletContext().getInitParameter("name"),可以取出配置資訊。
3.通過servletContext物件實現轉發
this.getServletContext().getRequestDispatcher("/...").forward(request, response);
4.通過servletContext物件讀取資原始檔
在web工程中,我們一般來說,是不能採用傳統方式讀取配置檔案的,因為相對的是jvm的啟動目錄(tomcat的bin目錄),所以我們要使用web絕對目錄來獲取配置檔案的地址。
1)使用ServletContext的getResourceAsStream方法:返回資原始檔的讀取位元組流

//db.properties在webRoot目錄下
InputStream in = this.getServletContext().getResourceAsStream("/db.properties");
Properties prop = new Properties();  
prop.load(in);
String url = prop.getProperty("url");

2)使用ServletContext的getRealPath方法,獲得檔案的完整絕對路徑path,再使用位元組流讀取path下的檔案(除了可以獲取資料,還可以獲取資原始檔的名稱)

//檔案imgs在webRoot目錄下
String path = this.getServletContext().getRealPath("/imgs/Sunset.jpg");
FileInputStream in = new FileInputStream(path);
Properties prop = new Properties();
prop.load(in);
String url = prop.getProperty("url");

3)當資原始檔放在src路徑下,上述方法不可行,應該用類載入器讀取

類名.class.getClassLoader().getResource("db.properties");