1、WEB容器在啟動(dòng)時(shí)所刀,為每個(gè)web應(yīng)用程序創(chuàng)建一個(gè)相應(yīng)的ServletContext對(duì)象捞挥,它代表當(dāng)前web應(yīng)用浮创,停掉服務(wù)器或者從服務(wù)器中刪除某個(gè)web應(yīng)用時(shí)被銷毀砌函。
2溜族、得到servlet方式:
? ? ? ?1)可通過ServletConfig.getServletContext方法獲得ServletContext對(duì)象,即:
? ? ? ? ? ? ? ? ? ? ServletContext context=this.getServletConfig().getServletContext;
? ? ? ?2)現(xiàn)有的類繼承HttpServlet垦沉,類里寫:
? ? ? ? ? ? ? ? ? ? ? context=this.getServletContext()
3、域就是容器寡壮,context域就是容器的范圍讹弯,只要往容器里面放東西,整個(gè)web應(yīng)用程序范圍內(nèi)都取得出來闸婴,如:this.getServletContext.setAttribute("xx",xx);設(shè)置的芍躏,別的servlet也能取到,要把數(shù)據(jù)帶給1.jsp頁面对竣,不要用this.getServletContext.setAttribute("xx",xx);庇楞,因?yàn)榇娴臄?shù)據(jù)被整個(gè)web應(yīng)用程序共享,如果在跳轉(zhuǎn)到1.jsp頁面之前調(diào)用了別的servlet設(shè)置了this.getServletContext.setAttribute("xx",xx);跳轉(zhuǎn)到2.jsp頁面吕晌,會(huì)將之前容器中設(shè)置的數(shù)據(jù)覆蓋临燃,這樣取不到想取的值
4、servletContext域:
1)這是一個(gè)容器
2)servletContext域就說明了這個(gè)容器作用范圍膜廊,也就應(yīng)用程序范圍
5、應(yīng)用:
? ?1)多個(gè)servlet通過ServletContext對(duì)象實(shí)現(xiàn)數(shù)據(jù)共享
? ?2)獲取WEB應(yīng)用的初始化參數(shù)
? ?3)實(shí)現(xiàn)servlet的轉(zhuǎn)發(fā)
? ?4)利用ServletContext對(duì)象讀取資源文件
6蹬跃、配置文件通常有兩種:.properties文件或.xml文件配置铆铆,數(shù)據(jù)之前沒有關(guān)系用properties配置,數(shù)據(jù)之? ?間有關(guān)系用xml配置
配置文件(如src下面的db.properties)
1)通過servletContext讀取:(常用)
InputStream in=this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties"),
即使配置文件在src下薄货,也不是通過src下路徑讀取的,因?yàn)镴ava工程是發(fā)布到服務(wù)器中的荐吵,讀取配置文件實(shí)際上是服務(wù)器在讀取,Java工程發(fā)布后在服務(wù)器中是以classes文件存在所以路徑應(yīng)為classes下db.properties所在的路徑
路徑可以看配置文件在文件夾里看它存在哪個(gè)位置
2)創(chuàng)建Properties對(duì)象:Properties props=new Properties();以map形式存儲(chǔ)先煎,如:鍵值對(duì)(username,*****),(password,******)......
3)通過流將獲取到的路徑中的信息讀到對(duì)象中去:props.load(in);
4)讀取配置信息,如:
String username=props.getProperty("username");? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String password=props.getProperty("password");
通過傳統(tǒng)方式讀纫>搿:(不可行)
FileInputStream in = new FileInputStream("classes/db.properties");? 錯(cuò)誤占锯,讀取不到,路徑是相對(duì)于服務(wù)器中的java虛擬機(jī)的啟動(dòng)目錄的路徑消略,即相對(duì)的是虛擬機(jī)tomcat下的bin目錄,若想訪問却紧,則每次需要在bin目錄下創(chuàng)建一個(gè)classes的文件夾胎撤,將db.properties復(fù)制進(jìn)去,此時(shí)通過傳統(tǒng)方式就能讀取到伤提,所以在實(shí)際開發(fā)中最好不要用傳統(tǒng)方式讀取,應(yīng)該用ServletContext讀戎啄小;若想通過傳統(tǒng)方式讀取痴昧,可以通過ServletContext的getRealPath獲得資源的絕對(duì)路徑后再通過傳統(tǒng)方式讀取文件(當(dāng)需要讀取客戶端穿過來的資源文件名稱時(shí)可用這種方式)