context元素大概解說

?

Context元素代表一個web應用,運行在某個特定的虛擬主機上。如Servlet Specification 2.2或以后版本中描述的那樣,每個web應用基于一個Web Application Archive(WAR)文件,或者是一個目錄,包含WAR文件解壓后的內容。有關Web Application Archive的更多信息,可以參考Servlet Specification和Tomcat 應用程序開發者指南。?
通過將請求URI的最長可能前綴與每個Context的context路徑進行匹配,Catalina選擇相應的web 應用處理HTTP請求。一旦選定,根據web application deployment descriptor 文件中定義的servlet映射,Context會選擇一個正確的servlet來處理進來的請求。servlet映射必須定義在該web應用目錄層次結構中的/WEB-INF/web.xml中。?

你可以在一個Host元素中嵌套任意多的Context元素。每個Context的路徑必須是惟一的,由path屬性定義。另外,你必須定義一個context路徑長度為0的Context,這個Context稱為該虛擬主機的缺省web應用,用來處理那些不能匹配任何Context的Context路徑的請求。?

除了在Host元素中嵌套Context元素以外,你也可以將它們存儲在單個文件中(以.xml為后綴),放在$CATALINA_HOME/conf/[enginename]/[hostname]/目錄下面。有關這方面的更多信息,參考應用的自動發布。這種方法允許動態重新配置web應用,因為如果修改了conf/server.xml,就必須重新啟動 Tomcat。?

除了明確指定Context元素以外,還有其他幾種技術可以自動生成Context元素。參考Automatic Application Deployment 和 User Web Applications?

以下的描述使用變量$CATALINA_HOME來指Tomcat 5安裝的目錄。大多數的相對路徑都是以該目錄為基準。但是,通過設置CATALINA_BASE目錄,可以運行多個Tomcat 5實例,這時你應該使用$CATALINA_BASE來作為目錄基準,而不是使用$CATALINA_HOME。?

屬性?
通用屬性?
所有Context的實現支持如下屬性:?
backgroundProcessorDelay 這個值代表在context及其子容器(包括所有的wrappers【把應用封裝成適合該環境運行的程序】)上調用backgroundProcess方法的延時,以秒為單位。如果延時值非負,子容器不會被調用,也就是說子容器使用自己的處理線程。如果該值為正,會創建一個新的線程。在等待指定的時間以后,該線程在主機及其子容器上調用backgroundProcess方法。context利用后臺處理session過期,監測類的變化用于重新載入。如果沒有指定,該屬性的缺省值是-1,說明context依賴其所屬的Host的后臺處理。?
className 實現的Java類名。該類必須實現org.apache.catalina.Context接口。如果沒有指定,使用標準實現(在下面定義)。?
cookies 如果想利用cookies來傳遞session identifier(需要客戶端支持cookies),設為ture。否則為false,這種情況下只能依靠URL Rewriting傳遞session identifier。?



crossContext 如果想在應用內調用ServletContext.getContext()來返回在該虛擬主機上運行的其他web application的request dispatcher,設為true。在安全性很重要的環境中,設為false,使得getContext()總是返回null。缺省值為false。?

docBase 該web應用的文檔基準目錄(Document Base,也稱為Context Root【默認的根目錄】),或者是WAR文件的路徑。可以使用絕對路徑,也可以使用相對于context所屬的Host的appBase路徑。?



override 如果想利用該Context元素中的設置覆蓋DefaultContext中相應的設置,設為true。缺省情況下使用DefaultContext中的設置。?

privileged 設為true,允許context使用container servlets,比如manager servlet。?



path web應用的context路徑。catalina將每個URL的起始和context path進行比較,選擇合適的web應用處理該請求。特定Host下的context path必須是惟一的。如果context path為空字符串(""),這個context是所屬Host的缺省web應用,用來處理不能匹配任何context path的請求。?



reloadable 如果希望Catalina監視/WEB-INF/classes/和/WEB-INF/lib下面的類是否發生變化,在發生變化的時候自動重載web application,設為true。這個特征在開發階段很有用,但也大大增加了服務器的開銷。因此,在發布以后,不推薦使用。但是,你可以使用 Manager應用在必要的時候觸發應用的重載。?
wrapperClass org.apache.catalina.Wrapper實現類的名稱,用于該Context管理的servlets。如果沒有指定,使用標準的缺省值。?

標準實現?
Context的標準實現是org.apache.catalina.core.StandardContext.它還支持如下的附加屬性:?

屬性 描述?
debug 與這個Engine關聯的Logger記錄的調試信息的詳細程度。數字越大,輸出越詳細。如果沒有指定,缺省為0。?



swallowOutput 如果該值為true,System.out和System.err的輸出被重定向到web應用的logger。如果沒有指定,缺省值為false?

useNaming 如果希望Catalina為該web應用使能一個JNDI InitialContext對象,設為true。該InitialialContext符合J2EE平臺的約定,缺省值為true。?

workDir Context提供的臨時目錄的路徑,用于servlet的臨時讀/寫。利用javax.servlet.context.tempdir屬性,servlet可以訪問該目錄。如果沒有指定,使用$CATALINA_HOME/work下一個合適的目錄。?



嵌套組件?
下列元素可以嵌套在Context元素中,但每個元素至多只能嵌套一次。?

Loader-配置該web應用用來加載servlet和javabean的類加載器。正常情況下,使用缺省的類加載器就足夠了;?
Logger - 配置用來接收和處理所有日志消息的logger,包括調用ServletContext.log()函數記錄的所有消息;?
Manager -配置用于創建,銷毀,維持HTTP session的session manager.正常情況下,使用缺省的session manager配置就足夠了;?
Realm - 配置Realm,該Realm的用戶數據庫以及相關的角色僅用于這個特定的web應用中。如果沒有指定,該web應用使用所屬的Host或Engine的Realm。?
Resources - 配置用于訪問與這個web應用相關聯的靜態資源。正常情況下,使用缺省的resource manager就足夠了。?

專有特征?
訪問日志?
正常情況下,運行web服務器會生成訪問日志。訪問日志以標準格式為每個請求輸出一行信息。Catalina包含一個可選的Valve實現,可以用標準格式生成日志,還可以使用任意定制的格式。?

通過在Engine,Host或者Context中嵌套一個Valve元素,Catalina會為該容器處理的所有請求創建訪問日志,如下所示:?



...?
prefix="localhost_access_log." suffix=".txt"?
pattern="common"/>?
...?




參考Access Log Valve,以獲得更多配置屬性的信息;?

Context的自動配置?
如果使用標準的Context實現,當Catalina啟動,或者重載web應用的時候,如下的配置步驟會自動發生,不需要特殊的配置來使能這個特征。?

如果沒有定義自己的Loader元素,將會配置一個標準的web應用class loader;?
如果沒有定義自己的Manager元素,會配置一個標準的session manager;?
如果沒有定義自己的Resources元素,使用標準的resource manager。?
在conf/web.xml中列出的web應用的屬性會當做該web應用的缺省的屬性。這被用于建立缺省的映射(比如將.jsp映射成對應的JSP servlet),以及其他的標準屬性。?
列舉在/WEB-INF/web.xml資源中的屬性被處理(如果資源存在);?
如果web應用指定了安全限制,并且可能需要對用戶進行認證,Catalina會配置選定的Authenticator,該Authenticator實現了login方法。?

Context參數?
可以在Context中元素中嵌套元素,配置帶有名稱的值,這些值作為servletcontext初始化參數,對整個web應用可見。比如,你可以像這樣創建初始化參數:?



...?
override="false"/>?
...?




這與在/WEB-INF/web.xml中包含如下元素相等:?



companyName?
My Company, Incorporated?




區別是,前者不需要修改deployment descriptor來定制這個值。?

元素的有效屬性值如下:?

屬性 描述?
description 關于該context初始化參數的文字描述(可選)?

name?









要創建的context初始化參數的名稱?

override 如果不希望/WEB-INF/web.xml中具有相同參數名稱的覆蓋這里指定的值,設為false。缺省值為true。?

value 調用ServletContext.getInitParameter()時,返回給應用的參數值。?


環境條目?
可以在Context中嵌套元素,配置命名的值,這些值作為環境條目資源(Environment Entry Resource),對整個web應用可見。比如,可以按照如下方法創建一個環境條目:?



...?
type="java.lang.Integer" override="false"/>?
...?




這與在/WEB-INF/web.xml中包含如下元素是等價的:?



maxExemptions?
10?
java.lang.Integer?




區別是,前者不需要修改deployment descriptor來定制這個值。?

元素的有效屬性所如下:?

屬性 描述?
description 環境條目的文字描述(可選)?

name 環境條目的名稱,相對于java:comp/env context。?

override 如果不希望/WEB-INF/web.xml中具有相同名稱的覆蓋這里指定的值,設為false。缺省值為true。?

type 環境條目的Java類名的全稱.在/WEB-INF/web.xml中,必須是如下的值:java.lang.Boolean, java.lang.Byte, java.lang.Character, java.lang.Double, java.lang.Float, java.lang.Integer, java.lang.Long, java.lang.Short, or java.lang.String.?

value 通過JNDI context請求時,返回給應用的參數值。這個值必須轉換成type屬性定義的Java類型?




生命期Listeners?
如果一個Java對象需要知道Context什么時候啟動,什么時候停止,可以在這個對象中嵌套一個Listener元素。該Listener元素必須實現了org.apache.catalina.LifecycleListener接口,在發生對應的生命期事件的時候,通知該Listener。可以按照如下的格式配置這樣的Listener:?



...?

...?




注意,一個listener可以具有任意多的附加屬性。屬性名與JavaBean的屬性名相對應,使用標準的屬性命名方法。?

請求過濾器(Request Filters)?
對每個發送到Engine,Host或者Context的請求,可以要求Catalina檢查IP地址或主機名稱。Catalina使用一系列配置好的“接受”或者“拒絕”過濾器對客戶端的地址或者主機名進行檢查,過濾器是按照正則表達式語法定義的,由Jakarta Regexp正則表達式庫支持。不被接受的請求會返回一個HTTP“Forbidden”錯誤。下面是過濾器的定義。?



...?
allow="*.mycompany.com," target="_blank">" target="_blank">www.yourcompany.com"/>?
deny="192.168.1.*"/>?
...?




資源定義(Resource Definitions)?
可以在/WEB-INF/web.xml中定義資源的特性。使用JNDI查找和元素時,這些特性被返回。對同一資源名稱,還必須定義資源參數(見下面“資源參數”小節),這些參數用來配置對象工廠(object factory)以及對象工廠的屬性。?

比如,你可以按照如下方式創建資源定義:?



...?
type="javax.sql.DataSource"?
description="Employees Database for HR Applications"/>?
...?




這等價于在/WEB-INF/web.xml中包含如下元素:?



Employees Database for HR Applications?
jdbc/EmployeeDB?
javax.sql.DataSource?
Container?




區別是,前者不需要修改deployment descriptor來定制這個值。?

元素的有效屬性如下:?

屬性 描述?
auth 指定時web應用代碼本身sign on到對應的resource mananger,還是由container代表web應用sign on到resource manager。該屬性的值必須是Application或者Container。如果在web application deployment descriptor中使用,這個屬性是必需的,如果使用,這個屬性是可選的。?

description 資源的文字描述(可選)?

name 資源的名稱,相對于java:comp/env context?

scope 指定通過這個resource manager得到的連接是否共享。該屬性的值必須是Shareable或者Unshareable。缺省情況下,假定連接是共享的。?
type 當web應用查找該資源的時候,返回的Java類名的全稱。?


資源參數?
資源參數用來配置資源管理器(resource manager,或對象工廠,object factory)。在做JNDI查找時,資源管理器返回查找的對象。在資源可以被訪問之前,對或元素的每個元素,或者/WEB-INF/web.xml中定義的每個或元素,都必須定義資源參數。?

資源參數是用名稱定義的,使用的資源管理器(或者object factory)不同,參數名稱的集合也不一樣。這些參數名和工廠類的JavaBeans屬性相對應。JNDI實現通過調用對應的JavaBeans屬性設置函數來配置特定的工廠類,然后通過lookup()調用使得該實例可見。?

一個JDBC數據源的資源參數可以按照如下方式定義:?



...?


driverClassName?
org.hsql.jdbcDriver?


url?
jdbc:HypersonicSQL:database?


user?
dbusername?


password?
dbpassword?


...?




如果你需要為某個特定的資源類型指定工廠內的Java類名,在元素中嵌套一個叫做factory的條目。?

元素的有效屬性如下:?

屬性 描述?
name 配置的資源名稱,相對于java:comp/env context。這個名稱必須與$CATALINA_HOME/conf/server.xml中某個元素定義的資源名稱匹配,或者在/WEB-INF/web.xml中通過或者元素應用。?


資源連接(Resource Links)?
資源連接用于創建到全局JNDI資源的連接。在連接名稱上進行JNDI查詢會返回被連接的global 資源。?
比如,你可以按照如下方法創建一個資源連接:?



...?
global="simpleValue"?
type="java.lang.Integer"?
...?




元素的有效屬性如下:?

屬性 描述?
global 被連接的連接全局資源的名稱?



name 創建的資源連接的名稱,相對于java:comp/env context?

type 當web應用在該資源連接上進行查找時,返回的Java類名的全稱

轉載于:https://www.cnblogs.com/w-wfy/p/6241618.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373161.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373161.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373161.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

全新的Play模塊資料庫

去年11月,我曾與Play框架的 Nicolas Leroux談過創建模塊存儲庫的問題。 他同意這將是一個好主意,但是時間不足使我無法開始。 在上周Google Play小組發生了暴風雨之后,我決定將其優先處理。 可以在幾周內提供可工作的原型。 概述:…

Ubuntu 16.04 安裝 VMware-Workstation-12

以前一直使用 Ubuntu Virtaulbox ,最近測試了 VMware-Workstation-9,性能超過 Virtaulbox-4.2.x,下面是詳細步驟:1 首先準備一個Ubuntu 系統 lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04 LTS Release: 16.04 …

Linux的md64進程,在Linux上安裝Elasticsearch Kibaba.md(示例代碼)

在Linux上安裝Elasticsearch KibabaKibana是一個開源為elasticsearch 引擎提供數據和數據分析1、下載安裝切換到root賬戶,按順序依次執行以下命令rpm包安裝$wget -c https://artifacts.elastic.co/downloads/kibana/kibana-5.5.3-x86_64.rpm$sha1sum kibana-5.3.2-x…

SSH實戰 · 唯唯樂購項目(中)

用戶模塊三:一級分類的查詢創建一級分類表并導入基本數據CREATE TABLE category (cid int(11) NOT NULL AUTO_INCREMENT,cname varchar(255) DEFAULT NULL,PRIMARY KEY (cid)) ENGINEInnoDB AUTO_INCREMENT11 DEFAULT CHARSETutf8;建包及相應的類:com.weiwei.shoppi…

播放2 –模塊,插件有什么區別?

關于Play 2模塊和插件似乎有些混亂。 我想這是因為兩者經常是同義詞。 在Play(兩個版本-1和2)中,存在明顯的差異。 在本文中,我將介紹什么是插件,如何在Java和Scala中實現插件,以及如何從模塊導入插件。 外…

Linux多線程貝葉斯建樹教程,建樹經驗.doc

建樹經驗分子進化樹構建及數據分析的簡介mediocrebeing, rodger, lylover, klaus, oldfish, yzwpf一、引言開始動筆寫這篇短文之前,我問自己,為什么要寫這樣的文章?寫這樣的文章有實際的意義嗎?我希望能夠解決什么樣的問題&#x…

Android的IPC機制(一)——AIDL的使用

綜述 IPC(interprocess communication)是指進程間通信,也就是在兩個進程間進行數據交互。不同的操作系統都有他們自己的一套IPC機制。例如在Linux操作系統中可以通過管道、信號量、消息隊列、內存共享、套接字等進行進程間通信。那么在Android系統中我們可以通過Bin…

python學習筆記(python介紹)

為什么要學python? python和shell的比較,和PHP、和JAVA比較 運維開發只是用到python的很小一部分 python在一些知名公司的應用: 谷歌:python的創始人原來在谷歌工作。 CIA:美國中情局網站用python開發的 NASA&#xff…

Netty:透明地使用SPDY和HTTP

大多數人已經從谷歌那里聽說過SPDY,該協議被提議作為老化的HTTP協議的替代品。 Web服務器是瀏覽器正在緩慢地實現該協議,并且支持正在增長。 在最近的文章中,我已經寫過SPDY的工作方式以及如何在Jetty中啟用SPDY支持。 由于Netty(…

selenium 等待頁面加載完成

一、隱形加載等待&#xff1a; file:///C:/Users/leixiaoj/Desktop/test.html 該頁面負責創建一個div <html> <head><title>Set Timeout</title><style>.red_box {background-color: red; width 20%; height:100px; border: none;}</style&…

linux nfsnobody用戶,處理CentOS 5.5 x64 配置NFS服務過程中nfsnobody用戶造成的問題

4、我們編譯一下這個NFS的配置文件。[rootNFS /]# vi /etc/exports/share 192.168.60.0/24(rw,sync,all_squash,root_squash) (我們允許這個共享對192.168.60.0/24網段可讀可寫&#xff0c;且將所有訪問者包括root的身份都改為nfsnobody)[rootNFS /]# /etc/init.d/nfs resta…

計算機語言

軟件&#xff1a;是一系列按照特定順序組織的計算機數據和指令的集合。一般來講軟件被劃分為系統軟件、應用軟件和介于這兩者之間的中間件。 系統軟件 系統軟件是各類操作系統&#xff0c;如windows、Linux、UNIX等&#xff0c;還包括操作系統的補丁程序及硬件驅動程序&#xf…

Apache Shiro第2部分–領域,數據庫和PGP證書

這是致力于Apache Shiro的系列文章的第二部分。 我們從簡單的不安全Web應用程序開始了上一部分 。 完成后&#xff0c;該應用程序具有基本的身份驗證和授權。 用戶可以登錄和注銷。 所有網頁和按鈕均已分配和實施訪問權限。 授權和身份驗證數據都已存儲在靜態配置文件中。 正如…

js中變量作用域的小理解

一&#xff1a;變量作用域 在js代碼中每個變量都是有自己的作用域的&#xff0c;js中不像C語言有塊級作用域的概念&#xff0c;取而代之的是函數作用域&#xff0c;看如下代碼&#xff1a; var scope"global"; function init(){ alert(scope);var scope "local…

安卓linux開機畫面,Android系統的開機畫面顯示過程分析(1)

好幾個月都沒有更新過博客了&#xff0c;從今天開始&#xff0c;老羅將嘗試對Android系統的UI實現作一個系統的分析&#xff0c;也算是落實之前所作出的承諾。提到Android系統的UI&#xff0c;我們最先接觸到的便是系統在啟動過程中所出現的畫面了。Android系統在啟動的過程中&…

如果你的NavigationDrawer里面的Item沒有響應,Drawer不能左滑關閉

如果你的NavigationDrawer里面的Item沒有響應&#xff0c;Drawer不能左滑關閉&#xff0c;應該是因為你沒有把主要內容放在DrawerLayout標簽下的第一位。 The main content view (the FrameLayout above) must be the first child in the DrawerLayout because the XML order i…

JAXB和未映射的屬性

JAXB&#xff08;JSR-222&#xff09;是例外配置&#xff0c;這意味著存在默認映射應用于域對象。 這意味著有時您需要顯式排除字段/屬性。 在本文中&#xff0c;我將討論如何使用XmlTransient或XmlAccessorType&#xff08;XmlAccessType.NONE&#xff09;以及何時使用每個選項…

sublime text3 使用SVN插件

Simon在項目中經常使用SVN&#xff0c;每次都要切換提交&#xff0c;很麻煩&#xff0c;有了這個SVN插件就很方便了&#xff0c;使用快捷方式提交&#xff0c;更新。 安裝: Ctrl Shift P 調用出Sublime Text的包管理工具&#xff0c;輸入TortoiseSVN&#xff0c;回車進行安裝…

c語言空格有什么作用,空格在c語言中怎么表示 C語言中的空格字符怎么表示

c語言中表示空格的是什么代碼&#xff1f;分析如下&#xff1a; 不是所有字符都需要轉義的&#xff0c;空格直接就敲空格&#xff0c;或者使用ASCII碼值賦值為32。 空格沒有轉義字符。合法轉義字符如下&#xff1a;\a 響鈴(BEL) 、\b 退格(BS)、\f 換頁(FF)、\n 換行(LF)、\r 回…

二維數組實現八皇后問題

之前關八皇后的問題全部使用的是一維數組進行實現(http://www.cnblogs.com/SeaSky0606/p/4604955.html)&#xff0c;現改一種數據存儲方式&#xff0c;按照8x8的二維棋盤存儲皇后。基本邏輯不變&#xff0c;可參見如下代碼&#xff1a; #include<cstdio> #include<alg…