1、ServletContext簡介html
當Servlet容器在啓動一個web應用時,會爲它建立惟一的ServletContext對象。當Servlet容器終止一個web應用,則就會銷燬它的ServletContext對象。java
ServletContext,是一個全局的存儲信息的空間,服務器開始,其就存在,服務器關閉,其才釋放。request,一個用戶能夠多個,session,一個用戶一個,而servletContext,全部用戶公用一個。因此爲了節省空間,提升效率ServletContext中要放必須的、重要的、全部用戶須要共享的線程又是安全的一些信息。web
換種方式說,運行在Java虛擬機中每個web應用程序都有一個與之相關的Servlet上下文。ServletContext對象時Web服務器中的一個已知根路徑,Servlet上下文被定位於http://localhost:8080/項目名。/項目名 稱爲上下文路徑,一個ServletContext對象表示了一個Web應用程序的上下文。數據庫
Servlet上下文:Servlet上下文提供對應用程序中全部Servlet所共有的各類資源和功能的訪問,Servlet上下文API用於設置應用程序中全部Servlet共有的信息,Servlet可能須要共享他們之間的共有信息,運行於同一服務器的Servlet有時也會共享資源,如jsp頁面、文件和其餘Servlet、安全
舉例說明:服務器
如,作一個購物類網站,要從數據庫中提取物品信息,若是用session保存這些物品信息,每一個用戶都訪問一遍數據庫,效率就過低了;因此要用servlet上下文來保存,在服務器開始時,就訪問數據庫,將物品信息存入servlet上下文中,這樣,每一個用戶只用從上下文中讀入物品信息就好了。session
另外在jsp文件中,application是ServletContext的實例,由jsp容器默認建立,在servlet中調用getServletContext()獲得ServletContext的實例。每一個應用都會有一個ServletContext對象與之關聯,當容器分佈在多個虛擬機上時,web應用在所分佈的每一個虛擬機上都擁有一個ServletContext實例。app
2、ServletContext接口簡介jsp
ServletContext接口定義了運行servlet的web應用的servlet視圖。容器供應商負責提供servlet容器內ServletContext接口的實現。設置ServletContext對象,servlet能夠記錄事件日誌,獲取資源的URL地址,而且設置和保存上下文內能夠訪問的其餘Servlet的屬性。分佈式
獲取ServletContext實例:
一、經過ServletConfig接口的getServletContext()方法得到。
二、經過GenericServlet抽象類的getServletContext()方法得到,不過看源碼發現這個方法其實也是調用了ServletConfig的getServletContext()方法。
三、HttpServlet類繼承了GenericServlet抽象類,因此也能夠經過getServletContext()獲取。
3、ServletContext用途:
一、訪問web應用的初始化參數和屬性:
getInitParameter
getInitParameterNames
應用開發人員利用初始化參數傳遞配置信息,典型的例子是web管理員的e-mail地址或一個持有關鍵數據的系統名稱。
在web.xml文件中配置初始化參數:
<context-param> <param-name>email</param-name> <param-value>xxxxxx</param-value> </context-param>
在servlet中訪問初始化參數:
String email=this.getServletContext().getInitParameter("email"); System.out.println(email);
二、上下文屬性:
servlet能夠經過名稱將對象屬性綁定到上下文,任何綁定到上下文屬性均可以被同一個web應用的其餘 servlet使用。
setAttribute
getAttribute
getAttributeNames
romoveAttribute
當信息須要在運行於分佈式環境中的servlet之間共享時,信息被放入會話中,存儲於數據庫中,或者存儲於EJB組件中。
三、訪問web應用的靜態資源
使用servletContext接口能夠直接訪問web應用中的靜態內容文檔接口,包括html,gif和jpeg文件。
getResource
getResourceAsStream
這兩個方法的參數都是以"/"開頭的字符串,表示資源相對於context根的相對路徑。文檔結構能夠存在於服務器文件系統,或是在遠程服務器上,或其餘位置。可是不能夠用來得到動態資源,好比getResource("/index.jsp"),這個方法將返回該jsp文件的源碼,而不是動態頁面。
web應用資源的完整列表可使用getResourcePaths(String path)方法返回。
另外,每一個servlet上下文都須要一個臨時的存儲目錄,servlet容器必須爲每一個servlet上下文提供一個私有的臨時目錄,而且使它能夠經過javax.servlet.context.tempdir上下文屬性可用。