3 1 配置任意目錄下的Web應用程式

2021-05-10 04:22:55 字數 3696 閱讀 1663

在部署和訪問web應用程式時,通過上下文路徑(context path)來區分不同的web應用程式。上下文路徑以斜槓(/)開頭,但結束沒有斜槓(/)。在預設上下文中,這個路徑將是空字串""。例如:/ch02是第2章的web應用程式的上下文路徑,凡是發往/ch02路徑的請求,都會交由這個路徑下的web應用程式的資源來進行響應。

元素的常用屬性如表3-1所示。

表3-1 元素的常用屬性屬性

描述classname

指定實現了

org.apache.catalina.context

介面的類名。如果沒有指定類名,將使用標準的實現。標準的實現類是

org.apache. catalina.core.standardcontext

cookies

指示是否將

cookie

應用於session

,預設值是

true

crosscontext

如果設定為

true

,在應用程式內部呼叫

servletcontext.getcontext()

將成功返回執行在同乙個虛擬主機中的其他

web應用程式的請求排程器。在注重安全的環境中,將該屬性設為

false

,那麼getcontext()

將總是返回

null

。預設值是

false

docbase

指定web

應用程式的文件基目錄或者

war檔案的路徑名。可以指定目錄的或

war檔案的絕對路徑名,也可以指定相對於

host

元素的目錄的路徑名。該屬性是必需的

path

指定web

應用程式的上下文路徑。在乙個特定的虛擬主機中,所有的上下文路徑都必須是唯一的。如果指定乙個上下文路徑為空字串(""

),則定義了這個虛擬主機的預設

web

應用程式,負責處理所有的沒有分配給其他

web

應用程式的請求

reloadable

如果設定為

ture

,tomcat

伺服器在執行時,會監視

web-inf/classes

和web-inf/lib

目錄下類的改變,如果發現有類被更新,

tomcat

web應用程式。這個特性在應用程式的開發階段非常有用,但是它需要額外的執行時開銷,所以在產品發布時不建議使用。該屬性的預設值是

false

unpackwar

如果為true

,tomcat

在執行web

應用程式前將展開所有壓縮的

web應用程式。預設值是

true

元素是元素的子元素,可以在%catalina_home%/conf/server.xml檔案中設定context元素。例如,針對第2章的web應用程式,可以做如下配置:

unpackwars="true" autodeploy="true"

xmlvalidation="false" xmlnamespaceaware="false">

在元素中使用的屬性的含義在表3-1中已經列出了,這裡就不再講述了。

在tomcat中,我們還可以把元素放在下列位置的檔案中。

① %catalina_home%/conf/context.xml檔案,在這個檔案中設定的資訊將被所有的web應用程式所載入。

② %catalina_home%/conf/[enginename]/[hostname]/context.xml.default檔案,[enginename]表示的是在server.xml檔案中設定的元素的name屬性的值,[hostname]表示的是在server.xml檔案中設定的元素的name屬性的值,關於servet.xml檔案的詳細資訊,可以參看附錄c。在筆者的機器上,%catalina_home%/ conf/server.xml檔案中元素的name屬性的值是catalina,元素的name屬性的值是localhost,你可以在%catalina_home%/conf目錄下依次建立catalina/localhost目錄,然後在localhost目錄下新建context.xml.default檔案,在這個檔案中設定的資訊將被屬於該虛擬主機的所有web應用程式所載入。

③ 可以為乙個web應用程式建立%catalina_home%/conf/[enginename]/ [hostname]/***.xml檔案,在這個xml檔案中,元素的docbase屬性通常是web應用程式目錄的絕對路徑名,或者是web應用程式歸檔檔案的絕對路徑名。

④ 在web應用程式的目錄結構中增加meta-inf/context.xml檔案。包含meta-inf子目錄的web應用程式的目錄層次結構如圖3-1所示。

圖3-1 包含meta-inf子目錄的

web應用程式目錄層次結構

例3-1 在server.xml中設定元素

unpackwars="true" autodeploy="true"

xmlvalidation="false" xmlnamespaceaware="false">

例3-2 ch03.xml

讀者可以用自己編寫的servlet類進行測試,在測試之前,要先把server.xml檔案中設定的元素刪除或注釋起來。

從tomcat 5開始,不建議直接在server.xml檔案中配置元素,因為server.xml檔案作為tomcat的主要配置檔案,一旦tomcat啟動後,將不會再讀取這個檔案,因此你無法在tomcat伺服器啟動時發布web應用程式。如果在其他地方配置元素,那麼在tomcat執行時,也可以發布web應用程式。

從tomcat 5.5開始,在%catalina_home%/conf/[enginename]/ [hostname]/目錄下建立xml配置檔案來配置web應用程式,tomcat將以xml檔案的檔名將作為web應用程式的上下文路徑,而不管你在元素的path屬性中指定的上下文路徑是什麼。例如,檔名是ch03.xml,元素的path屬性設定為/hello,那麼執行http://localhost:8080/hello/helloworld將提示http 404錯誤,如果執行http://localhost:8080/ch03/helloworld將顯示正確的輸出資訊。而tomcat 5.5之前的版本則是以元素的path屬性的值作為上下文的路徑。

由於tomcat 5.5之後的版本是以xml配置檔案的檔名作為web應用程式的上下文路徑的,因此在配置元素時,可以不使用path屬性。

%catalina_home%/conf/web.xml為執行在同乙個tomcat例項中的所有web應用程式定義了預設值。當tomcat載入乙個web應用程式的時候,首先讀取這個檔案,然後再讀取web應用程式目錄下的web-inf/web.xml檔案。

linux命令列在任意目錄下啟動任意的指令碼的方法

這應該算是乙個常識吧,但是對於許多像我們這樣的新手來說,一旦你出點小差錯,整個過程就會很曲折。碰巧今天就遇到了這樣的問題。下面是查過資料後總結的解決方法 簡單說path就是一組路徑的字串變數,當你輸入的命令不帶任何路徑時,linux會在path記錄的路徑中查詢該命令。有的話則執行,不存在則提示命令找...

乙個webapp目錄下部署多個web應用

雖然多個web應用都是同一套 但是它們互相不會干擾,因為它們的類載入器是不一樣的 例如 resin對每個web應用載入都是用的environmentclassloader,但是不同的web應用類載入器不一樣 cache com.qq.jutil.jcache.adv.advcache 3432a32...

Web目錄下的檔案資料獲取

只要是web專案,其實所有資源都可以通過servletcontext物件來獲取 參考 servletcontext域 獲取src目錄下的properties檔案,其實在專案編譯完成後可以理解為獲取web inf classes 下的檔案,並且處在classes根目錄下 檔案目錄 通過類載入器獲取 獲...