Comment définir le chemin de contexte d'une application web 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 dit
Il N'est pas recommandé de placer des éléments directement dans le serveur.fichier xml
J'ai donc essayé de le faire une autre méthode qu'il a suggérée.
Les éléments de contexte individuels peuvent être explicitement définis: fichier individuel à / META-INF / context.xml dans l'application fichier.
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, il n'a toujours pas réussi à charger le contexte à"/", il l'a toujours chargé avec le "/<WEB_APP_NAME>"
Tous les pointeurs utiles.
11 réponses
Ce que vous pouvez faire est le suivant;
Ajouter un fichier appelé ROOT.xml
dans <catalina_home>/conf/Catalina/localhost/
Cette racine.xml remplacera les paramètres par défaut pour le contexte racine de l'installation tomcat pour ce moteur et hôte (Catalina et localhost).
Entrez ce qui suit à la racine.fichier xml;
<Context
docBase="<yourApp>"
path=""
reloadable="true"
/>
Ici <yourApp>
est le nom de votre application.. :)
Et là vous allez, votre application est l'application par défaut et apparaîtra sur http://localhost:8080
Cependant, il y a est un effet secondaire; votre application sera chargée deux fois. Une fois de localhost:8080
et une fois pour localhost:8080/yourApp
. Pour résoudre ce problème, vous pouvez placer votre application en dehors de <catalina_home>/webapps
et utiliser un chemin relatif ou absolu dans la racine.la balise docbase xml. Quelque chose comme ça;
<Context
docBase="/opt/mywebapps/<yourApp>"
path=""
reloadable="true"
/>
Et alors tout devrait être OK!
Voici les seules solutions qui ont fonctionné pour moi. Ajoutez ceci au noeud D'hôte dans le conf / server.xml
<Context path="" docBase="yourAppContextName">
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
Accédez au serveur Tomcat.fichier xml et définir le chemin vide
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>
Dans Tomcat 9.0, je dois seulement changer ce qui suit 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"/>
Le plus rapide et peut être la meilleure solution est d'avoir du contenu ci-dessous dans <TOMCAT_INSTALL_DIR>/conf/Catalina/localhost/ROOT.xml
<Context
docBase="/your_webapp_location_directory"
path=""
reloadable="true"
/>
Et votre webapp sera disponible à http://<host>:<port>/
J'ai fait face à ce problème pendant un mois, en mettant une balise de contexte dans le serveur.xml n'est pas sûr, il affecte les éléments de contexte de déploiement pour tous les autres hôtes, pour les grandes applications, il prend des erreurs de connexion aussi pas une bonne isolation par exemple, vous pouvez accéder à d'autres sites par nom de dossier domain2.com/domain1Folder !! aussi les connexions de session de base de données chargées deux fois ! l'autre façon est de mettre la racine.fichier xml qui a une balise de contexte avec un chemin complet tel:
<Context path="" docBase="/var/lib/tomcat7/webapps/ROOT" />
Dans conf / catalina/webappsfoldername et déployer le fichier war comme RACINE.guerre dans webappsfoldername et spécifiez également l'hôte Tel
<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 aussi pour les applications de même type sessions utilisateur n'a pas une bonne isolation ! vous pouvez à l'intérieur app1 si app1 même que app2 vous pouvez après la connexion par session côté serveur peut automatiquement se connecter à app2 ?! Vous devez donc garder la session des utilisateurs dans le cache côté client et non avec jsessionid ! nous pouvons changer le nom du moteur de localhost pour le résoudre. mais disons que jouer avec tomcat besoin de plus de temps que de jouer avec d'autres des chats!
<Context docBase="yourAppName" path="" reloadable="true">
Accédez au serveur Tomcat.fichier xml et définir le chemin vide
Tomcat 8 : Après de nombreuses recherches cela ne fonctionne que du code: dans le serveur.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, il affichera le contenu dans 127.0.0.1: 8080 / apple
Mon projet était une application Web java créée par netbeans, j'ai défini le chemin du contexte dans la configuration du projet, pas d'autre chose, même si j'ai mis apple.guerre dans le dossier webapps.
Il n'est pas recommandé de mettre à jour la configuration du serveur comme server.xml ou de la RACINE.XML.
Vous pouvez mettre un contexte.fichier de configuration xml sous le répertoire META-INF de votre application web, avec le paramètre context path inclus. Cela remplacera le paramètre de serveur par défaut?
C'est-à-dire:
<Context docBase="yourAppName" path="/yourAppPath" reloadable="true">
Pour moi, les deux réponses ont fonctionné.
- Ajout D'un fichier appelé ROOT.xml dans /conf/Catalina/localhost/
<Context docBase="/tmp/wars/hpong" path="" reloadable="true" />
- Ajout d'une entrée dans le serveur.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.
- 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 inégalées d'autres guerres (contextpaths) atterriront dans cette guerre. C'est la meilleure façon pour gérer le chemin de contexte racine ("/**").
La deuxième option est (double) le chargement des guerres à partir du dossier Webapps ainsi. En outre, il n'a besoin que d'un dossier de guerre non compressé qui est un mal de tête.
L'astuce ci-dessous a fonctionné pour moi.
1) commentez / supprimez la configuration ci-dessous du serveur.fichier xml (dans le dossier conf) de tomcat.
2) Supprimez le dossier racine existant (le cas échéant) résidant dans le dossier webapps tomcat. Et renommez votre guerre (par exemple: test.de guerre ) le fichier RACINE.guerre.
Rappelez-vous que tout en renommant le fichier war en ROOT.la "racine" de guerre devrait être en majuscules.
Limitation: vous ne pouvez déployer qu'une seule application dans une instance tomcat.