1. 程式人生 > >servlet學習(七)ServletContext

servlet學習(七)ServletContext

一、問題

session可以解決同一個使用者之間不同請求的資料共享問題,那麼不同使用者之間的需要資料共享怎麼辦?

二、解決

使用ServletContext物件

三、原理

ServletContext物件是由伺服器進行建立的,也就是說一個專案裡面只有一個ServletContext物件,不同的使用者獲取到的ServletContext物件都是同一個,該ServletContext物件由所有使用者所共有。

四、特點

伺服器進行建立,使用者共享,一個專案只有一個。

五、生命週期

伺服器啟動->伺服器關閉

六、作用域

整個專案內

七、使用

1.獲取ServletContext物件

	//獲取ServletContext物件的四種方式
		ServletContext sc1=this.getServletContext();
		ServletContext sc2=req.getSession().getServletContext();
		ServletContext sc3=req.getServletContext();
		ServletContext sc4=this.getServletConfig().getServletContext();
		System.out.println(sc1==sc2);//true
		System.out.println(sc1==sc3);//true
		System.out.println(sc1==sc4);//true

2.使用作用域進行資料共享流轉

		//資料存入
		sc1.setAttribute("num", 1);
		//取出資料
		int num=(int) sc1.getAttribute("num");
		System.out.println(num);//1

3.獲取WebRoot/WebContent下資源的絕對路徑

	//獲取WebContent下資源的絕對路徑
		String path=sc1.getRealPath("1.jsp");
		System.out.println(path);//F:\Etomcat\webapps\018-ServletXuexi\1.jsp

4.獲取web.xml中的全域性配置

作用:將靜態資料和程式碼進行解耦

先配置web.xml中的資料,如下所示:

注意:一個  <context-param>  </context-param>之間只能存放一個鍵值對,多組宣告多個儲存。

  <context-param>
  <param-name>charset</param-name>
  <param-value>utf-8</param-value>
  </context-param>
   <context-param>
  <param-name>type</param-name>
  <param-value>text/html</param-value>
  </context-param>
//獲取web.xml中的全域性配置
		String type=sc1.getInitParameter("type");
		System.out.println(type);//text/html
		String charset=sc1.getInitParameter("charset");
		System.out.println(charset);//utf-8

或者

Enumeration enumeration=sc1.getInitParameterNames();
		while(enumeration.hasMoreElements()) {
			String name=(String) enumeration.nextElement();
			String value=sc1.getInitParameter(name);
			System.out.println(name+" "+value);
		}
//輸出
//charset utf-8
//type text/html

5.獲取webroot/webcontent下專案資源流物件

	InputStream inputStream=sc1.getResourceAsStream("1.jsp");
		System.out.println(inputStream);//[email protected]

注意:此種方式只能獲取專案根目錄下的資源流物件,class的流物件需要使用類載入器來獲取。