部署

目錄

背景

在說明如何組織原始碼目錄之前,了解 Web 應用程式的執行時間組織會很有幫助。在 Servlet API 規範版本 2.2 之前,伺服器平台之間幾乎沒有相容性。然而,符合 2.2(或更新版本)規範的伺服器必須採用標準格式接受「Web 應用程式封存檔」,後續將進一步說明。

Web 應用程式定義為採用標準配置的目錄和檔案階層。此類階層可以「解壓縮」形式存取,其中每個目錄和檔案都個別存在於檔案系統中,或以稱為 Web ARchive 或 WAR 檔案的「壓縮」形式存取。前一種格式在開發期間較為實用,而後一種格式則用於在您發佈應用程式以進行安裝時。

Web 應用程式階層的最上層目錄也是應用程式的「文件根目錄」。您將在此放置構成應用程式使用者介面的 HTML 檔案和 JSP 頁面。當系統管理員將您的應用程式部署到特定伺服器時,他們會為您的應用程式指定「內容路徑」(本手冊的後續章節說明在 Tomcat 上部署)。因此,如果系統管理員將您的應用程式指定給內容路徑 /catalog,則參照 /catalog/index.html 的要求 URI 將從您的文件根目錄擷取 index.html 檔案。

標準目錄配置

為了便於以所需格式建立 Web 應用程式封存檔檔案,建議將 Web 應用程式的「可執行」檔案(也就是 Tomcat 在執行您的應用程式時實際使用的檔案)按照 WAR 格式本身所需的組織方式進行排列。為此,您最終會在應用程式的「文件根目錄」目錄中得到以下內容

  • *.html、*.jsp 等 - HTML 和 JSP 頁面,以及其他必須對用戶端瀏覽器可見的檔案(例如 JavaScript、樣式表檔案和影像),供您的應用程式使用。在較大的應用程式中,您可以選擇將這些檔案分為子目錄階層,但對於較小的應用程式,通常只為這些檔案保留單一目錄會簡單得多。

  • /WEB-INF/web.xml - 應用程式的網路應用程式部署描述檔。這是個 XML 檔案,用於描述應用程式中組成應用程式的 servlet 和其他元件,以及任何初始化參數和容器管理的安全限制,你希望伺服器為你強制執行。此檔案會在下一個小節中更詳細地討論。

  • /WEB-INF/classes/ - 此目錄包含應用程式所需的任何 Java 類別檔案(和相關資源),包括 servlet 和非 servlet 類別,這些類別未組合成 JAR 檔案。如果你的類別組織成 Java 套件,你必須在 /WEB-INF/classes/ 下的目錄階層中反映這一點。例如,名為 com.mycompany.mypackage.MyServlet 的 Java 類別需要儲存在名為 /WEB-INF/classes/com/mycompany/mypackage/MyServlet.class 的檔案中。

  • /WEB-INF/lib/ - 此目錄包含 JAR 檔案,其中包含應用程式所需的 Java 類別檔案(和相關資源),例如協力廠商類別庫或 JDBC 驅動程式。

當你將應用程式安裝到 Tomcat(或任何其他 2.2 或更新版本的 Servlet 容器)時,WEB-INF/classes/ 目錄中的類別,以及 WEB-INF/lib/ 目錄中找到的 JAR 檔案中的所有類別,都會對特定網路應用程式中的其他類別可見。因此,如果你將所有必要的函式庫類別包含在其中一個位置(請務必檢查你使用的任何協力廠商函式庫的再發行權利),你將簡化網路應用程式的安裝——無需調整系統類別路徑(或在你的伺服器中安裝全域函式庫檔案)。

這些資訊大部分摘自 Servlet API 規格第 2.3 版的第 9 章,你應該參閱該章節以取得更多詳細資訊。

共用程式庫檔案

與大多數 servlet 容器一樣,Tomcat 也支援安裝函式庫 JAR 檔案(或解壓縮的類別)一次,並讓所有已安裝的網路應用程式都能看到它們(無需包含在網路應用程式本身中)。Tomcat 如何找到並共用這些類別的詳細資訊,請參閱類別載入器操作指南文件。在 Tomcat 安裝中通常用於共用程式碼的位置是 $CATALINA_HOME/lib。放在這裡的 JAR 檔案對網路應用程式和內部 Tomcat 程式碼都是可見的。這是放置應用程式或內部 Tomcat 使用所需的 JDBC 驅動程式的理想位置(例如,用於 DataSourceRealm)。

標準的 Tomcat 安裝在開箱即用時,包含各種預先安裝的共用函式庫檔案,包括

  • 撰寫 servlet 和 JSP 的基礎Servlet 6.0JSP 3.1 API。

Web 應用程式部署描述

如上所述,/WEB-INF/web.xml 檔案包含應用程式的 Web 應用程式部署描述檔。如同檔案名稱副檔名暗示的,此檔案為 XML 文件,並定義伺服器需要知道的關於應用程式的一切(除了內容路徑,這是由系統管理員在部署應用程式時指定的)。

部署描述檔的完整語法和語意定義在 Servlet API 規範第 13 章,版本 2.3。隨著時間推移,預計將提供可為您建立和編輯部署描述檔的開發工具。在此同時,提供一個 基本 web.xml 檔案 作為起點。此檔案包含描述每個包含元素目的的註解。

注意 - Servlet 規範包含 Web 應用程式部署描述檔的 Document Type Descriptor (DTD),而 Tomcat 在處理應用程式的 /WEB-INF/web.xml 檔案時會強制執行在此定義的規則。特別是,您必須按照 DTD 定義的順序輸入描述符元素(例如 <filter><servlet><servlet-mapping>,請參閱第 13.3 節)。

Tomcat Context 描述

/META-INF/context.xml 檔案可用於定義 Tomcat 特定的組態選項,例如存取記錄、資料來源、工作階段管理員組態等等。此 XML 檔案必須包含一個 Context 元素,它將被視為對應於部署 Web 應用程式的 Host 的 Host 元素的子元素。 Tomcat 組態文件 包含有關 Context 元素的資訊。

使用 Tomcat 部署

以下說明使用變數名稱 $CATALINA_BASE 來表示解析大多數相對路徑的基礎目錄。如果您尚未透過設定 CATALINA_BASE 目錄來為多個執行個體組態 Tomcat,則 $CATALINA_BASE 將設定為 $CATALINA_HOME 的值,即您已安裝 Tomcat 的目錄。

為了執行,Web 應用程式必須部署在 servlet 容器上。即使在開發期間也是如此。我們將說明使用 Tomcat 來提供執行環境。Web 應用程式可以使用下列方法之一在 Tomcat 中部署

  • 將未封裝的目錄階層複製到目錄 $CATALINA_BASE/webapps/ 中的子目錄。 Tomcat 會根據您選擇的子目錄名稱為應用程式指定內容路徑。我們將在我們建構的 build.xml 檔案中使用此技術,因為這是開發期間最快速且最簡單的方法。安裝或更新應用程式後,請務必重新啟動 Tomcat。

  • 將 Web 應用程式檔案複製到目錄 $CATALINA_BASE/webapps/。當 Tomcat 啟動時,它會自動將 Web 應用程式檔案展開成未壓縮的格式,並以這種方式執行應用程式。此方法通常用於將由第三方廠商或您的內部開發人員提供的額外應用程式安裝到現有的 Tomcat 安裝中。注意 - 如果您使用此方法,並希望稍後更新您的應用程式,您必須同時替換 Web 應用程式檔案刪除 Tomcat 建立的已展開目錄,然後重新啟動 Tomcat,才能反映您的變更。

  • 使用 Tomcat「管理員」Web 應用程式來部署和取消部署 Web 應用程式。Tomcat 包含一個 Web 應用程式,預設部署在內容路徑 /manager 上,它允許您在執行中的 Tomcat 伺服器上部署和取消部署應用程式,而無需重新啟動它。請參閱 管理員應用程式操作指南 以取得有關使用管理員 Web 應用程式的更多資訊。

  • 在您的建置指令碼中使用「管理員」Ant 任務。Tomcat 包含一組自訂任務定義,用於 Ant 建置工具,它允許您自動執行命令至「管理員」Web 應用程式。這些任務用於 Tomcat 部署器中。

  • 使用 Tomcat 部署器。Tomcat 包含一個封裝工具,它會將 Ant 任務綑綁在一起,並可以在部署到伺服器之前自動預先編譯 Web 應用程式的一部分的 JSP。

在其他 Servlet 容器上部署您的應用程式將會針對每個容器而有所不同,但所有與 Servlet API 規範(版本 2.2 或更新版本)相容的容器都必須接受 Web 應用程式檔案。請注意,其他容器不需要接受未壓縮的目錄結構(如 Tomcat 所做),或提供共用程式庫檔案的機制,但這些功能通常可用。