WEB容器在啓動時,它會爲每一個WEB應用程序都建立一個對應的ServletContext對象,它表明當前web應用。 mysql
ServletConfig對象中維護了ServletContext對象的引用,開發人員在編寫servlet時,能夠經過ServletConfig.getServletContext方法得到ServletContext對象。 web
因爲一個WEB應用中的全部Servlet共享同一個ServletContext對象,所以Servlet對象之間能夠經過ServletContext對象來實現通信。ServletContext對象一般也被稱之爲context域對象。 sql
1.多個Servlet經過ServletContext對象實現數據共享。 app
在InitServlet的Service方法中利用ServletContext對象存入須要共享的數據 jsp
/*獲取ServletContext對象*/ 學習
ServletContext context = this.getServletContext(); 測試
//存入共享的數據 this
context.setAttribute("name", "haha"); url
在其它的Servlet中利用ServletContext對象獲取共享的數據 spa
/*獲取ServletContext對象*/
ServletContext context = this.getServletContext();
//獲取共享的數據
String name = context.getAttribute("name");
System.out.println("共享的內容值是:"+name);
2.獲取WEB應用的初始化參數。
在web.xml文件中配置須要初始化的參數信息。
<web-app>
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/4g</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>1314qr</param-value>
</context-param>
<context-param>
<param-name>user</param-name>
<param-value>root</param-value>
</context-param>
</web-app>
在DemoServlet的doPost方法中測試獲取初始化參數的步驟以下:
/*獲取ServletContext對象*/
ServletContext context = this.getServletContext();
/*獲取初始化參數*/
//獲取指定名稱的初始化參數
String url = context.getInitParameter("url");
//獲取web.xml文件中全部的初始化應用參數
Enumeration<String> enumer = context.getInitParameterNames();
while(enumer.hasMoreElements()){
String name = enumer.nextElement();
String value = context.getInitParameter(name);
System.out.println(name+"=========="+value);
}
2.實現Servlet的轉發:
在測試的Servlet中實現轉發的步驟以下:
/*要利用ServletContext對象實現轉發獲取對象*/
ServletContext context = this.getServletContext();
//在request對象中存入name屬性
request.setAttribute("name", "haha");
/*根據轉發的地址獲取 RequestDispatcher對象*/
RequestDispatcher rd = context.getRequestDispatcher("/index.jsp");
//調用轉發方法 如下采用任意方法便可
rd.forward(request, response);
//rd.include(request, response);
注意:forward與include的區別
forward方法是把請求的內容轉發到另外的一個servlet.而include是把另外一個servlet處理事後的內容拿過來.
(forward方法調用後在響應中的沒有提交的內容被自動消除。將請求轉發給其餘的Servlet後,由
被調用的Servlet負責對請求作出響應,而原先Servlet的執行則終止。
include方法使原先的Servlet和轉發到的Servlet均可以輸出響應信息,即原先的Servlet還能夠繼續輸出響應信息)
3.利用ServletContext對象讀取資源文件。
讀取資源文件(properties文件(屬性文件))的三種方式
配置的properties的內容以下:
url=jdbc\:mysql\://localhost\:3306/3g ;
user=root;
password=root;
獲取實現的代碼以下:
/*獲取ServletContext對象*/
ServletContext context = this.getServletContext();
//第一種方式
URL url = context.getResource("WEB-INF/classes/db.properties");
InputStream is = url.openStream();
//第二種方式
/*讀取db.properties文件*/
String path =context.getRealPath("WEB-INF/classes/db.properties");
/*根據文件的路徑 構建文件對象*/
File file = new File(path);
/*根據file文件對象 建立輸入流*/
InputStream is = new FileInputStream(file);
//第三種方式
InputStream is = context.getResourceAsStream("WEB-INF/classes/db.properties ");
以三種方式任意一種能夠:
/*解析properties的文件*/
Properties prop = new Properties();
//從輸入流中讀取屬性列表(鍵和元素對)。
prop.load(is);
Set<String> set = prop.stringPropertyNames();
//遍歷set集合
Iterator<String> it = set.iterator();
while(it.hasNext()){
String key = it.next();
String value = prop.getProperty(key);
System.out.println(key+"-----"+value);
}