

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

# 建構您的專案資料夾
<a name="java-tomcat-platform-directorystructure"></a>

若要在部署到 Tomcat 伺服器時能夠運作，編譯的 Java Platform Enterprise Edition (*Java EE*) web 應用程式封存檔 (WAR 檔案) 必須根據特定[準則](https://docs.oracle.com/javaee/7/tutorial/packaging003.htm)來建構。您的專案目錄不需要滿足相同的標準，但最好也採用相同的結構以簡化編譯和封裝。在建置專案資料夾時，採用與 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 伺服器上公開提供的程式碼與組態。位於來源目錄根的其他資料夾 (`css`、`images` 與 `js`)，則會於 web 伺服器上的對應路徑公開提供。

下列的範例與先前的專案目錄相同，但包含了更多的檔案和子目錄。此範例專案包含簡單的標籤、模型和支援類別，以及 `record` 資源的 Java Server Pages (JSP) 檔案。此範例還包含 [Bootstrap](http://getbootstrap.com/) 的樣式表和 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 檔案
<a name="java-tomcat-platform-directorystructure-building"></a>

`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`
<a name="java-tomcat-platform-gitignore"></a>

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

**\$1/workspace/myapp/.gitignore**

```
*.zip
*.class
```