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?
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?
Antworten:
Es gibt drei Methoden:
Fahren Sie Ihren Tomcat zuerst über das bin
Verzeichnis ( sh shutdown.sh
) herunter . Löschen Sie dann den gesamten Inhalt Ihres Tomcat- webapps
Ordners ( rm -fr *
). Benennen Sie dann Ihre WAR-Datei in um ROOT.war
und starten Sie Ihren Tomcat schließlich über das bin
Verzeichnis ( sh startup.sh
).
Lassen Sie Ihre Kriegsakte $CATALINA_BASE/webapps
unter ihrem ursprünglichen Namen. Deaktivieren Sie
autoDeploy und deployOnStartup in Ihrem Host-Element in der server.xml
Datei. 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.xml
in $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 .xml
in diesem Fall vom Namen der Datei abgeleitet ROOT.xml
. Weitere Informationen finden Sie in der Dokumentation zum Kontextcontainer .
$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 .
sudo systemctl start tomcatx
Wo x
steht für die Versionsnummer
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>
In Tomcat 7 kann ich mit diesen Änderungen myAPP
auf /
und ROOT
um zugreifen/ROOT
<Context path="" docBase="myAPP"/>
<Context path="ROOT" docBase="ROOT"/>
Fügen Sie oben den <Host>
Abschnitt in server.xml hinzu
/ROOT
und versuche, mich mit den richtigen Anmeldeinformationen auf der Manager-Seite anzumelden, wird mir der Zugriff verweigert. Würdest du wissen, wie man das behebt?
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.
Gemäß den Apache Tomcat-Dokumenten können Sie die Anwendung ändern, indem Sie eine ROOT.xml-Datei erstellen. Weitere Informationen finden Sie hier:
http://tomcat.apache.org/tomcat-6.0-doc/config/context.html
"Die Standard-Webanwendung kann mithilfe einer Datei namens ROOT.xml definiert werden."
Sie können dies auf eine leicht hackige Art und Weise tun, indem Sie:
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.
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.
Ich habe ein Problem bei der Konfiguration von Tomcat server.xml
und 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-like
System sind:
mv $CATALINA_HOME/webapps/ROOT $CATALINA_HOME/webapps/___ROOT
ln -s $CATALINA_HOME/webapps/your_project $CATALINA_HOME/webapps/ROOT
Getan.
Funktioniert bei mir.
Ultimative Möglichkeit, die Tomcat-Root-Anwendung zu ändern. Getestet auf Tomcat 7 und 8.
Wechseln Sie in das Verzeichnis der Tomcat-Webanwendungen:
Beispiel auf meinem Computer: ~/stack/apache-tomcat/webapps
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
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
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?
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
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.