Servlet Specification V2.4——SRV.3 Servlet Context

SRV.3 Servlet Context

SRV.3.1 Introduction to the ServletContext Interface

        ServletContext接口定義了一個web應用程序的servlet視圖,這些servlet就運行在此web應用程序中。Container的提供者負責提供container中ServletContext接口的實現。使用ServletContext對象,servlet能夠記錄時間,取得資源的引用URL,設置並存儲context中其它servlet也能夠可訪問的attribute(set and store attributes that other servlets in the context can access)。html

        ServletContext被root於web server中一個已知的路徑。例如:一個servlet context能夠被配置在http://www.google.com/catalog。做爲context path,以request路徑/catalog開始的全部請求,都會發送至與此ServletContext相關聯的web application。java

 

 

SRV.3.2 Scope of a ServletContext Interface

        每一個發佈到container中的web application都有一個ServletContext的實例與之相關聯。若是container是分佈式的運行在多臺虛擬機上,那麼web application將在每個JVM上有一個ServletContext的實例。
        在container中,沒有做爲web application的一部分被部署的servlet,是「默認」web application隱含的一部分,而且有一個默認的ServletContext。在分佈式container中,默認的ServletContext並非分佈式的,而是隻存在於一個JVM中。web

 

 

SRV.3.3 Initialization Parameters

        下面的ServletContext接口的方法容許servlet訪問存取與web application相關聯的context初始化參數,這些參數由應用程序開發者在部署描述符中描述。數據庫

  • getInitParameter服務器

  • getInitParameterNamessession

        初始化參數被開發者用來傳達配置信息。典型的狀況是站點管理員的的email地址,或者持有關鍵資源的系統的名稱(the name of a system that holds critical data)。app

 

 

SRV.3.4 Context Attributes

        Servlet能夠經過名稱將一個對象做爲屬性綁定到context。全部與context綁定的屬性都對於同一個web application中其餘任何的servlet都是有效的。如下是ServletContext接口中支持這種功能的方法:jsp

  • setAttribute分佈式

  • getAtrributeide

  • getAtrributeNames

  • removeAttribute

SRV.3.4.1 Context Attributes in a Distributed Container

        Context的attribute只在對於context所在的JVM中有效。這防止了ServletContext的attribute在分佈式container中成爲共享的內存數據。當有信息須要在運行在分佈式環境下的不一樣servlet之間共享時,這些信息應該被放到session中(參見SRV.7 Sessions),存在數據庫中,或者set到一個EJB組件中。

 

 

SRV.3.5 Resourcess

        ServletContext接口只對web application中靜態內容文檔的層次結構提供了直接的存取的功能。,包括html,gif和jpeg文件,經過ServletContext接口的如下方法:

  • getResource

  • getResourceAsStream

        getResource和getResourceAsStream方法以一個以「/」開頭的字符串做爲參數,這個參數表明了資源相對於context的路徑。這個文檔的曾其結構可能會出如今server的文件系統裏,web application存檔文件裏,或者一個遠程服務器,甚至一些其餘的位置。

        這些方法不是用來獲取動態內容的。例如,在支持JSP規範的container中,一個形式爲getResource("/index.jsp")的方法調用會返回這個 jsp的源代碼,而不是jsp執行後的輸出結果。參見SRV.8 Dispatching Request,以獲取關於存取動態內容的更多信息。

        Web application中全部資源的列表能夠經過使用getResourcePath(String path)方法得到。此方法的語法細則能夠在servlet的API中找到。

 

 

SRV.3.6 Multiple hosts and Servlet Contexts

        Web server能夠支持在一臺服務器上多邏輯主機共享一個 IP地址,這種能力有時被稱爲「虛擬主機」。在這種狀況下,每一個邏輯主機必須有它本身的servlet context或者servlet context 的集合。servlet context不能被多個虛擬主機共享。

 

 

SRV.3.7 Reloading Considerations

        雖然container提供者不是必須爲了方便開發者而實現class reloading的方案,任何這樣的實現都必須明確,全部它們可能使用的servlet和class(An exception is system classes that the servlet may use in a different class loader),都只裝載在單個class loader中,這樣才能保證應用程序呈現出開發者所指望的行爲。爲了方便開發者,container應該提供完整的session綁定listener的通知,以便用來監控在class reloading以前的session終止(session termination upon class reloading)。

        上一代的container建立新的class loader來裝載servlet,不一樣於被用來裝載servlet context中其餘servlet或者class的class loader(distinct from class loaders used to load other servlets or classes used in the servlet context)。

 

SRV.3.7.1 Temporary Working Directories

        每一個servlet context都須要一個臨時存儲目錄。Servlet container必須爲每一個servlet context提供一個私有的臨時目錄,而且經過javax.servlet.context.tempdir這個context attribute來使其可用。與這個attribute相關聯的對象必須使java.io.File類型。         這一點被公認爲是習慣作法,不少servlet引擎都提供了這樣的實現。當container重啓時,並不被要求去保持這個臨時目錄下的內容,可是必須保證臨時目錄中的一個servlet context的內容對與container中其餘web application的servlet context使不可見的。

相關文章
相關標籤/搜索