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

Tomcat Web 應(yīng)用部署

本章概述

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

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

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

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

依靠 Manager 這種 Web 應(yīng)用,可以實施多種部署。Tomcat 為 Apache Ant 構(gòu)建工具提供了多個任務(wù)。 Apache Tomcat Maven Plugin 工程則提供了與 Apache Maven 的集成。另外還有一種工具叫做客戶端配置器 (Client Deployer,TCD),它通過命令行來使用,提供一些額外的功能,比如編譯與驗證 Web 應(yīng)用,以及將 Web 應(yīng)用打包成 Web 應(yīng)用資源(WAR)文件。

安裝

靜態(tài)部署 Web 應(yīng)用時,并不需要附加的安裝,因為 Tomcat 已經(jīng)提供了這項功能。利用 Tomcat Manager 部署應(yīng)用也不需要任何安裝,不過需要進行一番配置,詳見Tomcat Manager 手冊。如果使用客戶端配置器的話,就必須要進行安裝了。

Tomcat 的核心分發(fā)版并不包括 TCD,必須從下載區(qū)獨立下載它,下載文件通常冠名為:apache-tomcat-8.0.x-deployer。

要想使用 TCD,必須事先配置有 Apache Ant 1.6.2+ 以及 Java 安裝。另外,還必須定義一個指向 ANT 安裝根目錄的 ANT_HOME 環(huán)境變量,以及一個指向 Java 安裝目錄的 JAVA_HOME 值。另外,還必須確保必須在操作系統(tǒng)所提供的命令 shell 中運行 ANT 的 ant 命令,以及 Java 的 javac 編譯器命令。

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

關(guān)于上下文

在談到 Web 應(yīng)用的配置時,需要理解一下上下文(Context)這個概念。上下文在 Tomcat 中其實就是 Web 應(yīng)用的意思。

為了在 Tomcat 中配置上下文,需要用到上下文描述符文件( Context Descriptor)。上下文描述符文件其實就是一個 XML 文件,含有 Tomcat 與上下文相關(guān)的配置信息,例如命名資源或會話管理器配置信息。在 Tomcat 的早期版本中,上下文描述符文件配置的內(nèi)容經(jīng)常保存在 Tomcat 的主要配置文件 server.xml 中,但現(xiàn)在不再推薦采用這一方式(雖然目前它依然有效)。

上下文描述符文件不僅能幫助 Tomcat 了解如何配置上下文,而且其他工具(如 Manager 與 TCD)也經(jīng)常會借助上下文描述符文件來正確履行它們的職責(zé)。

上下文描述符文件位于:

1.$CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml

2.$CATALINA_BASE/webapps/[webappname]/META-INF/context.xml

在目錄 1 中的文件名為 [webappname].xml,但在目錄 2 中,文件名為 context.xml。如果某個 Web 應(yīng)用沒有相應(yīng)的上下文描述符文件,Tomcat 就會使用默認值配置該應(yīng)用。

在 Tomcat 啟動時進行部署

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

再次解釋一下,應(yīng)用部署位置由主機(默認主機為 localhost)的 appBase 屬性來指定。默認的 appBase 屬性所指定的目錄為 $CATALINA_BASE/webapps。只有當主機的 deployOnStartup 屬性為 true, 應(yīng)用才會在 Tomcat 啟動時進行自動部署。

在以上情況下,當 Tomcat 啟動時,部署的具體步驟如下:

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

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

除了靜態(tài)部署之外,也可以在運行中的 Tomcat 服務(wù)器上進行應(yīng)用部署。

如果主機的 autoDeploy 屬性為 true,主機就會在必要時嘗試著動態(tài)部署并更新 Web 應(yīng)用。 例如,當把一個新 .WAR 文件放入 appBase 所指定的名錄時。為了實現(xiàn)這種操作,主機就需要啟用后臺處理,當然這也是默認的配置。

autoDeploy 設(shè)置為 true 時,運行中的 Tomcat 服務(wù)器能夠允許實現(xiàn)以下行為:

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

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

使用 Tomcat Manager 進行部署

詳情參看 Tomcat Manager 文檔

使用客戶端部署器進行部署

最后要介紹的是利用客戶端部署器(TCD)對 Web 應(yīng)用進行部署??蛻舳瞬渴鹌骺梢詫嵤┑男袨榘ǎ候炞C并編譯 Web 應(yīng)用,將資源文件壓縮成 .WAR 文件,并將 Web 應(yīng)用部署到用于生產(chǎn)或開發(fā)環(huán)境的 Tomcat 服務(wù)器上。一定要注意,該特性的實現(xiàn)需要使用 Tomcat Manager,而且目標 Tomcat 服務(wù)器也應(yīng)處于運行狀態(tài)。

因為會用到 TCD,所以要求用戶還必須熟悉 Apache Ant。Apache Ant 是一個腳本編譯工具。TCD 每個包都會帶有一個編譯腳本。只需大體能夠了解 Apache Ant 即可(本節(jié)前面列有其安裝細則,這里需要熟練使用操作系統(tǒng)命令 shell 以及配置環(huán)境變量)。

TCD 包括一些 Ant 任務(wù),在配置前用于 JSP 編譯的 Jasper 頁面編譯器,以及驗證 Web 應(yīng)用上下文描述符的任務(wù)。驗證器任務(wù)(org.apache.catalina.ant.ValidatorTask類)只允許傳入一個參數(shù):膨脹 Web 應(yīng)用的基本路徑。

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

TCD 包含一個可即時使用的 Ant 腳本, 其中包含以下目標。

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

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

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

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