web-dev-qa-db-fra.com

Comment définir le chemin de contexte d'une application Web dans Tomcat 7.0

Je sais que je peux renommer ma webapp (ou son fichier WAR) en ROOT mais c'est une façon terrible de le faire, à mon humble avis. Maintenant, j'ai vérifié le doc Tomcat et il est dit

Il n'est PAS recommandé de placer des éléments directement dans le fichier server.xml

J'ai donc essayé de faire une autre méthode suggérée.

Les éléments de contexte individuels peuvent être explicitement définis: Dans un fichier individuel dans /META-INF/context.xml dans les fichiers de l'application.

J'ai donc créé un /META-INF/context.xml avec le code suivant,

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/"/>

Mais après le déploiement, lorsque j'ai redémarré le serveur, le chargement du contexte à "/" n'a toujours pas abouti, il l'a quand même chargé avec le "/<WEB_APP_NAME>"

Tous les indicateurs utiles.

157
Chantz

Ce que vous pouvez faire est le suivant:

Ajouter un fichier appelé ROOT.xml dans <catalina_home>/conf/Catalina/localhost/

Ce fichier ROOT.xml remplacera les paramètres par défaut du contexte racine de l'installation de Tomcat pour ce moteur et cet hôte (Catalina et localhost).

Entrez ce qui suit dans le fichier ROOT.xml;

<Context 
  docBase="<yourApp>" 
  path="" 
  reloadable="true" 
/>

Ici, <yourApp> est le nom de, eh bien, votre application .. :)

Et voilà, votre application est maintenant l'application par défaut et s'affichera sur http://localhost:8080

Cependant, il y a un effet secondaire; votre application sera chargée deux fois. Une fois pour localhost:8080 et une fois pour localhost:8080/yourApp. Pour résoudre ce problème, vous pouvez placer votre application OUTSIDE <catalina_home>/webapps et utiliser un chemin relatif ou absolu dans la balise docBase du fichier ROOT.xml. Quelque chose comme ça;

<Context 
  docBase="/opt/mywebapps/<yourApp>" 
  path="" 
  reloadable="true" 
/>

Et alors tout devrait bien se passer!

224
Paaske

Voici les seules solutions qui ont fonctionné pour moi. Ajoutez ceci au nœud hôte dans le fichier conf/server.xml

<Context path="" docBase="yourAppContextName">

  <!-- Default set of monitored resources -->
  <WatchedResource>WEB-INF/web.xml</WatchedResource>

</Context>

accédez au fichier server.xml de Tomcat et définissez le chemin vide.

13
rodvlopes

Dans Tomcat 9.0, il suffit de modifier les éléments suivants dans le server.xml

<Context docBase="web" path="/web" reloadable="true" source="org.Eclipse.jst.jee.server:web"/>

à

<Context docBase="web" path="" reloadable="true" source="org.Eclipse.jst.jee.server:web"/>
4
MK Yung

Ce petit code a fonctionné pour moi, en utilisant des hôtes virtuels

<Host name="my.Host.name" >
   <Context path="" docBase="/path/to/myapp.war"/>
</Host>
3
Jorge Sanchez

Le plus rapide et peut être la meilleure solution est d'avoir le contenu ci-dessous dans <Tomcat_INSTALL_DIR>/conf/Catalina/localhost/ROOT.xml

<Context 
  docBase="/your_webapp_location_directory" 
  path="" 
  reloadable="true" 
/>

Et votre application Web sera disponible à l'adresse http://<Host>:<port>/

2
Rajesh Gheware

Cela fait un mois que je suis confronté à ce problème. Mettre la balise de contexte dans server.xml n'est pas sûr. Cela affecte les éléments de contexte déployés pour tous les autres hôtes. Pour les applications volumineuses, les erreurs de connexion ne sont pas bonnes. Par exemple, vous pouvez accéder à d'autres sites par nom de dossier domain2 .com/domain1Folder !! également les connexions de session de base de données chargées deux fois L'autre façon est de placer le fichier ROOT.xml qui a une balise de contexte avec un chemin complet, tel que:

 <Context path="" docBase="/var/lib/Tomcat7/webapps/ROOT" />

dans conf/catalina/webappsfoldername et déployez le fichier war en tant que ROOT.war dans webappsfoldername et spécifiez également l'hôte tel que

 <Host name="domianname"  appBase="webapps2" unpackWARs="true"  autoDeploy="true"  xmlValidation="false" xmlNamespaceAware="false" >

        <Logger className="org.Apache.catalina.logger.FileLogger"
               directory="logs"  prefix="localhost_log." suffix=".txt"
          timestamp="true"/>
</Host>

Dans cette approche, même pour les applications de même type, les sessions utilisateur n'ont pas une bonne isolation! vous pouvez dans app1 si app1 identique à app2, vous pouvez vous connecter automatiquement à app2 après avoir ouvert une session par session côté serveur.! Vous devez donc conserver la session des utilisateurs dans le cache côté client et non avec jsessionid! nous pouvons changer le nom du moteur localhost pour le résoudre. mais disons que jouer avec Tomcat a besoin de plus de temps que de jouer avec d'autres chats!

1
Ali.Mojtehedy

Pour moi, les deux réponses ont fonctionné.

  1. Ajout d’un fichier nommé ROOT.xml dans/conf/Catalina/localhost /
<Context
    docBase="/tmp/wars/hpong"
  path=""
  reloadable="true"
/>
  1. Ajout d'une entrée dans server.xml
<Service name="Catalina2">
    <Connector port="8070" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8743" />
    <Engine name="Catalina2" defaultHost="localhost">
        <Host name="localhost"
            unpackWARs="true" autoDeploy="true">
            <Context path="" docBase="/tmp/wars/hpong"  reloadable="true">
                <WatchedResource>WEB-INF/web.xml</WatchedResource>
            </Context>
      </Host>
    </Engine>
</Service>

Remarque: lorsque vous déclarez docBase sous contexte, ignorez appBase sur l'hôte.

  1. Cependant, j'ai préféré convertir mon nom de guerre en ROOT.war et le placer sous Webapps. Alors maintenant, les demandes d'URL incomparables d'autres guerres (chemins de contexte) vont aboutir dans cette guerre. C'est une meilleure façon de gérer le chemin de contexte ROOT ("/ **").

La deuxième option consiste également à (double) charger les guerres à partir du dossier Webapps. En outre, il ne nécessite que le dossier de guerre non compressé, ce qui est un casse-tête.

1
Kanagavelu Sugumar

Il n'est pas recommandé de mettre à jour la configuration du serveur comme server.xml ou ROOT.xml.

Vous pouvez placer un fichier de configuration context.xml dans le répertoire META-INF de votre application Web, avec le paramètre de chemin de contexte inclus. Cela remplacera le paramètre de serveur par défaut?

c'est à dire.:

<Context docBase="yourAppName" path="/yourAppPath" reloadable="true">
1
Ivan

Tomcat 8: après de nombreuses recherches, il ne s'agit que du code qui fonctionne: dans le fichier server.xml

<!-- Set /Apple as default path -->
    <Host name="localhost"  appBase="webapps"
         unpackWARs="true" autoDeploy="true">
     <Context path="" docBase="Apple">
         <!-- Default set of monitored resources -->
         <WatchedResource>WEB-INF/web.xml</WatchedResource>
     </Context>
    </Host>

Redémarrez Tomcat, assurez-vous que lorsque vous accédez à 127.0.0.1:8080, le contenu s'affiche dans 127.0.0.1:8080/Apple

Mon projet était Java une application Web créée par Netbeans, j’ai défini le chemin du contexte dans la configuration du projet, rien d’autre, même si j’ai mis Apple.war dans le dossier webapps.

1
user3600935

<Context docBase="yourAppName" path="" reloadable="true">

accédez au fichier server.xml de Tomcat et définissez le chemin vide.

1
Vipin Yadav

La solution la plus simple et la plus flexible est présentée ci-dessous: Inside $ {Tomcat_home} /config/server.xml

Modifiez le autoDeploy = "false" deployOnStartup = "false" sous hôte comme ci-dessous c'est incontournable.

<Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="false" deployOnStartup="false">

Ajouter la ligne ci-dessous sous l'élément hôte.

<Context path="" docBase="ServletInAction.war"  reloadable="true">
            <WatchedResource>WEB-INF/web.xml</WatchedResource>
        </Context>

Avec l'approche ci-dessus, nous pouvons ajouter autant d'applications sous des applications Web avec des noms de chemin de contexte différents.

0
Ravi Gupta

Dans Tomcat 8.X, sous le répertoire de base de Tomcat/conf/folder dans le fichier server.xml, vous pouvez ajouter la balise <Context> sous la balise <Host>, comme indiqué ci-dessous. Mais vous devez redémarrer le serveur pour prendre effet

  <Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="true">

     <Context docBase="${catalina.base}\webapps\<Your App Directory Name>" path="<your app path you wish>" reloadable="true" />
  </Host>

OU si vous utilisez Tomcat 7.X, vous pouvez ajouter un fichier context.xml dans le dossier WEB-INF de votre projet. Le contenu du fichier que j'ai utilisé est comme indiqué. et cela a bien fonctionné pour moi. vous n'avez pas à redémarrer le serveur dans ce cas.

<?xml version="1.0" encoding="UTF-8"?>

<Context docBase="${catalina.base}\webapps\<My App Directory Name>" path="<your app path you wish>" reloadable="true" />
0
harsha kumar Reddy