Tomcat - Ausgangspunkt für relative Pfade

waypray

Grünschnabel
Hallo alle zusammen

Ich habe im Rahmen einer Studienarbeit eine Webapplikation mit Anbindung an eine Datenbank erstellt. Die Datenbankanbindung habe ich mit TableGen generieren lassen.
Die Infos wie Benutzername usw. stehen in einem .properties- File.
Und genau das ist mein Problem: Im Moment klappt das nur, wenn ich den absoluten Pfad zu dieser Datei angebe. Wenn jetzt zum Beispiel Tomcat auf nem anderen Rechner in einem anderen Verzeichnis installiert wurde, findet die Anwendung die Datei natürlich nicht und somit ist meine Datenbankanbindung nicht mehr existent.

Lösung wäre die Angabe eines relativen Pfades zu dieser Datei aber genau das habe ich noch nicht hinbekommen, da ich nicht weiß was die Anwendung dann als "Basispfad" verwendet.

Ciao
Waypray
 
Wie lädst du denn dieses properties File? Eine Möglichkeit wäre es dieses per ClassLoader zu laden, oder in einem application context mit anzugeben. Dort würde dann das Prefix "classpath:" ausreichen.

Falls das alles nicht zutrifft, könntest du dann einen Auszug hier mit angeben?
 
Mit folgender Zeile wird die Datei geöffnet:
Code:
FileInputStream fis = new FileInputStream("C:\\xxx\\yyy\\zzz\\Zeitverwaltung\\WEB-INF\\db\\db.properties");

Also ganz verstehe ich nicht was du mir da erklären willst. :confused:
 
Code:
Properties prop = null;
        try {
            prop = new Properties();
            InputStream confProp = einObjekt.class.getClassLoader().getResourceAsStream
                    ("/paket1/properties/nameDerDatei.properties");
            prop.load(confProp);
        } catch(FileNotFoundException fnfexc) {
            fnfexc.printStackTrace();
        } catch(IOException ioexc) {
            ioexc.printStackTrace();
        }

Das müßte gehen.
 
Hallo!

Wie wäre es denn damit (innerhalb deines Servlets)?
Code:
  		Properties props = new Properties();
  		props.load(this.getServletContext().getResourceAsStream(
  				"foo.properties"));
Die foo.properties legst du einfach ins "root" deiner Webanwendung, fertig.

edit:
Die Infos wie Benutzername usw. stehen in einem .properties- File.
...ups DIESE Daten legt man natürlich besser nicht ins "Root" ^^ ;-)
Leg die foo.properties doch mal unter WEB-INF ab. Dort kann so ohne weiteres niemand direkt per URL zugreifen.
Auf die foo.properties unter WEB-INF greifst du dann wie folgt zu:
Code:
  Properties props = new Properties();
 		props.load(this.getServletContext().getResourceAsStream(
 				"WEB-INF/foo.properties"));

Gruß Tom
 
@Basti54
Danke! So klappt es jetzt.

@Thomas Darimont
"getServletContext()" gibt es bei mir so nicht - ich arbeite mit Tapestry. Hab ich vorher ja aber nicht erwähnt - mein Fehler. Sorry.
 
Hallo!

AFAIK setzt Tapestry aber doch auf der Servlet API auf, so dass es nicht "unmöglich" sein sollte, auf den darunter liegenden Servlet-Context zu kommen.

//Edit hab da mal ein paar Nachforschungen angestellt...
Hast du vielleicht Zugriff auf eine Instanz vom Typ org.apache.tapestry.IRequestCycle ?
Von dort aus könntest du nämlich über die Methodenverkettung
Code:
  props.load(requestCycle.getRequestContext().getRequest().getSession().getServletContext().getResourceAsStream(
  				"WEB-INF/foo.properties"));
an die gewünschten Daten kommen...

Gruß Tom
 
Ok, schon wieder mein Fehler:
Die Klasse, in der die Datei geladen werden muss, hat nicht wirklich viel mit der eigentlichen Webapplikation zu tun. Ich verwende sie nur in dieser.
Genau handelt es sich um die Klasse "DatabaseAccess" und die wird von TableGen erzeugt und könnte genausogut in jedem anderen Programm verwendet werden. Deshalb auch kein servletContext oder requestCycle.

Mit der Methode von Basti54 klappt es ja. :)

Trotzdem vielen Dank für die guten Ratschläge.
 

Neue Beiträge

Zurück