2013-10-22 18 views
6

Gibt es eine Möglichkeit, einen relativen Pfad zum Attribut docBase in der Datei context.xml einer Webanwendung festzulegen, also außerhalb des Verzeichnisses appBase der Tomcat-Serverinstanz?Relativer Pfad in Context.xml

Ich möchte in der Lage sein, die Kontextkonfiguration zwischen Computern zu teilen und die App in einem Verzeichnis, nicht eine Kriegsdatei leben. Auf diese Weise kann ich die Klassen direkt in dieses Verzeichnis (in meinem Projektentwicklungsverzeichnis) kompilieren und Tomcat diese Klassen verwenden, ohne dass ein Kopieren/Packen erforderlich ist.

Ich benutze den Tomcat 8.0.0-RC5. Meine Auswahl Das Layout ist:

/home/david/projects/frontend/web-content   <-- the static html files 
/home/david/projects/frontend/web-content/WEB-INF <-- the WEB-INF with the web.xml 
/home/david/projects/tomcat      <-- tomcat base directory 
/home/david/projects/tomcat/Catalina/localhost  <-- holds the frontend.xml context configuration 

Ich habe versucht,

<?xml version="1.0" encoding="UTF-8"?> 
<Context path="/frontend" docBase="../../frontend/web-content"> 
</Context> 

aber das hat nicht funktioniert. Der gesamte Pfad vor/Web-Content scheint ignoriert zu werden. Das Protokoll sagt:

The main resource set specified [/home/david/projects/tomcat/webapps/web-content] is not valid 

Die Tomcat 8 documentation für den Kontext Container sagt:

Sie können einen absoluten Pfad für dieses Verzeichnis oder WAR-Datei angeben oder einen Pfadnamen, die mit dem appBase Verzeichnis der relativ Eigentümer des Hosts.

Bedeutet relativ hier ein striktes Unterverzeichnis von appBase (no .. erlaubt)?

Das Einstellen eines absoluten Pfads funktioniert ohne Probleme. Die Konfiguration

<?xml version="1.0" encoding="UTF-8"?> 
<Context path="/frontend" docBase="/home/david/projects/frontend/web-content"> 
</Context> 

funktioniert, aber es ist spezifisch für meinen Computer. Daher kann ich die Kontextkonfiguration nicht mehr ohne Änderungen teilen.

Ich könnte einen symbolischen Link innerhalb des appBase-Verzeichnisses des Tomcat-Servers erstellen und auf den Web-Content-Ordner meiner Anwendung verweisen. Das würde funktionieren, aber ich hätte verschiedene Konfigurationen (symbolische Links) auf Linux- und Windows-Rechnern.

+2

Wie genau wird 'appBase' in server.xml gesetzt? – david

+0

Ich habe die Host-Konfiguration in der Datei server.xml nicht geändert, daher ist es immer noch der Standardwert: david

Antwort

5

Nur den letzten Namen der relativen Pfadnamen zu nehmen und die ersten Teile zu ignorieren ist wahrscheinlich ein Bug in Tomcat. Relative Pfadnamen sollten funktionieren oder Fehler enthalten. Aber Teile zu ignorieren ist schlecht. Eine Umgehung könnte einen absoluten Pfadnamen wie folgt verwenden: <Context docBase="${catalina.home}/../www.war"

Ich lese gerade das Changelog von Tomcat 8.0.15. Der Fehler sollte behoben werden (!): "Korrekte Handhabung relativer Werte für das DocBase-Attribut eines Kontextes."