web-dev-qa-db-fra.com

Définir le contexte de servlet dans le fichier WAR

Comment puis-je dire par exemple Tomcat pour utiliser un chemin de contexte spécifique lorsque je reçois mon fichier WAR?

Exemple: J'ai un fichier war créé par maven build et le nom résultant du fichier est assez long. Je ne veux donc pas que l'application de gestionnaire Tomcat utilise le nom de fichier de la guerre comme contexte.

La fourniture d'un fichier context.xml dans META-INF n'a pas produit les résultats souhaités

J'ai également trouvé cela dans la documentation de l'attribut path de Context:

La valeur de ce champ ne doit pas être définie sauf lors de la définition statique d'un contexte dans server.xml, car elle sera déduite des noms de fichiers utilisés pour le fichier de contexte .xml ou la docBase.

Il ne semble donc pas que ce soit le bon moyen de dire au serveur d'applications quel doit être le chemin de mon WAR.

Avez-vous d'autres conseils?

24
er4z0r

Il y a deux points importants dans la documentation du Context Container :

  • Dans des fichiers individuels (avec une extension ".xml") dans le $CATALINA_BASE/conf/[enginename]/[hostname]/ répertoire. Le nom du fichier (moins l'extension .xml) sera utilisé comme chemin de contexte . Les chemins de contexte à plusieurs niveaux peuvent être définis à l'aide de #, par ex. foo # bar.xml pour un chemin de contexte de/foo/bar. L'application Web par défaut peut être définie à l'aide d'un fichier appelé ROOT.xml.
  • Uniquement si aucun fichier de contexte n'existe pour l'application dans le $CATALINA_BASE/conf/[enginename]/[hostname]/, dans un fichier individuel à /META-INF/context.xml à l'intérieur des fichiers d'application. Si l'application Web est présentée sous forme de fichier WAR, /META-INF/context.xml sera copié dans $CATALINA_BASE/conf/[enginename]/[hostname]/ et renommé pour correspondre au chemin de contexte de l'application . Une fois que ce fichier existe, il ne sera pas remplacé si un nouveau WAR avec un _ /META-INF/context.xml est placé dans l'appBase de l'hôte.

Ainsi, lorsque vous regroupez un META-INF/context.xml, le fichier est renommé en nom de WAR et ce nom devient le chemin du contexte, indépendamment de tout path défini dans l'élément Context.

Je vois donc ici deux options:

  1. Soit définissez le nom de la guerre générée sur un nom plus court (je suggère d'utiliser <finalName> plus de <warName> qui est déconseillé AFAIK):

    <project>
      ...
      <build>
        <finalName>mycontext</finalName>
        ...
      </build>
      ...
    </project>
    
  2. Ou utilisez le maven-Tomcat-plugin pour le déploiement et définissez le chemin du contexte dans la configuration du plugin:

    <project>
      ...
      <build>
        ...
        <plugins>
          ...
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>Tomcat-maven-plugin</artifactId>
            <version>1.0-SNAPSHOT</version>
            <configuration>
              <path>/mycontext</path>
            </configuration>
          </plugin>
          ...
        </plugins>
        ...
      </build>
      ...
    </project>
    
30
Pascal Thivent

J'ai trouvé une solution simple pour conserver le nom du fichier war et choisir le chemin d'accès au contexte.

Il vous suffit de déployer votre guerre en dehors du appBase de l'hôte et de créer un lien dans le répertoire appBase.

Ex. :

ln -sf ${CATALINA_HOME}/wars/myapp-0.0.8-SNAPSHOT.war ${CATALINA_HOME}/webapps/myapp.war

Ektor

5
Ektor

Vous pouvez définir l'attribut path de <Context> élément de votre META-INF/context.xml.

Alternativement, vous pouvez configurer maven pour créer l'artefact de guerre avec un nom personnalisé:

<build>
    <plugins>
         <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.0</version>
            <configuration>
                <warName>yourCustomWarName</warName>
            </configuration>
        </plugin>
        ........
    </plugins>
</build>
4
Bozho

Dans votre projet, il y a un dossier META-INF, dans ce dossier, il y a un fichier context.xml.

<?xml version="1.0" encoding="UTF-8"?>
<Context  path="/myproject" />
3
Mark