servlet學習(七)ServletContext
阿新 • • 發佈:2018-11-03
一、問題
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的流物件需要使用類載入器來獲取。