建構您的專案資料夾 - AWS Elastic Beanstalk

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

建構您的專案資料夾

若要在部署到 Tomcat 伺服器時能夠運作,編譯的 Java Platform Enterprise Edition (Java EE) web 應用程式封存檔 (WAR 檔案) 必須根據特定準則來建構。您的專案目錄不需要滿足相同的標準,但最好也採用相同的結構以簡化編譯和封裝。在建置專案資料夾時,採用與 WAR 檔案內容相同的架構,也有助於您了解檔案彼此的關聯,和檔案在 Web 伺服器上的運作方式。

在下列建議的階層中,會將 web 應用程式的原始程式碼放置於 src 目錄中,來與建置指令碼和其所產生的 WAR 檔案隔離。

~/workspace/my-app/ |-- build.sh - Build script that compiles classes and creates a WAR |-- README.MD - Readme file with information about your project, notes |-- ROOT.war - Source bundle artifact created by build.sh `-- src - Source code folder |-- WEB-INF - Folder for private supporting files | |-- classes - Compiled classes | |-- lib - JAR libraries | |-- tags - Tag files | |-- tlds - Tag Library Descriptor files | `-- web.xml - Deployment Descriptor |-- com - Uncompiled classes |-- css - Style sheets |-- images - Image files |-- js - JavaScript files `-- default.jsp - JSP (JavaServer Pages) webpage

src 資料夾的內容符合您將封裝和部署到伺服器的內容,不過未包含 com 資料夾。此 com 資料夾包含您未編譯的類別 (.java 檔案)。這些需要被編譯,並放到您的應用程式程式碼可以存取的 WEB-INF/classes 目錄中。

WEB-INF 目錄中包含不會在 Web 伺服器上公開提供的程式碼與組態。位於來源目錄根的其他資料夾 (cssimagesjs),則會於 web 伺服器上的對應路徑公開提供。

下列的範例與先前的專案目錄相同,但包含了更多的檔案和子目錄。此範例專案包含簡單的標籤、模型和支援類別,以及 record 資源的 Java Server Pages (JSP) 檔案。此範例還包含 Bootstrap 的樣式表和 JavaScript、預設的 JSP 檔案,以及 404 錯誤的錯誤訊息頁面。

WEB-INF/lib 包含了 Java Archive (JAR) 檔案,內有適用於 PostgreSQL 的 Java Database Connectivity (JDBC) 驅動程式。WEB-INF/classes 為空,因為類別檔案尚未編譯。

~/workspace/my-app/ |-- build.sh |-- README.MD |-- ROOT.war `-- src |-- WEB-INF | |-- classes | |-- lib | | `-- postgresql-9.4-1201.jdbc4.jar | |-- tags | | `-- header.tag | |-- tlds | | `-- records.tld | `-- web.xml |-- com | `-- myapp | |-- model | | `-- Record.java | `-- web | `-- ListRecords.java |-- css | |-- bootstrap.min.css | `-- myapp.css |-- images | `-- myapp.png |-- js | `-- bootstrap.min.js |-- 404.jsp |-- default.jsp `-- records.jsp

使用 Shell 指令碼來建置 WAR 檔案

build.sh 是極為簡單的 shell 指令碼,可編譯 Java 類別、建構 WAR 檔案,以及將檔案複製到 Tomcat 的 webapps 目錄來進行本機測試。

cd src javac -d WEB-INF/classes com/myapp/model/Record.java javac -classpath WEB-INF/lib/*:WEB-INF/classes -d WEB-INF/classes com/myapp/model/Record.java javac -classpath WEB-INF/lib/*:WEB-INF/classes -d WEB-INF/classes com/myapp/web/ListRecords.java jar -cvf ROOT.war *.jsp images css js WEB-INF cp ROOT.war /Library/Tomcat/webapps mv ROOT.war ../

在 WAR 檔案中,會具有與先前範例的 src 目錄相同的架構 (不包括 src/com 資料夾)。jar 指令會自動建立 META-INF/MANIFEST.MF 檔案。

~/workspace/my-app/ROOT.war |-- META-INF | `-- MANIFEST.MF |-- WEB-INF | |-- classes | | `-- com | | `-- myapp | | |-- model | | | `-- Records.class | | `-- web | | `-- ListRecords.class | |-- lib | | `-- postgresql-9.4-1201.jdbc4.jar | |-- tags | | `-- header.tag | |-- tlds | | `-- records.tld | `-- web.xml |-- css | |-- bootstrap.min.css | `-- myapp.css |-- images | `-- myapp.png |-- js | `-- bootstrap.min.js |-- 404.jsp |-- default.jsp `-- records.jsp

使用 .gitignore

為避免將編譯過的類別檔案和 WAR 檔案提交於您的 Git 儲存庫中,或是在執行 Git 指令時出現關於這些檔案的訊息,請將相關的檔案類別新增至專案資料夾中名為 .gitignore 的檔案內。

~/workspace/myapp/.gitignore

*.zip *.class