Wie ändere ich die Kontextwurzel eines dynamischen Webprojekts in Eclipse?


205

Ich habe in Eclipse ein dynamisches Webprojekt entwickelt. Ich kann über meinen Browser über die folgende URL auf die App zugreifen:

http://localhost:8080/MyDynamicWebApp

Ich möchte die Zugriffs-URL ändern in:

http://localhost:8080/app

Zu diesem Zweck habe ich den Kontextstamm aus dem Projekt "Eigenschaften | Webprojekteinstellungen | Kontextstamm" geändert. Die Web-App hat jedoch immer noch dieselbe Zugriffs-URL. Ich habe die Anwendung auf Tomcat erneut bereitgestellt und Tomcat neu gestartet, aber die Zugriffs-URL ist dieselbe wie zuvor.

Ich stellte fest, dass server.xmlder WARDatei keine Datei beigefügt war . server.xmlWie ermittelt der Tomcat ohne die angehängte Datei, dass sich das Kontextstammverzeichnis meiner Webanwendung befindet, /MyDynamicWebAppund ermöglicht mir den Zugriff auf die Anwendung über diese Kontextstammverzeichnis-URL?

Antworten:


331

Ich bin mir sicher, dass Sie inzwischen weitergezogen sind, aber ich dachte, ich würde trotzdem antworten.

Einige dieser Antworten bieten Problemumgehungen. Was tatsächlich passieren muss, ist, dass Sie Ihr Projekt bereinigen und erneut veröffentlichen, um den neuen URI zu "aktivieren". Klicken Sie dazu mit der rechten Maustaste auf Ihren Server (in der Serveransicht) und wählen Sie Bereinigen. Dann starten Sie (oder starten es neu). Die meisten anderen Antworten hier schlagen vor, dass Sie Dinge tun, die dies tatsächlich erreichen.

Die Datei, die sich ändert, ist, workspace/.metadata/.plugins/org.eclipse.wst.server.core/publish/publish.dates sei denn, Sie haben mehr als einen Server in Ihrem Arbeitsbereich. In diesem Fall ist dies der FallpublishN.dat auf demselben Pfad.

Hoffe das hilft jemandem.


Ich bin mir nicht sicher, ob dies die richtige Etikette ist oder nicht - ich bearbeite diese Antwort, um genaue Schritte für Eclipse Indigo anzugeben.

  1. Wählen Sie in den Eigenschaften Ihres Projekts die Webprojekteinstellungen .

  2. Ändern Sie den Kontextstamm in App .

    Screenshot der Webprojekteinstellungen der Eclipse-Projekteigenschaften

  3. Wählen Sie " Fenster"> "Ansicht anzeigen"> "Server" .

  4. Stoppen Sie den Server, indem Sie entweder auf das rote Quadrat klicken (Tooltip "Server stoppen") oder im Kontext auf die Serverliste klicken, um "Stopp" auszuwählen.

  5. Klicken Sie auf dem Server, den Sie verwenden möchten, auf den Kontext, um "Bereinigen ..." auszuwählen.

    Geben Sie hier die Bildbeschreibung ein

  6. Klicken Sie in diesem Bestätigungsdialogfeld auf OK.

    Screenshot des Dialogfelds, in dem Sie aufgefordert werden, die Serverkonfiguration so zu aktualisieren, dass sie mit dem geänderten Kontextstamm übereinstimmt

Jetzt können Sie Ihre App mit der neuen "App" -URL ausführen, z.

http://localhost:8080/app/

Dies ist außerhalb von Eclipse auf Ihrem Produktionsserver noch einfacher -> Benennen Sie die War-Datei um. Exportieren Sie Ihre Vaadin-App als WAR-Datei ( Datei> Exportieren> Web> WAR-Datei ). Verschieben Sie die WAR-Datei in den Servlet-Container Ihres Webservers, z. B. Tomcat. Benennen Sie Ihre WAR-Datei um, in diesem Fall in app.war . Wenn Sie den Servlet-Container starten, stellen die meisten Benutzer wie Tomcat die App automatisch bereit. Dazu gehört auch das Erweitern der War-Datei in einen Ordner. In diesem Fall sollte ein Ordner mit dem Namen app angezeigt werden . Du solltest gut gehen. Testen Sie Ihre URL. Für eine Domain wie * example.com "wäre dies:

http://www.example.com/app/

Vaadin-Toolkit-Programmierer müssen möglicherweise ihr Widget-Set neu erstellen, wenn sie visuelle Add-Ons verwenden.


Gute Antwort !!! Sie retten mir das Leben. Die anderen Antworten hier schlagen vor, dass Sie Dinge tun, die dies
tatsächlich

Hier ist das Genie dieser Antwort: Ich habe mich auf diese Seite gegoogelt und nicht einmal die Tags gelesen (ich erstelle eine ASP.NET-Website mit Visual Studio). Aber die Lösung hat trotzdem funktioniert!
Curt

Ich habe keine solche und Option "Web-Projekteinstellungen"
IntoTheDeep

workspace/.metadata/.plugins/org.eclipse.wst.server.core/publish/publish.dat
Wenn

Aber was ist, wenn wir Eclipse oder eine IDE nicht verwenden? Ich möchte den Stammpfad des Servlet-Kontexts programmgesteuert konfigurieren. Wie soll ich das machen? in web.xml wahrscheinlich? ..
Giorgi Tsiklauri

32

Nachdem Sie den Kontextstamm in den Projekteigenschaften geändert haben, müssen Sie Ihre Webanwendung aus Tomcat entfernen (mithilfe von Hinzufügen und Entfernen ... im Kontextmenü des Servers), erneut bereitstellen, dann Ihre Anwendung erneut hinzufügen und erneut bereitstellen. Es hat bei mir funktioniert.

Wenn Sie betroffen sind, haben Sie eine andere Wahl: Wählen Sie den Tomcat-Server in der Serveransicht aus. Durch Doppelklicken auf diesen Server (oder durch Auswahl von Öffnen im Kontextmenü) wird ein mehrseitiger Editor mit einer Modulseite angezeigt. Hier können Sie den Stammkontext Ihres Moduls ändern (auf dieser Seite Pfad genannt).


Vielen Dank! Das hat den Trick für mich getan. Es funktioniert jedoch sogar, ohne den Kontextstamm in den Projekteigenschaften zu ändern. Vermisse ich hier etwas?
Chris

Dies funktionierte auch für mich in früheren Eclipse-Builds, aber im aktuellen Build (Luna) funktioniert jetzt nur die Clean-Option
Griknok

namasety, dhanywaada :) Als ich meinen Kontext anfänglich änderte, funktionierte er auch nach dem Neustart und der Bereinigung des Servers nicht. es hat nur nachträglich funktioniert, ich habe das Projekt entfernt und erneut gelesen.
Yogesh Sanchihar

24

Wenn Sie Tomcat über Eclipse ausführen, wird die Konfiguration aus Ihrer tatsächlichen Tomcat-Installation nicht verwendet. Es verwendet die Tomcat-Konfiguration, die es unter dem Projekt "Server" erstellt und gespeichert hat. Wenn Sie Ihren Eclipse-Arbeitsbereich anzeigen, sollte ein Projekt mit dem Namen "Server" angezeigt werden. Erweitern Sie das Projekt "Server", und Sie werden auf server.xml stoßen. Öffnen Sie diese Datei und scrollen Sie ganz nach unten. Sie sollten ungefähr Folgendes sehen: -

<Context docBase="abc" path="/abc" reloadable="true" source="org.eclipse.jst.jee.server:abc"/>

Hier können Sie einfach Ihren Projektkontextpfad in etwas anderes ändern.

Hoffe das hilft.


Ich bin nicht sicher, ob Sie alle 3 Werte ändern möchten. Die Lösung von Csaba_H hat bei mir funktioniert und das ändert nur das Attribut "Pfad" ...
Chris

Dieser hat bei mir nicht funktioniert - die Dateien in diesem Verzeichnis werden beim Neustart des Servers überschrieben. Die zweite Version von Csaba_H, Registerkarte "Module" unter Tomcat Server, scheint der "richtige" Ansatz zu sein.
Idarwin

17

Ich habe die von Russ Bateman vorgeschlagene Lösung hier in der Post ausprobiert

http://localhost:8080/Myapp zu http://localhost:8080/somepath/Myapp

Aber ich habe nicht für mich gearbeitet, da ich eine * .war-Datei brauchte, die die Konfiguration und nicht die einzelne Serverinstanz auf meiner lokalen Maschine enthalten kann.

Referenz

Dazu muss jboss-web.xml in WEB-INF platziert sein

<?xml version="1.0" encoding="UTF-8"?>
 <!--
Copyright (c) 2008 Object Computing, Inc.
All rights reserved.
-->
<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 4.2//EN"
"http://www.jboss.org/j2ee/dtd/jboss-web_4_2.dtd">

  <jboss-web>
  <context-root>somepath/Myapp</context-root>
  </jboss-web>

Das hat bei mir funktioniert. Umgebung = Eclipse + m2e + m2e-wtp + Bereitstellung in JBoss aus der Serveransicht. Erforderlich, um das Hauptwebprojekt als ROOT bereitzustellen, und keine Eclipse-Einstellung hat den Trick getan. Ich habe Toshas Datei (oben) kopiert und "ROOT" ohne Anführungszeichen als Kontextstammwert eingefügt. Gemacht und gemacht. Danke, @Tosha!
Steven Francolla

Das funktioniert, aber ich frage mich, warum die Einstellung in den Projekteigenschaften ignoriert wird.
Vedran

4
Arbeitet mit JBoss WildFly 8.1.0 Final
Alexander

Ich habe von MyEclipse 8.6 auf Eclipse migriert und konnte nicht mit dem Root-Kontext '/' bereitstellen. Das Hinzufügen von jboss-web.xml hat erfolgreich funktioniert. Server: Jboss AS 5.1 Eclipse Luna.
Sai

9

Durch Festlegen des Pfads auf nichts im Bearbeitungsdialog der Eclipse-Webmodule konnte ich auf das Projekt zugreifen, ohne dass eine Pfadkomponente in der URL (dh ROOT) vorhanden war.

Sie können den Bearbeitungsdialog der Webmodule erreichen, indem Sie F3 drücken, wenn Sie in der Ansicht "Server" Tomcat auswählen, oder indem Sie darauf doppelklicken.

Einige Screenshots:


Entschuldigung, aber können Sie hierzu weitere Einzelheiten mitteilen?
Smonff

Oh danke! Unter Eclipse Luna unter GNU / Linux ist jedoch a /erforderlich.
Smonff

1
Ich habe Eclipse Mars (4.5) unter Win7 verwendet.
Ray Hulha

6

Apache Tomcat behält den Projektkontextpfad im Pfad server.xml bei. Für jedes Webprojekt in Eclipse gibt es ein Tag, von dem aus Sie es ändern können.
Angenommen, auf dem Server sind zwei oder drei Projekte bereitgestellt. Für jeden wird ein Kontextpfad in gespeichert. Dieses Tag befindet sich in der Datei server.xml innerhalb des bei Eclipse erstellten Servers.

Ich habe dort ein Projekt im Kontextstammpfad im Server:

<Context docBase="Test" path="/test" reloadable="true" source="org.eclipse.jst.jee.server:Test1"/>

Dieser Pfad repräsentiert den Kontextpfad Ihrer Webanwendung. Durch Ändern dieses Pfads ändert sich der Kontextpfad Ihrer Webanwendung.


6

Ich weiß, dass die Antwort bereits akzeptiert wurde. Für den Fall, dass jemand, der Maven verwendet, dasselbe erreichen möchte, setzen Sie einfach den endgültigen Namen im Maven- Build auf den Namen, den Sie geben möchten, und führen Sie ein Maven -> Update-Projekt durch

<build>
    <finalName><any-name></finalName>
    <plugins><provide-plugins-needed></plugins>
<build>

4

Wenn das Projekt maven ist, ändern Sie den "finalName" in pom.xml und aktualisieren Sie das Projekt als Maven. Dies hat bei mir funktioniert.


2

In Glassfish müssen Sie auch die Datei WEB-INF / glassfish-web.xml ändern

<glassfish-web-app>
    <context-root>/myapp</context-root>
</glassfish-web-app>

Wenn Sie also auf "Ausführen als> Auf Server ausführen " klicken , wird es korrekt geöffnet.


Ja, wir müssen. Nettes Teilen.
Dinath

2

Ich wollte nur hinzufügen, dass Sie, wenn Sie Ihren Anwendungsnamen überhaupt nicht im Stammkontext haben möchten, einfach "/" (keine Anführungszeichen, nur den Schrägstrich) in Eclipse -> Web Project Settings -> einfügen Kontext Stammeintrag

Dadurch wird die Webanwendung nur unter http: // localhost: 8080 / bereitgestellt.

Dies führt natürlich zu Problemen mit anderen Webanwendungen, die Sie auf dem Server ausführen möchten.

Ich habe ewig gebraucht, um das zusammenzusetzen ... obwohl dieser Beitrag 8 Jahre alt ist, hilft er hoffentlich immer noch jemandem!


0

Öffnen Sie im Java-Projekt den Ordner .settings. Suchen Sie dort die Datei "org.eclipse.wst.common.component". Ändern Sie das Tag <wb-module deploy-name = "NEW_NAME">.

Möglicherweise möchten Sie auch den Kontextstamm in den Projekteigenschaften ändern


Alles, was in meinem Projekt gut aussieht und in Eclipse läuft, funktioniert einwandfrei. Wenn ich es mit Maven in eine Kriegsdatei konvertiere, verliert es seinen Stammkontext und anstelle von localhost / events / läuft es auf localhost /, wodurch alle meine Links
unterbrochen werden

0

Wenn Sie Ihre Anwendung mit Eclipse bereitstellen. Wir können dieses Maven-Plugin verwenden

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-eclipse-plugin</artifactId>
    <version>2.10</version>
    <configuration>
        <wtpversion>2.0</wtpversion>
        <wtpContextName>newContextroot</wtpContextName>
    </configuration>
</plugin>

Gehen Sie nun zu Ihrem Projektstammordner und öffnen Sie die Eingabeaufforderung cmd an diesem Speicherort. Geben Sie den folgenden Befehl ein:

mvn eclipse: eclipse -Dwtpversion = 2.0

Möglicherweise müssen Sie Eclipse neu starten oder in der Serveransicht den Server löschen und einen Agian erstellen, um die Auswirkungen zu sehen. Ich frage mich, ob diese Übung im wirklichen Leben Sinn macht, aber funktioniert.


0

Wenn Sie die Unternehmensanwendung maven java ee 7/8 verwenden, müssen Sie die Datei pom.xml des EAR-Projekts bearbeiten

<build>
    <plugins>
        ...
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.8</version>
            <configuration>
                <version>6</version>
                <defaultLibBundleDir>lib</defaultLibBundleDir>
                <modules>
                    <webModule>
                        <groupId>com.sample</groupId>
                        <artifactId>ProjectName-web</artifactId>
                        <contextRoot>/myproject</contextRoot>
                    </webModule>
                </modules>
            </configuration>
        </plugin>
        ...
    </plugins>
</build>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.