Comment changer l'application ROOT?

130

J'essaie de changer l'application par défaut d'un serveur Web Tomcat 6 en une autre application que "ROOT" (dans le dossier webapps). Quelle est la meilleure façon de procéder?

user247702
la source

Réponses:

129

Il existe trois méthodes:

  • Arrêtez d'abord votre Tomcat depuis son binrépertoire ( sh shutdown.sh). Supprimez ensuite tout le contenu de votre webappsdossier Tomcat ( rm -fr *). Renommez ensuite votre fichier WAR ROOT.waret démarrez enfin votre Tomcat à partir du binrépertoire ( sh startup.sh).

  • Laissez votre fichier war $CATALINA_BASE/webappssous son nom d'origine. Désactivez autoDeploy et deployOnStartup dans votre élément Host dans le server.xmlfichier. Définissez explicitement tous les contextes d'application dans server.xml, en spécifiant à la fois les attributs path et docBase . Vous devez le faire car vous avez désactivé tous les mécanismes de déploiement automatique de Tomcat et Tomcat ne déploiera plus vos applications à moins qu'il ne trouve leur contexte dans le server.xml.

    deuxième méthode: pour apporter des modifications à une application, vous devrez arrêter et redémarrer Tomcat.

  • Placez votre fichier WAR à l'extérieur de $CATALINA_BASE/webapps(il doit être à l'extérieur pour éviter un double déploiement). Placez un fichier de contexte nommé ROOT.xmldans $CATALINA_BASE/conf/. L'élément unique de 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 .xmlfichier, dans ce cas ROOT.xml. Consultez la documentation du conteneur Contexte pour plus de détails.

Référence


la source
4
J'ai essayé la première méthode et ça marche! Bdw - vous n'avez pas besoin de tout supprimer. Je viens de supprimer le dossier ROOT et renommer ma guerre en ROOT.war et cela fonctionne comme un charme.
hostnik
Je sais que ce n'est pas vraiment suivre les règles de sof mais la foutre ..... Merci! J'aimerais pouvoir voter plus d'une fois. Super utile. BTW, j'ai redémarrer tomcat avant que cela ne fonctionne, @hostnik.
méchant pâteux
La troisième méthode de @ danny-london ne fonctionnait pas pour moi dans Tomcat 7, mais cela fonctionne si vous placez le fichier ROOT.xml dans le $CATALINA_BASE/conf/[enginename]/[hostname]répertoire (ce qui est pour ma configuration plutôt basique $CATALINA_HOME/conf/Catalina/localhost). Reportez-vous à la documentation Conteneur de contexte .
Michael Scheper
Alternative moderne au démarrage de Tomcat: sudo systemctl start tomcatxxreprésente le numéro de version
EarthMind
24

L'ajout d'une <Context>balise dans la <Host>balise server.xmlpour Tomcat 6 résoudra le problème.

Si vous utilisez path=""vide, vous pouvez utiliser une URL comme http://localhost/first.do.

Dans la balise de contexte, définissez les attributs docBase="E:\struts-ITRCbook\myStrutsbook"et reloadable="true", puis terminez 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>
ze.
la source
est-ce également vrai pour tomcat 7?
Marcy Sutton
4
Selon la documentation: Pour Tomcat 6, contrairement à Tomcat 4.x, il n'est PAS recommandé de placer les éléments <Context> directement dans le fichier server.xml. En effet, cela rend la modification de la configuration du contexte plus invasive puisque le fichier principal conf / server.xml ne peut pas être rechargé sans redémarrer Tomcat.
laissez notifier cette approche a un effet secondaire! myStrutsbook se déploiera deux fois Une fois pour localhost: 8080 et une fois pour localhost: 8080 / myStrutsbook! et peut provoquer des erreurs de connexion à la base de données et une plus grande utilisation des ressources
Ali.Mojtehedy
24

Dans Tomcat 7 avec ces changements, je peux accéder myAPPà /et ROOTà/ROOT

<Context path="" docBase="myAPP"/>
<Context path="ROOT" docBase="ROOT"/>

Ajoutez ci-dessus à la <Host>section dans server.xml

Sudheer Palyam
la source
Juste la solution que je cherchais! Merci un million, Sudheer! Fonctionne comme un charme pour moi. Et bon! J'ai encore une question. Lorsque j'accède au ROOT /ROOTet que j'essaie de me connecter à la page du gestionnaire en utilisant les informations d'identification correctes, l'accès me est refusé. Sauriez-vous comment résoudre ce problème?
Saturnian
@Sudheer Palyam J'ai fait de même. J'ai changé le fichier server.xml, puis j'ai démarré le serveur. Mais quand j'ai chargé / visité le localhost: 8080, il m'a montré une erreur d'état 404. Si je supprime ces lignes de server.xml, il charge le port ci-dessus.
Sachin Kumar
16

L'application par défaut de ROOT est généralement Tomcat Manager - ce qui peut être utile, alors j'avais envie de la garder.

Donc, la façon dont j'ai fait mon application ROOT et gardé TCmgr était comme ça.

renommé ROOT en autre chose

mv ROOT TCmgr

puis créé un lien symbolique par lequel ROOT pointe vers l'application que je souhaite définir par défaut.

ln -s <your app> ROOT

a fonctionné pour moi et semblait l'approche la plus simple.

Nestochan
la source
@Vic vous avez raison, mais Windows a des liens symboliques, sous XP et au-dessus, je pense que vous pouvez utiliser mklink. Veuillez noter que je ne l'ai pas fait et qu'il y a d'autres raisons de ne pas utiliser de liens symboliques.
MichaelStoner
12

Vous pouvez le faire de manière légèrement hack-y en:

  1. Arrêtez Tomcat
  2. Déplacez ROOT.war de côté et rm -rf webapps / ROOT
  3. Copiez la webapp que vous souhaitez dans webapps / ROOT.war
  4. Démarrez Tomcat
gareth_bowles
la source
2
Moche ou peut-être dégueulasse, mais hacky pourrait être le mauvais terme car cela semble être la méthode officielle / prise en charge.
Brian Knoblauch
3

Une solution alternative serait de créer un servlet qui envoie une redirection vers l'application Web par défaut souhaitée et de mapper ce servlet à 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");
  }
}

Ajoutez 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 pour vous permettre de définir l'application Web par défaut sans avoir à modifier la source.

Je ne sais pas si cela aurait des implications négatives, mais j'ai testé cela et cela semble fonctionner.

Jonathan Dixon
la source
2

la configuration context.xml n'a pas fonctionné pour moi. Tomcat 6.0.29 se plaint que la docBase se trouve à l'intérieur de l'appBase: ... Pour Tomcat 5, cela a fonctionné.

Une solution consiste donc à placer l'application dans le dossier ROOT.

Une autre solution très simple est de mettre un index.jsp à ROOT qui redirige vers mon application comme ceci: response.sendRedirect ("/ MyApplicationXy");

Meilleures salutations, janv.

Jan
la source
1

J'ai un problème lors de la configuration de Tomcat server.xmlet de l'ajout d'un élément de contexte. 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 Unix-likesystème:

  1. mv $CATALINA_HOME/webapps/ROOT $CATALINA_HOME/webapps/___ROOT
  2. ln -s $CATALINA_HOME/webapps/your_project $CATALINA_HOME/webapps/ROOT

Terminé.

Travaille pour moi.

AC de Souza
la source
1

Le moyen ultime de changer l'application racine de Tomcat. Testé sur Tomcat 7 et 8.

  1. Accédez au répertoire tomcat webapps:

    Exemple sur ma machine: ~/stack/apache-tomcat/webapps

  2. Renommez, remplacez ou supprimez le dossier ROOT. Mon conseil est de renommer ou de créer une copie pour la sauvegarde. Exemple renommer ROOT en RENAMED_ROOT:

    mv ROOT RENAMED_ROOT

  3. Déplacez le fichier war avec votre application vers le répertoire tomcat webapps (c'est un répertoire où se trouvait l'ancien dossier ROOT, sur ma machine: ~ / stack / apache-tomcat / webapps)

Le fichier War doit avoir un nom ROOT.war . Renommez votre application si nécessaire: yourApplicationName.war -> ROOT.war

  1. Redémarrez tomcat. Après le redémarrage, votre application sera une racine.
Jackkobec
la source
0

Je vais regarder mes documents; il existe un moyen de spécifier une configuration pour changer le chemin de l'application Web racine loin 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

Donc, il semble que changer le chemin racine (dans ROOT.xml) soit possible, mais un peu cassé - vous devez déplacer votre WAR en dehors du répertoire de déploiement automatique. Cela me dérange si je demande pourquoi le simple fait de renommer votre fichier en ROOT.war n'est pas une solution viable?

Don Werve
la source
1
Malheureusement, changer le fichier war en ROOT.war n'est pas une option pour moi. Jacques
un peu tard, mais ... pour moi, je ne peux pas le changer car j'utilise un système créé par un tiers, qui semble avoir codé en dur certains emplacements dans des fichiers jar .... alors le déplacer vers ROOT.war pose un problème, car l'application d'origine cherche son propre fichier jar dans un répertoire qui se trouve dans [originalapp.war]
mur
0

Ce n'est pas une très bonne solution, mais une solution consiste à rediriger de l'application ROOT vers YourWebApp. Pour cela, vous devez modifier le ROOT index.html.

<html>
    <head>
        <title>Redirecting to /YourWebApp</title>
    </head>
    <body onLoad="javascript:window.location='YourWebApp';">
    </body>
</html>

OU

<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

Abbas
la source
-4

Dans Tomcat 7 (sous le serveur Windows), je n'ai rien ajouté ni modifié dans aucun fichier de configuration. J'ai juste renommé le dossier ROOT en autre chose et renommé mon dossier d'application en ROOT et cela a bien fonctionné.

Dov
la source
1
Cela pourrait être une bonne solution de contournement, mais la question de Jaques est de savoir comment changer l'application par défaut; il peut y avoir des raisons pour lesquelles il ne peut pas modifier le contenu du dossier ROOT.
JVMATL