ServletContext總結

今天我們學習的是ServletContext的應用。

   WEB容器在啓動時,它會爲每個WEB應用程序都創建一個對應的ServletContext對象,它代表當前web應用。

   ServletConfig對象中維護了ServletContext對象的引用,開發人員在編寫servlet時,可以通過ServletConfig.getServletContext方法獲得ServletContext對象。

  由於一個WEB應用中的所有Servlet共享同一個ServletContext對象,因此Servlet對象之間可以通過ServletContext對象來實現通訊。ServletContext對象通常也被稱之爲context域對象。

1.多個Servlet通過ServletContext對象實現數據共享。

InitServletService方法中利用ServletContext對象存入需要共享的數據

/*獲取ServletContext對象*/  

ServletContext context = this.getServletContext();   

//存入共享的數據    

context.setAttribute("name", "haha"); 

在其它的Servlet中利用ServletContext對象獲取共享的數據   

/*獲取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>  

DemoServletdoPost方法中測試獲取初始化參數的步驟如下:   

/*獲取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);   

注意:forwardinclude的區別 

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);   

              }   

發佈了33 篇原創文章 · 獲贊 14 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章