Wie ändere ich die ROOT-Anwendung?

130

Ich versuche, die Standardanwendung eines Tomcat 6-Webservers in eine andere Anwendung als "ROOT" (im Ordner "webapps") zu ändern. Was ist der beste Weg, dies zu tun?

user247702
quelle

Antworten:

129

Es gibt drei Methoden:

  • Fahren Sie Ihren Tomcat zuerst über das binVerzeichnis ( sh shutdown.sh) herunter . Löschen Sie dann den gesamten Inhalt Ihres Tomcat- webappsOrdners ( rm -fr *). Benennen Sie dann Ihre WAR-Datei in um ROOT.warund starten Sie Ihren Tomcat schließlich über das binVerzeichnis ( sh startup.sh).

  • Lassen Sie Ihre Kriegsakte $CATALINA_BASE/webappsunter ihrem ursprünglichen Namen. Deaktivieren Sie autoDeploy und deployOnStartup in Ihrem Host-Element in der server.xmlDatei. Definieren explizit alle Anwendungskontexte in server.xml, sowohl den Spezifizierungs Pfad und docBase Attribute. Sie müssen dies tun, da Sie alle automatischen Bereitstellungsmechanismen von Tomcat deaktiviert haben und Tomcat Ihre Anwendungen nicht mehr bereitstellt, es sei denn, es findet ihren Kontext im server.xml.

    Zweite Methode: Um Änderungen an einer Anwendung vorzunehmen, müssen Sie Tomcat stoppen und neu starten.

  • Platzieren Sie Ihre WAR-Datei außerhalb von $CATALINA_BASE/webapps(sie muss sich außerhalb befinden, um eine doppelte Bereitstellung zu verhindern). Platzieren Sie eine Kontextdatei mit dem Namen ROOT.xmlin $CATALINA_BASE/conf/. Das einzelne Element in dieser Kontextdatei MUSS ein docBase- Attribut haben, das auf den Speicherort Ihrer WAR-Datei verweist. Das Pfadelement sollte nicht festgelegt werden - es wird .xmlin diesem Fall vom Namen der Datei abgeleitet ROOT.xml. Weitere Informationen finden Sie in der Dokumentation zum Kontextcontainer .

Referenz


quelle
4
Ich habe die erste Methode ausprobiert und es funktioniert! Bdw - Sie müssen nicht alles löschen. Ich habe gerade den ROOT-Ordner gelöscht und meinen Krieg in ROOT.war umbenannt und es funktioniert wie ein Zauber.
Hostnik
Ich weiß, dass es nicht wirklich den Sof-Regeln folgt, aber scheiß drauf ..... Danke! Ich wünschte, ich könnte mehr als einmal abstimmen. Super hilfreich. BTW, ich hatte tomcat neu starten , bevor das funktionieren würde, @hostnik.
böse Pastete
Die dritte Methode von @ danny-london hat in Tomcat 7 bei mir nicht funktioniert, aber sie funktioniert, wenn Sie die Datei ROOT.xml im $CATALINA_BASE/conf/[enginename]/[hostname]Verzeichnis ablegen (was für mein eher einfaches Setup der Fall ist $CATALINA_HOME/conf/Catalina/localhost). Weitere Informationen finden Sie in der Dokumentation zum Kontextcontainer .
Michael Scheper
Moderne Alternative zum Starten von Tomcat: sudo systemctl start tomcatxWo xsteht für die Versionsnummer
EarthMind
24

Hinzufügen eines <Context>Tags zum <Host>Tag inserver.xml für Tomcat 6 wird das Problem behoben.

Wenn Sie path=""leer verwenden, können Sie eine URL wie verwendenhttp://localhost/first.do .

Im Kontext-Tag setzen Sie Attribute docBase="E:\struts-ITRCbook\myStrutsbook"undreloadable="true" beenden Sie dann das Kontext-Tag.

Es sollte ungefähr so ​​aussehen:

<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.
quelle
gilt das auch für tomcat 7?
Marcy Sutton
4
Gemäß Dokumentation: Für Tomcat 6 wird im Gegensatz zu Tomcat 4.x NICHT empfohlen, <Context> -Elemente direkt in der Datei server.xml zu platzieren. Dies liegt daran, dass das Ändern der Kontextkonfiguration invasiver wird, da die Hauptdatei conf / server.xml nicht neu geladen werden kann, ohne Tomcat neu zu starten.
Lassen Sie uns mitteilen, dass dieser Ansatz Nebenwirkungen hat! myStrutsbook wird zweimal bereitgestellt. Einmal für localhost: 8080 und einmal für localhost: 8080 / myStrutsbook! und kann Datenbankverbindungsfehler und mehr Ressourcennutzung verursachen
Ali.Mojtehedy
24

In Tomcat 7 kann ich mit diesen Änderungen myAPPauf /und ROOTum zugreifen/ROOT

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

Fügen Sie oben den <Host>Abschnitt in server.xml hinzu

Sudheer Palyam
quelle
Genau die Lösung, nach der ich gesucht habe! Vielen Dank, Sudheer! Funktioniert wie ein Zauber für mich. Und hey! Ich habe eine andere Frage. Wenn ich über auf die ROOT-Datei zugreife /ROOTund versuche, mich mit den richtigen Anmeldeinformationen auf der Manager-Seite anzumelden, wird mir der Zugriff verweigert. Würdest du wissen, wie man das behebt?
Saturnian
@ Sudheer Palyam Ich habe das gleiche getan. Ich habe die Datei server.xml geändert und dann den Server gestartet. Aber als ich den localhost: 8080 geladen / besucht habe, wurde mir der Statusfehler 404 angezeigt. Wenn ich diese Zeilen aus server.xml lösche, wird der obige Port geladen.
Sachin Kumar
16

Die ROOT-Standard-App ist normalerweise Tomcat Manager - was nützlich sein kann, also wollte ich sie behalten.

So wie ich meine gemacht habe App ROOT erstellt und TCmgr beibehalten.

ROOT in etwas anderes umbenannt

mv ROOT TCmgr

Dann wurde ein symbolischer Link erstellt, über den ROOT auf die App verweist, die ich als Standard festlegen möchte.

ln -s <your app> ROOT

arbeitete für mich und schien der einfachste Ansatz.

Nestochan
quelle
@Vic Sie haben Recht, aber Windows hat symbolische Links, in XP und höher denke ich, dass Sie mklink verwenden können. Bitte beachten Sie, dass ich dies nicht getan habe und es andere Gründe gibt, keine symbolischen Links zu verwenden.
MichaelStoner
12

Sie können dies auf eine leicht hackige Art und Weise tun, indem Sie:

  1. Stoppen Sie Tomcat
  2. Bewegen Sie ROOT.war beiseite und rm -rf webapps / ROOT
  3. Kopieren Sie die gewünschte Webanwendung in webapps / ROOT.war
  4. Starten Sie Tomcat
gareth_bowles
quelle
2
Hässlich oder vielleicht icky, aber hacky könnte der falsche Begriff sein, da dies die offizielle / unterstützte Methode zu sein scheint.
Brian Knoblauch
3

Eine alternative Lösung wäre, ein Servlet zu erstellen, das eine Umleitung an die gewünschte Standard-Webanwendung sendet, und dieses Servlet allen URLs in der ROOT-Webanwendung zuzuordnen.

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");
  }
}

Fügen Sie die obige Klasse hinzu
CATALINA_BASE/webapps/ROOT/WEB-INF/classes/com/example/servlet.
Und fügen Sie Folgendes hinzu
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>

Auf Wunsch können Sie das RedirectServlet problemlos so ändern, dass es einen Init-Parameter akzeptiert, mit dem Sie die Standard-Webanwendung festlegen können, ohne die Quelle ändern zu müssen.

Ich bin mir nicht sicher, ob dies negative Auswirkungen haben würde, aber ich habe dies getestet und es scheint zu funktionieren.

Jonathan Dixon
quelle
2

Die Konfiguration context.xml hat bei mir nicht funktioniert. Tomcat 6.0.29 beschwert sich darüber, dass sich die docBase in der appBase befindet: ... Für Tomcat 5 hat dies tatsächlich funktioniert.

Eine Lösung besteht also darin, die Anwendung in den ROOT-Ordner zu legen.

Eine andere sehr einfache Lösung besteht darin, eine index.jsp in ROOT einzufügen, die wie folgt zu meiner Anwendung umleitet: response.sendRedirect ("/ MyApplicationXy");

Beste Grüße, Jan.

Jan.
quelle
1

Ich habe ein Problem bei der Konfiguration von Tomcat server.xmlund dem Hinzufügen des Kontextelements. Er möchte meine Konfiguration einfach nicht verwenden: http://www.oreillynet.com/onjava/blog/2006/12/configuration_antipatterns_tom.html

Wenn Sie in einem Unix-likeSystem sind:

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

Getan.

Funktioniert bei mir.

AC de Souza
quelle
1

Ultimative Möglichkeit, die Tomcat-Root-Anwendung zu ändern. Getestet auf Tomcat 7 und 8.

  1. Wechseln Sie in das Verzeichnis der Tomcat-Webanwendungen:

    Beispiel auf meinem Computer: ~/stack/apache-tomcat/webapps

  2. ROOT-Ordner umbenennen, ersetzen oder löschen. Mein Rat ist, eine Kopie für die Sicherung umzubenennen oder zu erstellen. Beispiel Benennen Sie ROOT in RENAMED_ROOT um:

    mv ROOT RENAMED_ROOT

  3. Verschieben Sie die Kriegsdatei mit Ihrer Anwendung in das Tomcat-Webanwendungsverzeichnis (ein Verzeichnis, in dem sich der alte ROOT-Ordner auf meinem Computer befand: ~ / stack / apache-tomcat / webapps)

Die Kriegsdatei muss den Namen ROOT.war haben . Benennen Sie Ihre Anwendung bei Bedarf um: yourApplicationName.war -> ROOT.war

  1. Tomcat neu starten. Nach dem Neustart ist Ihre Anwendung ein Root.
Jackkobec
quelle
0

Ich werde mir meine Dokumente ansehen. Es gibt eine Möglichkeit, eine Konfiguration anzugeben, um den Pfad der Root-Webanwendung von ROOT (oder ROOT.war) weg zu ändern, aber es scheint sich zwischen Tomcat 5 und 6 geändert zu haben.

Ich habe es gefunden:

http://www.nabble.com/Re:-Tomcat-6-and-ROOT-application...-td20017401.html

Es scheint also möglich zu sein, den Stammpfad (in ROOT.xml) zu ändern, aber ein bisschen kaputt - Sie müssen Ihre WAR außerhalb des Verzeichnisses für die automatische Bereitstellung verschieben. Wenn ich Sie frage, warum das Umbenennen Ihrer Datei in ROOT.war keine praktikable Lösung ist?

Don Werve
quelle
1
Leider ist das Ändern der Kriegsdatei in ROOT.war für mich keine Option. Jacques
ein bisschen spät, aber ... für mich kann ich es nicht ändern, weil ich ein System verwende, das von einem Drittanbieter erstellt wurde, der anscheinend einige Speicherorte fest in JAR-Dateien codiert hat ... also verschiebe es nach ROOT.war macht ein Problem, da die ursprünglichen Anwendung sieht für sein eigenes Gefäß unter einem Verzeichnis , das in [originalapp.war] ist
mur
0

Keine sehr gute Lösung, aber eine Möglichkeit besteht darin, von der ROOT-App zu YourWebApp umzuleiten. Dazu müssen Sie die Datei ROOT index.html ändern.

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

ODER

<html>
    <head>
        <title>Redirecting to /YourWebApp</title>
        <meta http-equiv="refresh" content="0;url=YourWebApp" />
    </head>
    <body>
    </body>
</html>

Referenz: http://staraphd.blogspot.com/2009/10/change-default-root-folder-in-tomcat.html

abbas
quelle
-4

In Tomcat 7 (unter Windows Server) habe ich keiner Konfigurationsdatei etwas hinzugefügt oder bearbeitet. Ich habe gerade den ROOT-Ordner in etwas anderes umbenannt und meinen Anwendungsordner in ROOT umbenannt, und es hat gut funktioniert.

Dov
quelle
1
Dies mag eine gute Problemumgehung sein, aber Jaques 'Frage lautet, wie die Standardanwendung geändert werden kann. Es kann Gründe geben, warum er den Inhalt des ROOT-Ordners nicht ändern kann.
JVMATL