部署這個(gè)術(shù)語描述的就是,將 Web 應(yīng)用(第三方的 WAR 文件,或是你自己定制的 Web 應(yīng)用)安裝到 Tomcat 服務(wù)器上的整個(gè)過程。
在 Tomcat 服務(wù)器上,可以通過多種方法部署 Web 應(yīng)用:
Tomcat Manager 是一種能交互使用(利用 HTML GUI)的 Web 應(yīng)用,還可以利用編程的方式(通過基于 URL 的 API)來部署并管理 Web 應(yīng)用。
依靠 Manager 這種 Web 應(yīng)用,可以實(shí)施多種部署。Tomcat 為 Apache Ant 構(gòu)建工具提供了多個(gè)任務(wù)。 Apache Tomcat Maven Plugin 工程則提供了與 Apache Maven 的集成。另外還有一種工具叫做客戶端配置器 (Client Deployer,TCD),它通過命令行來使用,提供一些額外的功能,比如編譯與驗(yàn)證 Web 應(yīng)用,以及將 Web 應(yīng)用打包成 Web 應(yīng)用資源(WAR)文件。
靜態(tài)部署 Web 應(yīng)用時(shí),并不需要附加的安裝,因?yàn)?Tomcat 已經(jīng)提供了這項(xiàng)功能。利用 Tomcat Manager 部署應(yīng)用也不需要任何安裝,不過需要進(jìn)行一番配置,詳見Tomcat Manager 手冊(cè)。如果使用客戶端配置器的話,就必須要進(jìn)行安裝了。
Tomcat 的核心分發(fā)版并不包括 TCD,必須從下載區(qū)獨(dú)立下載它,下載文件通常冠名為:apache-tomcat-8.0.x-deployer。
要想使用 TCD,必須事先配置有 Apache Ant 1.6.2+ 以及 Java 安裝。另外,還必須定義一個(gè)指向 ANT 安裝根目錄的 ANT_HOME 環(huán)境變量,以及一個(gè)指向 Java 安裝目錄的 JAVA_HOME 值。另外,還必須確保必須在操作系統(tǒng)所提供的命令 shell 中運(yùn)行 ANT 的 ant 命令,以及 Java 的 javac 編譯器命令。
在談到 Web 應(yīng)用的配置時(shí),需要理解一下上下文(Context)這個(gè)概念。上下文在 Tomcat 中其實(shí)就是 Web 應(yīng)用的意思。
為了在 Tomcat 中配置上下文,需要用到上下文描述符文件( Context Descriptor)。
上下文描述符文件其實(shí)就是一個(gè) XML 文件,含有 Tomcat 與上下文相關(guān)的配置信息,例如命名資源或會(huì)話管理器配置信息。在 Tomcat 的早期版本中,上下文描述符文件配置的內(nèi)容經(jīng)常保存在 Tomcat 的主要配置文件 server.xml 中,但現(xiàn)在不再推薦采用這一方式(雖然目前它依然有效)。
上下文描述符文件不僅能幫助 Tomcat 了解如何配置上下文,而且其他工具(如 Manager 與 TCD)也經(jīng)常會(huì)借助上下文描述符文件來正確履行它們的職責(zé)。
上下文描述符文件位于:
1.$CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml
2.$CATALINA_BASE/webapps/[webappname]/META-INF/context.xml
在目錄 1 中的文件名為 [webappname].xml,但在目錄 2 中,文件名為 context.xml。如果某個(gè) Web 應(yīng)用沒有相應(yīng)的上下文描述符文件,Tomcat 就會(huì)使用默認(rèn)值配置該應(yīng)用。
如果你對(duì)使用 Manager 或 TCD 不是很感興趣,那就需要先把 Web 應(yīng)用靜態(tài)地部署到 Tomcat 中,然后再啟動(dòng) Tomcat。
這種情況下應(yīng)用部署的位置由 appBase 目錄屬性來決定,每臺(tái)主機(jī)都指定有這樣一個(gè)位置。該位置既可以放入未經(jīng)壓縮的 Web 應(yīng)用資源文件(通常被稱為 exploded web application,“膨脹 Web 應(yīng)用”),也可以放置已壓縮過的 Web 應(yīng)用資源文件(.WAR 文件)。
再次解釋一下,應(yīng)用部署位置由主機(jī)(默認(rèn)主機(jī)為 localhost)的 appBase 屬性來指定。默認(rèn)的 appBase 屬性所指定的目錄為 $CATALINA_BASE/webapps。只有當(dāng)主機(jī)的 deployOnStartup 屬性為 true, 應(yīng)用才會(huì)在 Tomcat 啟動(dòng)時(shí)進(jìn)行自動(dòng)部署。
在以上情況下,當(dāng) Tomcat 啟動(dòng)時(shí),部署的具體步驟如下:
除了靜態(tài)部署之外,也可以在運(yùn)行中的 Tomcat 服務(wù)器上進(jìn)行應(yīng)用部署。
如果主機(jī)的 autoDeploy 屬性為 true,主機(jī)就會(huì)在必要時(shí)嘗試著動(dòng)態(tài)部署并更新 Web 應(yīng)用。 例如,當(dāng)把一個(gè)新 .WAR 文件放入 appBase 所指定的名錄時(shí)。為了實(shí)現(xiàn)這種操作,主機(jī)就需要啟用后臺(tái)處理,當(dāng)然這也是默認(rèn)的配置。
當(dāng) autoDeploy 設(shè)置為 true 時(shí),運(yùn)行中的 Tomcat 服務(wù)器能夠允許實(shí)現(xiàn)以下行為:
注意,如果在主機(jī)配置中,沒有把 unpackWARs 屬性設(shè)為 false,則 WAR 文件將不會(huì)膨脹,這時(shí) Web 應(yīng)用將部署為一個(gè)壓縮文檔。
注意,也可以在加載器中對(duì) Web 應(yīng)用的重新加載進(jìn)行配置,在這種情況下,會(huì)跟蹤已加載的類所產(chǎn)生的更改。
詳情參看 Tomcat Manager 文檔。
最后要介紹的是利用客戶端部署器(TCD)對(duì) Web 應(yīng)用進(jìn)行部署。客戶端部署器可以實(shí)施的行為包括:驗(yàn)證并編譯 Web 應(yīng)用,將資源文件壓縮成 .WAR 文件,并將 Web 應(yīng)用部署到用于生產(chǎn)或開發(fā)環(huán)境的 Tomcat 服務(wù)器上。
一定要注意,該特性的實(shí)現(xiàn)需要使用 Tomcat Manager,而且目標(biāo) Tomcat 服務(wù)器也應(yīng)處于運(yùn)行狀態(tài)。
因?yàn)闀?huì)用到 TCD,所以要求用戶還必須熟悉 Apache Ant。Apache Ant 是一個(gè)腳本編譯工具。TCD 每個(gè)包都會(huì)帶有一個(gè)編譯腳本。
只需大體能夠了解 Apache Ant 即可(本節(jié)前面列有其安裝細(xì)則,這里需要熟練使用操作系統(tǒng)命令 shell 以及配置環(huán)境變量)。
TCD 包括一些 Ant 任務(wù),在配置前用于 JSP 編譯的 Jasper 頁面編譯器,以及驗(yàn)證 Web 應(yīng)用上下文描述符的任務(wù)。驗(yàn)證器任務(wù)(org.apache.catalina.ant.ValidatorTask類)只允許傳入一個(gè)參數(shù):膨脹 Web 應(yīng)用的基本路徑。
TCD 使用膨脹 Web 應(yīng)用作為輸入(下面列出了其所用的屬性列表)。通過部署器,以編程方式部署的 Web 應(yīng)用可能會(huì)在 /META-INF/context.xml 中包含一個(gè)上下文描述符。
TCD 包含一個(gè)可即時(shí)使用的 Ant 腳本, 其中包含以下目標(biāo)。
為了能夠配置部署,還需要在 TCD 安裝的根目錄下創(chuàng)建一個(gè)叫做 deployer.properties 的文件,并在該文件中的每行添加下列名值對(duì):
除此之外,你還必須確定為 TCD 所使用的目標(biāo) Tomcat Manager 創(chuàng)建了一個(gè)用戶,否則 TCD 就無法驗(yàn)證 Tomcat Manager,從而造成配置失敗,詳細(xì)信息參看 Tomcat Manager 文檔。