在Servlet相干的對象中還有1個ServletContext對象,很多時候我們分不清楚1些長得像的東東,是由于我們不了解它們的來歷.消除疑惑,我們先來看看這個對象是甚么時候產生的.
先來看個簡單的圖:
容器啟動1個Web利用時為之創建ServletContext對象,每一個Web利用都有唯1的ServletContext對象,它相當于Servlet們與容器通訊的接口,管理訪問容器的各種資源.如,在Web利用范圍內同享數據,訪問當前Web利用的資源,訪問容器中的其它利用,訪問服務器真個文件系統資源等.
而ServletConfig呢,也用1張簡單的圖來表示下:
容器啟動Web利用也就是創建完ServletContext后,初始化所有的Filter,對需要啟動時就初始化的Servlet進行初始化.對當前不要求初始化的Servlet在要求時初始化.在初始化1個Servlet對象時,創建1個ServletConfig對象,容器調用Servlet的初始化方法時會把包括這個Servlet的初始化參數信息的ServletConfig對象當作參數傳進去.
可見,ServletConfig和ServletContext根本是在不同的時間,由于不同的情況才產生的.下面這張圖更清楚地反應了這1前后順序.
而且,我們還可以看出這里有1個Web利用,1個ServletContext,卻有不止1個Servlet和ServletConfig.這說明了甚么呢?
ServletContext能夠在Web利用范圍內活動,Web利用范圍是甚么意思呢?第1,表示由Web利用的生命周期構成的時間段.第2,表示在Web利用的生命周期內所有Web組件的集合.
ServletConfig可以在特定Servlet范圍內活動,這么說,從該Servlet實例化ServletConfig就隨著它,其它Servlet訪問不到這個ServletConfig.
想一想我們之前在web.xml中的配置,有<context-param> 和<servlet>兩個元素.如果1個參數要在全部Web利用中用呢,就寫在<context-param> 節點下,如果只在1個Servlet中用呢,就寫在<servlet>節點中.回想下.