ServletContext總結

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

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

   ServletConfig對象中維護了ServletContext對象的引用,開發人員在編寫servlet時,能夠經過ServletConfig.getServletContext方法得到ServletContext對象。 web

  因爲一個WEB應用中的全部Servlet共享同一個ServletContext對象,所以Servlet對象之間能夠經過ServletContext對象來實現通信。ServletContext對象一般也被稱之爲context域對象。 sql

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

InitServletService方法中利用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>  

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

              }   

相關文章
相關標籤/搜索