tomcat 5.5 - Problem beim Lesen von Ressourcendateien

8

Ich verwende Tomcat 5.5 als meinen Servlet-Container. Meine Webanwendung wird über .jar bereitgestellt und enthält einige Ressourcendateien (Textdateien mit Zeichenfolgen und Konfigurationsparametern), die sich unter dem Verzeichnis WEB-INF befinden. Tomcat 5.5 läuft unter ubuntu linux. Die Ressourcendatei wird mit einem Dateireader gelesen:
fr = new FileReader("messages.properties");

Das Problem ist, dass das Servlet manchmal die Ressourcendatei nicht finden kann, aber wenn ich es ein paar Mal neu starte, funktioniert es, und nach einiger Zeit hört es wieder auf zu arbeiten. Kann jemand vorschlagen, wie Ressourcen-Strings am besten aus einem Servlet gelesen werden können? Oder ein Workaround für dieses Problem? Das Einfügen der Ressourcendateien unter WEB-INF / classes hilft auch nicht.

    
Vladimir Prenner 18.11.2008, 11:39
quelle

5 Antworten

5

Ich vermute, dass Sie versuchen, einen relativen Pfad für den Zugriff auf die Datei zu verwenden. Der absolute Pfad sollte helfen (z. B. "/home/tomcat5/properties/messages.properties").

Die übliche Lösung für dieses Problem besteht jedoch in der Verwendung der getResourceAsStream-Methode des ClassLoaders. Wenn Sie die Eigenschaftendatei auf "WEB-INF / classes" anwenden, wird sie für den Klassenlader verfügbar und Sie können auf den Eigenschaftsdatenstrom zugreifen.

Nicht getesteter Proto-Code:

%Vor%     
diciu 18.11.2008, 12:15
quelle
9

Wenn Sie versuchen, über eine Servlet-fähige Klasse wie einen ContextListener oder einen anderen Lifecycle-Listener auf diese Datei zuzugreifen, können Sie das ServletContext-Objekt verwenden, um den Pfad zu einer Ressource abzurufen.

Diese drei sind ungefähr gleichwertig. (Verwechseln Sie getResourceAsStream nicht mit dem, das von der ClassLoader -Klasse bereitgestellt wird. Sie verhalten sich sehr unterschiedlich)

%Vor%     
James Schek 19.11.2008 23:44
quelle
2

Wenn Sie

verwenden %Vor%

Dann versucht der FileReader, diese Datei aus dem Basisverzeichnis zu lesen - was in Tomcat wahrscheinlich der Ordner / bin ist.

Wie bereits erwähnt, verwenden Sie einen absoluten Pfad oder laden Sie ihn als Ressource für den Klassenlader.

    
matt b 18.11.2008 14:28
quelle
2

Ich verwende den folgenden Code, um eine Eigenschaftendatei von einem Servlet zu laden:

%Vor%

Dies funktioniert mit Tomcat 6.0

    
Saulo Silva 03.07.2009 13:45
quelle
0

Ich habe für Jboss Seam verwendet:

ServletLifecycle.getServletContext().getRealPath("")

    
Marcus Vinícius 11.11.2009 02:08
quelle

Tags und Links