J'essaie de modifier l'application par défaut d'un serveur Web Tomcat 6 en une application différente de "ROOT" (dans le dossier webapps). Quelle est la meilleure façon de procéder?
Il y a trois méthodes:
Commencez par éteindre votre Tomcat à partir du répertoire bin
(sh shutdown.sh
). Supprimez ensuite tout le contenu de votre dossier Tomcat webapps
(rm -fr *
). Renommez ensuite votre fichier WAR en ROOT.war
et lancez enfin votre Tomcat à partir du répertoire bin
(sh startup.sh
).
Laissez votre fichier war dans $CATALINA_BASE/webapps
sous son nom d'origine. Désactivez autoDeploy et deployOnStartup dans votre élément Host dans le server.xml
fichier. Définissez explicitement tous les contextes d’application dans server.xml
, en spécifiant le chemin et docBase attributs. Vous devez le faire car vous avez désactivé tous les mécanismes de déploiement automatique de Tomcat. Tomcat ne déploiera plus vos applications à moins de trouver leur contexte dans le server.xml
.
deuxième méthode: pour pouvoir modifier une application, vous devez arrêter et redémarrer Tomcat.
Placez votre fichier WAR en dehors de $CATALINA_BASE/webapps
(il doit être en dehors pour éviter un double déploiement). Placez un fichier de contexte nommé ROOT.xml
dans $CATALINA_BASE/conf/
. L'élément unique dans ce fichier de contexte DOIT avoir un attribut docBase pointant vers l'emplacement de votre fichier WAR. L'élément path ne doit pas être défini - il est dérivé du nom du fichier .xml
, dans ce cas ROOT.xml
. Voir le documentation pour le conteneur Context pour plus de détails.
Ajouter une balise <Context>
à la balise <Host>
dans server.xml
pour Tomcat 6 résoudra le problème.
Si vous utilisez path=""
vide, vous pouvez utiliser une URL telle que http://localhost/first.do
.
Dans les attributs de jeu de balises de contexte docBase="E:\struts-ITRCbook\myStrutsbook"
et reloadable="true"
, mettez fin à la balise de contexte.
Ça devrait ressembler a quelque chose comme ca:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="E:\struts-ITRCbook\myStrutsbook" reloadable="true">
</Context>
</Host>
Dans Tomcat 7, avec ces modifications, je peux accéder à myAPP
à /
et à ROOT
à /ROOT
.
<Context path="" docBase="myAPP"/>
<Context path="ROOT" docBase="ROOT"/>
Ajouter ci-dessus à la section <Host>
du fichier server.xml
L'application par défaut ROOT est généralement Tomcat Manager - ce qui peut être utile, donc j'avais envie de la garder.
Donc, la façon dont j'ai fait my app ROOT et gardé TCmgr était comme ça.
renommé ROOT à quelque chose d'autre
mv ROOT TCmgr
a ensuite créé un lien symbolique par lequel ROOT pointe vers l'application que je veux utiliser par défaut.
ln -s <your app> ROOT
travaillé pour moi et semblait l'approche la plus facile.
Vous pouvez le faire de manière légèrement piratée en:
Selon la documentation Apache Tomcat, vous pouvez modifier l'application en créant un fichier ROOT.xml. Voir cela pour plus d'informations:
http://Tomcat.Apache.org/Tomcat-6.0-doc/config/context.html
"L'application Web par défaut peut être définie à l'aide d'un fichier nommé ROOT.xml."
Une autre solution consisterait à créer un servlet qui envoie une redirection vers l'application Web souhaitée par défaut et mappe ce servlet sur toutes les URL de l'application Web ROOT.
package com.example.servlet;
import Java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class RedirectServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.sendRedirect("/myRootWebapp");
}
}
Ajouter la classe ci-dessus àCATALINA_BASE/webapps/ROOT/WEB-INF/classes/com/example/servlet
.
Et ajoutez ce qui suit àCATALINA_BASE/webapps/ROOT/WEB-INF/web.xml
:
<servlet>
<display-name>Redirect</display-name>
<servlet-name>Redirect</servlet-name>
<servlet-class>com.example.servlet.RedirectServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Redirect</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Et si vous le souhaitez, vous pouvez facilement modifier le RedirectServlet pour accepter un paramètre d'initialisation vous permettant de définir l'application Web par défaut sans avoir à modifier le source.
Je ne sais pas si cela aurait des implications négatives, mais je l'ai testé et cela semble fonctionner.
la configuration context.xml n'a pas fonctionné pour moi. Tomcat 6.0.29 se plaint de la présence de la docBase dans l'appBase: ... Pour Tomcat 5, cela fonctionnait réellement.
Une solution consiste donc à placer l’application dans le dossier ROOT.
Une autre solution très simple consiste à placer un index.jsp dans ROOT qui redirige vers mon application de la manière suivante: response.sendRedirect ("/ MyApplicationXy");
Cordialement, Jan
J'ai un problème lorsque j'ai configuré Tomcat 'server.xml
et ajouté un élément Context. Il ne veut tout simplement pas utiliser ma configuration: http://www.oreillynet.com/onjava/blog/2006/12/configuration_antipatterns_tom.html
Si vous êtes dans un système Unix-like
:
mv $CATALINA_HOME/webapps/ROOT $CATALINA_HOME/webapps/___ROOT
ln -s $CATALINA_HOME/webapps/your_project $CATALINA_HOME/webapps/ROOT
Terminé.
Travaille pour moi.
Ultime moyen de changer l'application racine Tomcat. Testé sur Tomcat 7 et 8.
Accédez au répertoire Tomapp webapps:
Exemple sur ma machine: ~/stack/Apache-Tomcat/webapps
Renommez, remplacez ou supprimez le dossier ROOT. Mon conseil est de renommer ou de créer une copie pour la sauvegarde. Exemple: renommez ROOT en RENAMED_ROOT:
mv ROOT RENAMED_ROOT
Déplacez le fichier war avec votre application dans le répertoire webapps de Tomcat (c’est un répertoire où se trouvait l’ancien dossier ROOT, sur ma machine: ~/stack/Apache-Tomcat/webapps)
Le fichier de guerre doit avoir un nom ROOT.war. Renommez votre application si c'est nécessaire: yourApplicationName.war -> ROOT.war
Je vais regarder mes docs; Il existe un moyen de spécifier une configuration pour changer le chemin de l'application Web racine en l'éloignant de ROOT (ou ROOT.war), mais cela semble avoir changé entre Tomcat 5 et 6.
Trouvé ceci:
http://www.nabble.com/Re:-Tomcat-6-and-ROOT-application...-td20017401.html
Il semble donc qu'il soit possible de changer le chemin racine (dans ROOT.xml), mais un peu cassé: vous devez déplacer votre fichier WAR en dehors du répertoire de déploiement automatique. Pensez-vous que si je vous demande pourquoi renommer votre fichier en ROOT.war n’est pas une solution viable?
Ce n’est pas une très bonne solution, mais l’un des moyens consiste à rediriger l’application ROOT vers YourWebApp. Pour cela, vous devez modifier le fichier ROOT index.html.
<html>
<head>
<title>Redirecting to /YourWebApp</title>
</head>
<body onLoad="javascript:window.location='YourWebApp';">
</body>
</html>
OR
<html>
<head>
<title>Redirecting to /YourWebApp</title>
<meta http-equiv="refresh" content="0;url=YourWebApp" />
</head>
<body>
</body>
</html>
Référence: http://staraphd.blogspot.com/2009/10/change-default-root-folder-in-Tomcat.html