日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java ServletContext 详解

發(fā)布時間:2023/12/15 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java ServletContext 详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)自:http://blog.csdn.net/bryanliu1982/article/details/5214899

ServletContext,是一個全局的儲存信息的空間,服務器開始,其就存在,服務器關(guān)閉,其才釋放。request,一個用戶可有多個;session,一個用戶一個;而servletContext,所有用戶共用一個。所以,為了節(jié)省空間,提高效率,ServletContext中,要放必須的、重要的、所有用戶需要共享的線程又是安全的一些信息。

換一種方式說吧,運行在JAVA虛擬機中的每一個Web應用程序都有一個與之相關(guān)的Servlet上下文。ServletContext對象是Web服務器中的一個已知路徑的根,Servlet上下文被定位于http://localhost:8080/項目名. 以 /項目名 請求路徑(稱為上下文路徑)開始的所有請求被發(fā)送到與此ServletContext關(guān)聯(lián)的Web應用程序。一個ServletContext對象表示了一個Web應用程序的上下文。

Servlet上下文:Servlet上下文提供對應用程序中所有Servlet所共有的各種資源和功能的訪問。Servlet上下文API用于設置應用程序中所有Servlet共有的信息。Servlet可能需要共享他們之間的共有信息。運行于同一服務器的Servlet有時會共享資源,如JSP頁面、文件和其他Servlet。

舉例:

如,做一個購物類的網(wǎng)站,要從數(shù)據(jù)庫中提取物品信息,如果用session保存這些物品信息,每個用戶都訪問一便數(shù)據(jù)庫,效率就太低了;所以要用來Servlet上下文來保存,在服務器開始時,就訪問數(shù)據(jù)庫,將物品信息存入Servlet上下文中,這樣,每個用戶只用從上下文中讀入物品信息就行了。

?

3.1 ServletContext接口簡介

ServletContext接口定義了運行servlet的web應用的servlet視圖。容器供應商負責提供servlet容器內(nèi)ServletContext接口的實現(xiàn)。使用ServletContext對象,servlet可以記錄事件日志,獲取資源的URL地址,并且設置和保存上下文內(nèi)可以訪問的其他servlet的屬性。

ServletContext以web的已知路徑為根路徑。比如,假定一個servlet上下文位于http://www.mycorp.com/catalog。以/catalog請求路徑開頭的所有請求,已知為上下文路徑,被路由到和該ServletContext關(guān)聯(lián)的web應用。

3.2 ServletContext接口作用域

容器中部署的每一個web應用都有一個ServletContext接口的實例對象與之關(guān)聯(lián)。如果容器被分布在多個虛擬機上,一個web應用將在每一個VM中有一個ServletContext實例。

不作為web應用一部分部署的容器中的servlet默認是“默認”web應用的一部分,有一個默認的ServletContext。在分布式容器中。默認ServletContext是非分布式的,并且必須只存在于一個VM中。

3.3 初始化參數(shù)

ServletContext接口的初始化參數(shù)允許servlet訪問與web應用相關(guān)的上下文初始化參數(shù),這些由應用開發(fā)人員在部署描述符中指定:

getInitParameter

getInitParameterNames

應用開發(fā)人員利用初始化參數(shù)傳送配置信息。典型的例子是web管理員的e-mail地址或者一個持有關(guān)鍵數(shù)據(jù)的系統(tǒng)名稱。

3.4 上下文屬性

servlet可以通過名稱將對象屬性綁定到上下文。任何綁定到上下文的屬性可以被同一個web應用的其他servlet使用。ServletContext接口的下列方法允許訪問這種功能:

setAttribute

getAttribute

getAttributeNames

removeAttribute

3.4.1 分布式容器中的上下文屬性

上下文屬性對于創(chuàng)建它們的VM來說是本地的。這防止ServletContext屬性存儲于分布式容器的共享內(nèi)存中。當信息需要在運行于分布式環(huán)境中的servlet之間共享時,信息被放入會話中(參見第7章“會話”),存儲于數(shù)據(jù)庫中,或者存儲于EJB組件中。

3.5 資源

ServletContext接口通過下列方法提供對web應用組成的靜態(tài)內(nèi)容文檔層級的直接訪問,包括HTML,GIF和JPEG文件:

getResource

getResourceAsStream

getResource和getResourceAsStream方法以“/”開頭的字符串為參數(shù),它指定上下文根路徑的資源相對路徑。文檔的層級可能存在于服務器的文件系統(tǒng),war文件,遠程服務器或者在一些其它位置中。

這些方法不用來獲取動態(tài)內(nèi)容。比如,在一個支持JSP規(guī)范1的容器中,getResource("/index.jsp")這種形式的方法調(diào)用將返回JSP源代碼,而不是處理后的輸出。關(guān)于訪問動態(tài)內(nèi)容的更多信息參見第8章“轉(zhuǎn)發(fā)請求”。

Web應用資源的完整列表可以使用getResourcePaths(String path)方法訪問。該方法語義的完整信息可以在本規(guī)范的API文檔中找到。

3.6 多個主機和ServletContext

Web服務器可能支持一個服務器上多個邏輯主機共享一個IP地址。這功能有時被稱為“虛擬主機”。這種情況下,每一個邏輯主機必須有它自己的servlet上下文或者servlet上下文組。Servlet上下文不可以被多個虛擬主機共享。

3.7 重載考慮

盡管容器供應商因為對于易于開發(fā)而實現(xiàn)的類加載不做要求,但是任何那樣的實現(xiàn)必須確保所有它們可能使用2的所有servlet和類,被加載在單個類加載器作用域內(nèi)。必須保證應用應該如開發(fā)人員預想的那樣運轉(zhuǎn)。作為開發(fā)輔助,綁定監(jiān)聽器的會話通知的完整語義應當由容器支持,在類加載上會話終止的監(jiān)聽上使用。

上一代的容器創(chuàng)建新的類加載器以加載servlet,這和用來加載servlet上下文中使用的其他servlet或者類的類加載器不同。這可能造成servlet上下文內(nèi)的對象引用指向一個意想不到的類或?qū)ο?#xff0c;造成意想不到的行為。需要阻止由新一代類加載器所引發(fā)的問題。

3.7.1 臨時工作目錄

每一個servlet上下文都需要一個臨時存儲目錄。Servlet容器必須為每一個servlet上下文提供一個私有的臨時目錄,并且使它可以通過javax.servlet.context.tempdir上下文屬性可用。這些屬性關(guān)聯(lián)的對象必須是java.io.File類型。

這項需求認可了很多servlet引擎實現(xiàn)中提供的常見便利。容器不需要在servlet重啟時維持臨時目錄的內(nèi)容,但是需要確保一個servlet上下文的臨時目錄的內(nèi)容對于該servlet容器上運行的其他web應用的servlet上下文不可見。

總結(jié)

以上是生活随笔為你收集整理的Java ServletContext 详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。