

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Structuration de votre dossier de projet
<a name="java-tomcat-platform-directorystructure"></a>

Pour fonctionner lorsqu'ils sont déployés sur un serveur Tomcat, les fichiers WAR (web application archives) *Java EE* (Java Platform Enterprise Edition) compilés doivent être structurés selon certaines [directives](https://docs.oracle.com/javaee/7/tutorial/packaging003.htm). Votre répertoire de projet n'a pas besoin de respecter les mêmes normes, mais nous vous recommandons de le structurer de la même façon afin de simplifier la compilation et l'empaquetage. De plus, si vous structurez votre dossier de projet comme le contenu du fichier WAR, vous comprendrez mieux comment les fichiers sont liés et comment ils se comportent sur un serveur web.

Dans la hiérarchie recommandée ci-dessous, le code source de l'application web est placé dans un répertoire `src` afin de l'isoler du script de génération et du fichier WAR qu'il génère.

```
~/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
```

Le contenu du dossier `src` correspond à ce que vous allez empaqueter et déployer sur le serveur, à l'exception du dossier `com`. Le dossier `com` contient vos classes non compilées (fichiers `.java`). Ils doivent être compilés et placés dans le répertoire `WEB-INF/classes` afin d'être accessibles à partir du code de votre application.

Le répertoire `WEB-INF` contient le code et les configurations qui ne sont pas publiquement traités sur le serveur web. Les autres dossiers situés à la racine du répertoire source (`css`, `images` et `js`) sont publiquement disponibles à l'emplacement correspondant sur le serveur web.

L'exemple suivant est identique au répertoire de projet précédent, sauf qu'il contient davantage de fichiers et de sous-répertoires. Cet exemple de projet inclut des balises simples, des classes de modèle et de support, et un fichier Java Server Pages (JSP) pour une ressource `record`. Il inclut également une feuille de style et, JavaScript pour [Bootstrap](http://getbootstrap.com/), un fichier JSP par défaut et une page d'erreur pour les erreurs 404.

`WEB-INF/lib` inclut un fichier JAR (Java Archive) contenant le pilote JDBC (Java Database Connectivity) pour PostgreSQL. `WEB-INF/classes` est vide, car les fichiers de classe n'ont pas encore été compilés.

```
~/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
```

## Création d'un fichier WAR avec un script Shell
<a name="java-tomcat-platform-directorystructure-building"></a>

`build.sh` est un script shell très simple qui compile les classes Java, crée un fichier WAR et le copie dans le répertoire `webapps` de Tomcat pour les tests en local.

```
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 ../
```

Dans le fichier WAR, vous trouvez la même structure que celle du répertoire `src` figurant dans l'exemple précédent, à l'exception du dossier `src/com`. La commande `jar` crée automatiquement le fichier `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
```

## Utiliser `.gitignore`
<a name="java-tomcat-platform-gitignore"></a>

Pour éviter de valider les fichiers de classe compilés et les fichiers WAR dans votre référentiel Git, ou de voir des messages les concernant lorsque vous exécutez les commandes Git, ajoutez les types de fichiers appropriés à un fichier nommé `.gitignore` dans votre dossier de projet.

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

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