

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 项目文件夹结构设置
<a name="java-tomcat-platform-directorystructure"></a>

要在部署到 Tomcat 服务器时正常工作，必须根据某些[准则](https://docs.oracle.com/javaee/7/tutorial/packaging003.htm)为编译的 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 服务器上公开提供的代码和配置。源目录根位置处的其他文件夹 (`css`、`images` 和 `js`) 在 Web 服务器上的对应路径中公开提供。

以下列示例与上面的项目目录相同，只是包含的文件和子目录更多。此示例项目包含简单的标签、模型和支持类以及一个用于 `record` 资源的 Java Server Page (JSP) 文件。它还包括样式表和 [Bootstrap JavaScript ](http://getbootstrap.com/) 的样式表、默认 JSP 文件以及一个针对 404 错误的错误页面。

`WEB-INF/lib` 包含一个 Java 存档 (JAR) 文件，其中含有用于 PostgreSQL 的 Java 数据库连接 (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
```