2010-01-18 19 views
6

Wie kann ich den Namen der aktuellen Webanwendung in Java EE abrufen?Wie kann ich den Namen der aktuellen Web-App in Java EE abrufen?

Ich bin ziemlich zufrieden mit eigenständigem Java, aber Java EE ist neu für mich. Ich schreibe einen benutzerdefinierten Code, der in ein Java EE-Berichtspaket von Drittanbietern integriert wird. Ich habe mehrere Instanzen auf demselben Tomcat-Server bereitgestellt, so habe ich so etwas wie:

 
C:\ 
+-- tomcat6 
    +-- webapps 
     +-- app1 
     +-- app2 

Also, wenn der Benutzer geht an, sagen wir mal, http://example.com/app1/viewReport, ich möchte in der Lage zu bekommen „app1“. (Und nicht durch Parsing der URL, vorzugsweise.)

Auch, wenn es eine Möglichkeit gäbe, den Stamm von app1 (in diesem Beispiel C: \ tomcat6 \ webapps \ app1) zu bekommen, wäre das auch toll.

Antwort

11

1. Den "Namen" erhalten

Es heißt der Kontextpfad. Wenn der Code im Kontext der Webanwendungsabfrage ausgeführt wird, können Sie ihn abrufen, indem Sie aufrufen.

2. Zugriff auf den physischen/real Ressource

Wenn Sie den Inhalt einer Datei/Ressource in Ihrem Webapp zugreifen möchten, sind Sie am besten von über einen Link:

Es ist auch möglich, den physischen Pfad auf dem Datenträger einer Datei/Ressource erhalten, da der Pfad in Bezug auf den Web-App, mit ServletContext#getRealPath(String), aber es ist nicht zuverlässig (funktioniert nicht immer, wenn Sie Ihre Webanwendung zum Beispiel als WAR bereitstellen).

3. Zugriff auf Klassenpfad Ressourcen

Per Ihren Kommentar, haben Sie versucht, eine Ressource innerhalb des/WEB-INF/classes Verzeichnis zuzugreifen. Da WEB-INF/classes/* web-spezifische Klassen sind, können Sie einfach darauf zugreifen, als ob Sie auf eine Klassenpfad-Ressource in einer Java SE-Anwendung zugreifen würden. Auch im Rahmen des webapp läuft Ihr Code unter der Annahme, können Sie einfach die folgenden Befehle verwenden:

In Ihrem Fall würden Sie wahrscheinlich das letztere verwenden möchten , und laden Sie dann die Eigenschaftendatei über die Eigenschaften # load (InputStream).

Etwas entlang der Linien von:

Properties props = new Properties(); 
props.load(getClass().getResourceAsStream("/reportCustom.properties")); 
+0

danke für Ihre Hilfe. Was ich versuche zu tun, ist eine Eigenschaftendatei in 'webapps/myapp/WEB-INF/classes/reportCustom.properties' zu laden. Ist das eine einfachere Methode? In der Vergangenheit habe ich System.getProperty ("myapp.root") mit einer fest codierten Zeichenfolge erhalten, die eine Eigenschaft von web.xml ist, die den Stammpfad angibt. Aber dann finde ich, dass wir mehrere Instanzen auf demselben Tomcat unterstützen müssen, also weiß ich nicht, wie "myapp" aufgerufen wird. – Jenni

+0

In Ihrem Fall können Sie auf reportCustom.properties zugreifen, als ob es sich einfach im Klassenpfad befindet. Ich werde meine Antwort aktualisieren, um diese in Kürze aufzunehmen. –

2

was ich versuche, eine Properties-Datei in webapps/myapp/WEB-INF/classes/reportCustom.properties zu tun ist, laden

Da sich die Datei im Verzeichnis classes befindet, können Sie sie mit dem ClassLoader (dem üblichen Java-Mechanismus zum Laden von Dateien im Klassenpfad) laden. Es ist wahrscheinlich am besten, die context ClassLoader zu verwenden.

Verwandte Themen