鍍金池/ 教程/ Linux/ Tomcat Web 應(yīng)用部署
連接器
JSPs
重寫(xiě)機(jī)制
CGI
Tomcat Manager
Windows 認(rèn)證
代理支持
虛擬主機(jī)
安全性注意事項(xiàng)
如何在 Maven 中使用 Tomcat 庫(kù)
安裝
MBean 描述符
JNDI 資源
類(lèi)加載機(jī)制
Tomcat Web 應(yīng)用部署
基于 APR 的原生庫(kù)
負(fù)載均衡器
安全管理
附加組件
監(jiān)控與管理
Windows 服務(wù)
集群化與會(huì)話復(fù)制
高級(jí) IO 機(jī)制
SSI(服務(wù)器端嵌入)
WebSocket 支持
JDBC 數(shù)據(jù)源
日志機(jī)制
默認(rèn) Servlet
SSL/TLS 配置
Tomcat 的 JDBC 連接池
第一個(gè)應(yīng)用
簡(jiǎn)介
Realm 配置

Tomcat Web 應(yīng)用部署

本章概述

部署這個(gè)術(shù)語(yǔ)描述的就是,將 Web 應(yīng)用(第三方的 WAR 文件,或是你自己定制的 Web 應(yīng)用)安裝到 Tomcat 服務(wù)器上的整個(gè)過(guò)程。

在 Tomcat 服務(wù)器上,可以通過(guò)多種方法部署 Web 應(yīng)用:

  • 靜態(tài)部署。在啟動(dòng) Tomcat 之前安裝 Web 應(yīng)用。
  • 動(dòng)態(tài)部署。使用 Tomcat 的 Manager 應(yīng)用直接操控已經(jīng)部署好的 Web 應(yīng)用(依賴(lài) auto-deployment 特性)。

Tomcat Manager 是一種能交互使用(利用 HTML GUI)的 Web 應(yīng)用,還可以利用編程的方式(通過(guò)基于 URL 的 API)來(lái)部署并管理 Web 應(yīng)用。

依靠 Manager 這種 Web 應(yīng)用,可以實(shí)施多種部署。Tomcat 為 Apache Ant 構(gòu)建工具提供了多個(gè)任務(wù)。 Apache Tomcat Maven Plugin 工程則提供了與 Apache Maven 的集成。另外還有一種工具叫做客戶端配置器 (Client Deployer,TCD),它通過(guò)命令行來(lái)使用,提供一些額外的功能,比如編譯與驗(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)用也不需要任何安裝,不過(guò)需要進(jìn)行一番配置,詳見(jià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 編譯器命令。

  1. 下載 TCD 分發(fā)版;
  2. TCD 包可以解壓縮到任何地方,不需要解壓縮到任何已存在的 Tomcat 安裝下。
  3. 相關(guān)用法,參考下文的使用客戶端部署器進(jìn)行部署

關(guān)于上下文

在談到 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ì)借助上下文描述符文件來(lái)正確履行它們的職責(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)用沒(méi)有相應(yīng)的上下文描述符文件,Tomcat 就會(huì)使用默認(rèn)值配置該應(yīng)用。

在 Tomcat 啟動(dòng)時(shí)進(jìn)行部署

如果你對(duì)使用 Manager 或 TCD 不是很感興趣,那就需要先把 Web 應(yīng)用靜態(tài)地部署到 Tomcat 中,然后再啟動(dòng) Tomcat。 這種情況下應(yīng)用部署的位置由 appBase 目錄屬性來(lái)決定,每臺(tái)主機(jī)都指定有這樣一個(gè)位置。該位置既可以放入未經(jīng)壓縮的 Web 應(yīng)用資源文件(通常被稱(chēng)為 exploded web application,“膨脹 Web 應(yīng)用”),也可以放置已壓縮過(guò)的 Web 應(yīng)用資源文件(.WAR 文件)。

再次解釋一下,應(yīng)用部署位置由主機(jī)(默認(rèn)主機(jī)為 localhost)的 appBase 屬性來(lái)指定。默認(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í),部署的具體步驟如下:

  1. 先部署上下文描述符文件。
  2. 然后再對(duì)沒(méi)被任何上下文描述符文件引用過(guò)的膨脹 Web 應(yīng)用進(jìn)行部署。 如果在 appBase 中已存在與這種應(yīng)用有關(guān)的 .WAR 文件,而且要比膨脹應(yīng)用文件更新,那么就會(huì)將膨脹應(yīng)用的文件夾清除,轉(zhuǎn)而從 .WAR 文件中部署 Web 應(yīng)用。
  3. 部署 .WAR 文件。

在運(yùn)行中的 Tomcat 服務(wù)器上進(jìn)行動(dòng)態(tài)應(yīng)用部署

除了靜態(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)以下行為:

  • 對(duì)放入主機(jī) appBase指定目錄下的 .WAR 文件進(jìn)行配置。
  • 對(duì)放入主機(jī)的膨脹 Web 應(yīng)用進(jìn)行配置。
  • 對(duì)于已通過(guò) .WAR 文件配置好的應(yīng)用,如果又提供了更新的 .WAR 文件,則使用新 .WAR 文件對(duì)該應(yīng)用重新進(jìn)行配置。在這種情況下,會(huì)先移除原有的膨脹 Web 應(yīng)用,然后再次對(duì) .WAR 文件進(jìn)行擴(kuò)展(膨脹)。注意,如果在主機(jī)配置中,沒(méi)有把 unpackWARs 屬性設(shè)為 false,則 WAR 文件將不會(huì)膨脹,這時(shí) Web 應(yīng)用將部署為一個(gè)壓縮文檔。
  • 如果 /WEB-INF/web.xml 文件(或者任何其他被定義為 WatchedResource 的資源)更新,則重新加載 Web 應(yīng)用。
  • 如果用來(lái)部署 Web 應(yīng)用的上下文描述符更新,則重新部署該 Web 應(yīng)用。
  • 如果 Web 應(yīng)用所使用的全局或者每臺(tái)主機(jī)中的上下文描述符已更新,則重新部署與該應(yīng)用有依賴(lài)關(guān)系的 Web 應(yīng)用。
  • 如果一個(gè)上下文描述符被添加到 $CATALINA_BASE/conf/[enginename]/[hostname]/ 目錄中,并且該描述文件帶有與之前部署的 Web 應(yīng)用的上下文路徑相對(duì)應(yīng)的文件名,則重新部署該 Web 應(yīng)用。
  • 如果某個(gè) Web 應(yīng)用的文檔庫(kù)(docBase)被刪除,則取消對(duì)該應(yīng)用的部署。注意,在 Windows 系統(tǒng)下,要想實(shí)現(xiàn)這樣的行為,必須開(kāi)啟防鎖死功能(參看 Context 配置文檔),否則無(wú)法刪除運(yùn)行中的 Web 應(yīng)用的資源文件。

注意,也可以在加載器中對(duì) Web 應(yīng)用的重新加載進(jìn)行配置,在這種情況下,會(huì)跟蹤已加載的類(lèi)所產(chǎn)生的更改。

使用 Tomcat Manager 進(jìn)行部署

詳情參看 Tomcat Manager 文檔。

使用客戶端部署器進(jìn)行部署

最后要介紹的是利用客戶端部署器(TCD)對(duì) Web 應(yīng)用進(jìn)行部署。客戶端部署器可以實(shí)施的行為包括:驗(yàn)證并編譯 Web 應(yīng)用,將資源文件壓縮成 .WAR 文件,并將 Web 應(yīng)用部署到用于生產(chǎn)或開(kāi)發(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è)面編譯器,以及驗(yàn)證 Web 應(yīng)用上下文描述符的任務(wù)。驗(yàn)證器任務(wù)(org.apache.catalina.ant.ValidatorTask類(lèi))只允許傳入一個(gè)參數(shù):膨脹 Web 應(yīng)用的基本路徑。

TCD 使用膨脹 Web 應(yīng)用作為輸入(下面列出了其所用的屬性列表)。通過(guò)部署器,以編程方式部署的 Web 應(yīng)用可能會(huì)在 /META-INF/context.xml 中包含一個(gè)上下文描述符。

TCD 包含一個(gè)可即時(shí)使用的 Ant 腳本, 其中包含以下目標(biāo)。

  • compile(默認(rèn)):編譯并驗(yàn)證 Web 應(yīng)用??梢詥为?dú)使用,并不需要運(yùn)行著的 Tomcat 服務(wù)器。已編譯的應(yīng)用只能運(yùn)行在相關(guān)的 Tomcat X.Y.Z 版本的服務(wù)器上,又因?yàn)?Jasper 生成的代碼依賴(lài)它的運(yùn)行時(shí)組件,所以已編譯應(yīng)用并不一定能在其他版本的 Tomcat 版本上運(yùn)行。另外值得注意的是,該目標(biāo)也能自動(dòng)編譯位于 /WEB-INF/classes 這一應(yīng)用目錄下的任何 Java 源文件。
  • deploy 在 Tomcat 服務(wù)器上部署 Web 應(yīng)用(無(wú)論其是否編譯過(guò))。
  • undeploy 取消對(duì)某個(gè) Web 應(yīng)用的部署。
  • start 開(kāi)啟 Web 應(yīng)用。
  • reload 重新加載 Web 應(yīng)用。
  • stop 停止 Web 應(yīng)用。

為了能夠配置部署,還需要在 TCD 安裝的根目錄下創(chuàng)建一個(gè)叫做 deployer.properties 的文件,并在該文件中的每行添加下列名值對(duì):

除此之外,你還必須確定為 TCD 所使用的目標(biāo) Tomcat Manager 創(chuàng)建了一個(gè)用戶,否則 TCD 就無(wú)法驗(yàn)證 Tomcat Manager,從而造成配置失敗,詳細(xì)信息參看 Tomcat Manager 文檔

  • build build 文件夾默認(rèn)位置是 ${build}/webapp/${path} (其中 ${build} 的默認(rèn)指向位置是 ${basedir}/build)。compile 目標(biāo)執(zhí)行完畢后,Web 應(yīng)用的 .WAR 文件將位于 ${build}/webapp/${path}.war。
  • webapp 該文件夾包含后續(xù)將進(jìn)行編譯與驗(yàn)證的膨脹 Web 應(yīng)用。默認(rèn)情況下,該文件夾是 myapp。
  • path Web 應(yīng)用已部署的上下文路徑,默認(rèn)為 /myapp
  • url 指向運(yùn)行中的 Tomcat 服務(wù)器中的某個(gè) Tomcat Manager Web 應(yīng)用的絕對(duì)路徑,用于對(duì) Web 應(yīng)用的部署與取消部署。默認(rèn)情況下,部署器會(huì)嘗試訪問(wèn)運(yùn)行在 localhost 上的 Tomcat 實(shí)例,其 url 為 http://localhost:8080/manager/text。
  • username Tomcat Manager 的用戶名(用戶應(yīng)具有讀寫(xiě) manager-script 的權(quán)限)。
  • password Tomcat Manager 的密碼。