Bereitstellen meiner Anwendung im Stammverzeichnis in Tomcat
132
Ich habe die Kriegsakte meiner Bewerbung. Ich muss dies auf der Root-Ebene bereitstellen. Die aktuelle URL lautet http://localhost:8080/war_name/application_name.
Könnten Sie bitte genau angeben, was Ihr Problem ist? Wenn Sie eine War-Datei in Tomcat bereitstellen, wird auf die Anwendung über die URL: localhost: 8080 / war_name ohne die Erweiterung .war zugegriffen.
Ashishjmeshram
1
Ja, Sie haben Recht, ich muss auf meine App zugreifen. " localhost / application_name ", dies kann ich erreichen, wenn ich meine War-Datei in "ROOT.war" umbenenne, aber es wird eine Speicherausnahme ausgelöst, da meine War-Dateigröße etwa 120
MB
1
@ user661660 - Es scheint, als hätten Sie ein anderes Problem - das Umbenennen in ROOT.warsollte funktionieren. Ich würde vorschlagen, eine weitere Frage zu Ihrer OutOfMemoryExceptionPerson zu stellen und die Stapelverfolgung und die Details anzugeben. Sie können dies wahrscheinlich umgehen, indem Sie -Xmxdie JVM konfigurieren .
Rob Hruska
.lang.OutOfMemoryError: PermGen-Speicherplatz 16. März 2011, 09:52:52 Uhr com.ebay.kernel.logger.Logger-Protokoll SEVERE: Fehler im Perfmon-Thread java.lang.OutOfMemoryError: PermGen-Speicherplatz Ausnahme im Thread "CalClient: NotifyThreadDestroyThread-0 "java.lang.OutOfMemor yError: PermGen-Speicherplatz Ausnahme im Thread" MetricsSnapshotScheduler "java.lang.OutOfMemoryError: PermG en space 16. März 2011, 09:53:36 Uhr com.ebay.kernel.logger.Logger-Protokoll SEVERE: Fehler in Perfmon thread java.lang.OutOfMemoryError: PermGen-Speicherplatz Ausnahme im Thread "CalClient: NotifyThreadDestroyThread-0" java.lang.OutOfMemor yError: PermGen-Speicherplatz
Entfernen Sie das sofort einsatzbereite ROOT/Verzeichnis aus Tomcat und benennen Sie Ihre War-Datei in um, ROOT.warbevor Sie sie bereitstellen.
Stellen Sie Ihren Krieg als (aus Ihrem Beispiel) bereit war_name.warund konfigurieren Sie den Kontextstamm in conf/server.xml, um Ihre Kriegsdatei zu verwenden:
Wenn Tomcat auf automatische Bereitstellung eingestellt ist, müssen Sie sich keine Gedanken über Option 2 machen.
Buhake Sindi
4
@Dejel - Technisch nichts. Ich habe es selbst ziemlich oft gemacht; es erledigt den Job. Fühlt sich einfach ein bisschen wackelig an, wenn Sie Ihre eigene Kriegsdatei in etwas umbenennen müssen, das eine Art Implementierungsdetail des Containers darstellt.
Rob Hruska
4
Gemäß dem von Ihnen angegebenen
server.xml zu
6
Diese Antwort empfiehlt eine Technik, die in der Dokumentation ausdrücklich als schlechte Form erwähnt wird. Die richtige Technik wird hier detailliert beschrieben: stackoverflow.com/questions/41263245/…
Christopher Schultz
5
+1 für den Namen ROOT.war. Laut den Tomcat-Dokumenten müssen Sie bei der Angabe von "Pfad" sehr vorsichtig sein, um eine doppelte Bereitstellung zu vermeiden: "Selbst wenn Sie einen Kontext in server.xml statisch definieren, darf dieses Attribut nur festgelegt werden, wenn sich die docBase nicht unter der des Hosts befindet appBase oder sowohl deployOnStartup als auch autoDeploy sind falsch. Wenn diese Regel nicht befolgt wird, führt dies wahrscheinlich zu einer doppelten Bereitstellung. " - von tomcat.apache.org/tomcat-8.0-doc/config/context.html
Anthony Hayward
31
auf Tomcat v.7 (Vanille-Installation)
Fügen Sie in Ihrer Datei conf / server.xml kurz vor dem </Host>schließenden Tag am Ende der Datei das folgende Bit hinzu :
<Context path="" docBase="app_name"><!--Default set of monitored resources --><WatchedResource>WEB-INF/web.xml</WatchedResource></Context>
Beachten Sie das docBase- Attribut. Es ist das Wichtige. Sie stellen entweder sicher, dass Sie app_name bereitgestellt haben, bevor Sie Ihre Root-Web-App ändern, oder kopieren Sie einfach Ihre entpackte webapp (app_name) in den webapps-Ordner Ihres Tomcat. Start, besuchen Sie root, sehen Sie dort Ihren App-Namen!
In Tomcat 7 kann ich mit diesen Änderungen auf myAPP unter / und ROOT unter / ROOT zugreifen
<Context path="" docBase="myAPP"><!--Default set of monitored resources --><WatchedResource>WEB-INF/web.xml</WatchedResource></Context><Context path="ROOT" docBase="ROOT"><!--Default set of monitored resources --><WatchedResource>WEB-INF/web.xml</WatchedResource></Context>
Fügen Sie oben den <Host>Abschnitt in server.xml hinzu
Ein Kontextpfad muss entweder eine leere Zeichenfolge sein oder mit einem '/' beginnen. Der Pfad [ROOT] erfüllt diese Kriterien nicht und wurde in [/ ROOT] geändert
Nikita Bosik
11
Ich weiß, dass sich meine Antwort mit einigen der anderen Antworten überschneidet, aber dies ist eine vollständige Lösung, die einige Vorteile hat. Dies funktioniert unter Tomcat 8:
Die Hauptanwendung wird von der Wurzel aus bedient
Die Bereitstellung von Kriegsdateien über die Weboberfläche wird beibehalten.
Die Hauptanwendung wird auf Port 80 ausgeführt, während nur die Administratoren Zugriff auf die Verwaltungsordner haben (mir ist klar, dass * nix-Systeme einen Superuser zum Binden an 80 benötigen, aber unter Windows ist dies kein Problem).
Dies bedeutet, dass Sie den Tomcat nur einmal neu starten müssen und nach aktualisierten Kriegsdateien problemlos bereitgestellt werden können.
Schritt 1: Suchen Sie in der Datei server.xml den Connector-Eintrag und ersetzen Sie ihn durch:
Beachten Sie, dass ich alle Apps im Webapp-Ordner adressiert habe. Der erste schaltet effektiv die Root- und die Haupt-App aus der Position. ROOT ist jetzt eingeschaltet http://example.com/ROOTund die Hauptanwendung ist eingeschaltet http://example.com/. Die passwortgeschützten Webanwendungen erfordern das privileged="true"Attribut.
Wenn Sie eine CAS.war-Datei bereitstellen, die mit dem Stammverzeichnis übereinstimmt ( <Context path="/" docBase="CAS">Sie müssen diese im Admin-Bereich neu laden, da sie bei der Bereitstellung nicht aktualisiert wird.
Nehmen Sie das nicht <Context path="/CAS" docBase="CAS">in Ihre Kontexte auf, da es die Manager-Option zum Bereitstellen von Kriegsdateien deaktiviert. Dies bedeutet, dass Sie auf zwei Arten auf die App zugreifen können: http://example.com/undhttp://example.com/APP/
Schritt 3: Um unerwünschten Zugriff auf den Stamm- und Managerordner zu verhindern, fügen Sie valvediesen Kontext-Tags Folgendes hinzu:
Dies beschränkt den Zugriff auf den Administrator-Web-App-Ordner im Wesentlichen auf Personen aus meiner eigenen Domain (gefälschte IP-Adresse) und localhost, wenn sie den Standardport 8080 verwenden, und behält die Möglichkeit bei, die War-Dateien dynamisch über die Webschnittstelle bereitzustellen.
Wenn Sie dies für mehrere Apps verwenden möchten, die unterschiedliche IP-Adressen verwenden, können Sie die IP-Adresse zum Connector hinzufügen ( address="143.21.2.1").
Wenn Sie mehr Web - Anwendungen von der Wurzel ausführen möchten, können Sie die Service - Tag - Duplikat (einen anderen Namen für die zweiten verwenden) und die Docbase der Änderung <Context path="/" docBase="CAS">zu zum Beispiel <Context path="/" docBase="ICR">.
Es funktioniert mit Tomcat 8. autoDeploy und deployOnStartup müssen auf false gesetzt werden, um zu verhindern, dass Tomcat myAppzweimal bereitgestellt wird .
Ich habe versucht, das WAR hochzuladen, aber es hat nicht funktioniert. Gilt das nur für explodierte WARs?
Logixplayer
Ich habe versucht, das WAR hochzuladen, aber es hat nach dem Beispiel von @ Jingguo nicht funktioniert. Gilt das nur für explodierte WARs? EDIT: Es ist in der Tat nur für explodierte Kriege. Warum ist das? Kann ich nicht einfach das WAR hochladen und diesen doppelten Schritt vermeiden? Wie kann ich es zum Laufen bringen?
Logixplayer
@logixplayer. Meine Lösung funktioniert mit WAR. Ich habe es nicht explodiert. Ich habe vergessen zu erwähnen, dass $CATALINA_HOME/webapps/ROOTdas entfernt werden muss. Bitte entfernen Sie es und versuchen Sie es erneut.
Jingguo Yao
Ich habe die Wurzel entfernt, wie du gesagt hast. Ich habe mein WAR (nicht explodiertes Verzeichnis) bereitgestellt. Ich habe festgestellt, dass ein neues ROOT-Verzeichnis mit meinen Inhalten erstellt wurde, z. B. WEB-INF. Die Site wird ausgeführt. Soll das so funktionieren?
Logixplayer
Ich habe auch diese Methode ausprobiert und wenn ich versuche, die Seite im Browser zu öffnen, wartet sie nur auf den Server. Die Catalina.out sagt nur, dass der Server gestartet wurde.
Asu
1
Diese Einstellung in server.xml im Abschnitt fügt sich in @Rob Hruskas Sol ein und funktioniert wie folgt:
Öffnen Sie die URL des Tomact-Managers: - http: // localhost: 8080 / manager / html /.
In Anwendungen wird eine Anwendung mit dem Pfad "/" angezeigt. Benennen Sie die War-Datei Ihrer Anwendung in ROOT.war um und platzieren Sie sie einfach unter folgendem Pfad: -
Starten Sie Ihren Tomcat. Keine zusätzliche Konfiguration erforderlich.
Jetzt können wir unsere Anwendungshomepage oder konfigurierte URL unter http: // localhost: 8080 sehen C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps
ROOT.war
sollte funktionieren. Ich würde vorschlagen, eine weitere Frage zu IhrerOutOfMemoryException
Person zu stellen und die Stapelverfolgung und die Details anzugeben. Sie können dies wahrscheinlich umgehen, indem Sie-Xmx
die JVM konfigurieren .Antworten:
Sie haben mehrere Möglichkeiten:
Entfernen Sie das sofort einsatzbereite
ROOT/
Verzeichnis aus Tomcat und benennen Sie Ihre War-Datei in um,ROOT.war
bevor Sie sie bereitstellen.Stellen Sie Ihren Krieg als (aus Ihrem Beispiel) bereit
war_name.war
und konfigurieren Sie den Kontextstamm inconf/server.xml
, um Ihre Kriegsdatei zu verwenden:Der erste ist einfacher, aber etwas klobiger. Der zweite ist wahrscheinlich der elegantere Weg, dies zu tun.
quelle
auf Tomcat v.7 (Vanille-Installation)
Fügen Sie in Ihrer Datei conf / server.xml kurz vor dem
</Host>
schließenden Tag am Ende der Datei das folgende Bit hinzu :Beachten Sie das docBase- Attribut. Es ist das Wichtige. Sie stellen entweder sicher, dass Sie app_name bereitgestellt haben, bevor Sie Ihre Root-Web-App ändern, oder kopieren Sie einfach Ihre entpackte webapp (app_name) in den webapps-Ordner Ihres Tomcat. Start, besuchen Sie root, sehen Sie dort Ihren App-Namen!
quelle
In Tomcat 7 kann ich mit diesen Änderungen auf myAPP unter / und ROOT unter / ROOT zugreifen
Fügen Sie oben den
<Host>
Abschnitt in server.xml hinzuquelle
Ich weiß, dass sich meine Antwort mit einigen der anderen Antworten überschneidet, aber dies ist eine vollständige Lösung, die einige Vorteile hat. Dies funktioniert unter Tomcat 8:
Dies bedeutet, dass Sie den Tomcat nur einmal neu starten müssen und nach aktualisierten Kriegsdateien problemlos bereitgestellt werden können.
Schritt 1: Suchen Sie in der Datei server.xml den Connector-Eintrag und ersetzen Sie ihn durch:
Schritt 2: Definieren Sie Kontexte innerhalb des
<Host ...>
Tags:Beachten Sie, dass ich alle Apps im Webapp-Ordner adressiert habe. Der erste schaltet effektiv die Root- und die Haupt-App aus der Position. ROOT ist jetzt eingeschaltet
http://example.com/ROOT
und die Hauptanwendung ist eingeschaltethttp://example.com/
. Die passwortgeschützten Webanwendungen erfordern dasprivileged="true"
Attribut.Wenn Sie eine CAS.war-Datei bereitstellen, die mit dem Stammverzeichnis übereinstimmt (
<Context path="/" docBase="CAS">
Sie müssen diese im Admin-Bereich neu laden, da sie bei der Bereitstellung nicht aktualisiert wird.Nehmen Sie das nicht
<Context path="/CAS" docBase="CAS">
in Ihre Kontexte auf, da es die Manager-Option zum Bereitstellen von Kriegsdateien deaktiviert. Dies bedeutet, dass Sie auf zwei Arten auf die App zugreifen können:http://example.com/
undhttp://example.com/APP/
Schritt 3: Um unerwünschten Zugriff auf den Stamm- und Managerordner zu verhindern, fügen Sie
valve
diesen Kontext-Tags Folgendes hinzu:Dies beschränkt den Zugriff auf den Administrator-Web-App-Ordner im Wesentlichen auf Personen aus meiner eigenen Domain (gefälschte IP-Adresse) und localhost, wenn sie den Standardport 8080 verwenden, und behält die Möglichkeit bei, die War-Dateien dynamisch über die Webschnittstelle bereitzustellen.
Wenn Sie dies für mehrere Apps verwenden möchten, die unterschiedliche IP-Adressen verwenden, können Sie die IP-Adresse zum Connector hinzufügen (
address="143.21.2.1"
).Wenn Sie mehr Web - Anwendungen von der Wurzel ausführen möchten, können Sie die Service - Tag - Duplikat (einen anderen Namen für die zweiten verwenden) und die Docbase der Änderung
<Context path="/" docBase="CAS">
zu zum Beispiel<Context path="/" docBase="ICR">
.quelle
Der schnellste Weg.
Stellen Sie sicher, dass keine ROOT-App bereitgestellt ist, und entfernen Sie die Bereitstellung, falls vorhanden
Benennen Sie Ihren Krieg in ROOT.war um, stellen Sie bereit, das ist alles, es sind keine Konfigurationsänderungen erforderlich
quelle
Entfernen
$CATALINA_HOME/webapps/ROOT
. Aktualisieren Sie$CATALINA_HOME/conf/server.xml
, stellen Sie sicher, dass das Host-Element wie folgt aussieht:Es funktioniert mit Tomcat 8. autoDeploy und deployOnStartup müssen auf false gesetzt werden, um zu verhindern, dass Tomcat
myApp
zweimal bereitgestellt wird .quelle
$CATALINA_HOME/webapps/ROOT
das entfernt werden muss. Bitte entfernen Sie es und versuchen Sie es erneut.Diese Einstellung in server.xml im Abschnitt fügt sich in @Rob Hruskas Sol ein und funktioniert wie folgt:
Hinweis: In einigen Fällen kann override = "true" erforderlich sein.
quelle
Zusätzlich zu @Dima ‚s Antwort, wenn Sie mit
maven
Ihrem Paket zu bauen, man kann sagen , es WAR - Datei - Namen zu setzenROOT
inpom.xml
:Standardmäßig
tomcat
wird dieROOT.war
Webanwendung im Stammkontext bereitgestellt (/
).quelle
Öffnen Sie die URL des Tomact-Managers: - http: // localhost: 8080 / manager / html /.
In Anwendungen wird eine Anwendung mit dem Pfad "/"
angezeigt. Benennen Sie die War-Datei Ihrer Anwendung in ROOT.war um und platzieren Sie sie einfach unter folgendem Pfad: - Starten Sie Ihren Tomcat. Keine zusätzliche Konfiguration erforderlich. Jetzt können wir unsere Anwendungshomepage oder konfigurierte URL unter http: // localhost: 8080 sehen
C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps
quelle
Auf meinem Server verwende ich dies und Root Autodeploy funktioniert einwandfrei:
quelle