Lösen Sie Pfadprobleme im Java -Web:
Die in Java verwendeten Pfade sind in zwei Arten unterteilt: absolute Pfade und relative Pfade. Letztendlich kann Java nur absolute Pfade verwenden, um Ressourcen zu finden. Alle Methoden zum Auffinden von Ressourcen auf relativen Pfaden sind nur einige bequeme Methoden. Aber es ist die API, die uns hilft, einen absoluten Weg unten aufzubauen, um Ressourcen zu finden!
Bei der Entwicklung von Webanwendungen müssen Sie häufig den physischen Pfad des aktuellen Webroots im Server erhalten.
Wenn es sich um einen Servlet, eine Aktion, einen Controller oder ein Filter, einen Hörer, einen Interceptor und andere verwandte Klassen handelt, müssen wir nur den ServletContext erhalten und dann den ServletContext.getrealPath ("/") verwenden, um die physische Adresse der aktuellen Anwendung auf dem Server zu erhalten.
Wenn der ServletContext in der Klasse nicht abgerufen werden kann, gibt es zwei Möglichkeiten, dies zu tun:
1. Verwenden Sie den Klassenlademechanismus von Java, um den xxx.class.getClassloader () aufzurufen. GetResource (""); Methode, um Klassenpfad zu erhalten und dann zu verarbeiten, um das Webroot -Verzeichnis zu erhalten. Diese Methode kann nur unter Webroot/Web-Inf/Klassen wirksam werden. Wenn die Klasse in eine JAR -Datei verpackt ist, ist die Methode ungültig. Zu diesem Zeitpunkt sollte die folgende Methode verwendet werden.
2. Die Idee des Frühlingsgerüsts. Erstellen Sie in web-inf/web.xml einen Param für WebaPootKey, geben Sie einen Wert an (Standard ist webapp.root) als Schlüsselwert, und führen Sie anschließend String webapproootKey = GetServletContext () aus. GetRealPath ("/"); durch Hörer oder Filter oder Servlet. Schreiben Sie dann den WebApp.root, der WebaPootKey als Schlüssel und Wert in die Systemeigenschaften der Systemeigenschaften entspricht. Anschließend wird der physische Weg von Webroot über System.getProperty ("webapp.root") im Programm erhalten.
Nach der zweiten Idee können wir es weiter erweitern. Bei Anwendungen, die in einem Server bereitgestellt werden, lesen Sie ihn jedoch bitte auf.
Hier sind einige Möglichkeiten, um den Klassenpfad und den absoluten Weg zur aktuellen Klasse zu erreichen. Sie können einige dieser Methoden anwenden, um den absoluten Weg zu den Ressourcen zu erhalten, die Sie benötigen:
1.
DebitnoteAction.class.getResource ("")Was Sie erhalten, ist das URI -Verzeichnis der aktuellen Klasse Filetest.class -Datei. Nicht selbst einbeziehen!
wie:
Datei:/d:/eclipse/springtest/webroot/webinf/classes/
ATCARNET/SRC/COM/EVI/MODULES/ATACARNET/Action/
2.
DebitnoteAction.class.getResource ("/")Was Sie bekommen, ist der absolute URI -Pfad des aktuellen Klassenpfads.
wie:
Datei:/d:/eclipse/springtest/webroot/webinf/classes/
3.
Thread.currentThread (). GetContextClassloader (). GetResource ("")Was Sie bekommen, ist auch der absolute URI -Pfad des aktuellen Klassenpfads
wie:
Datei:/d:/eclipse/springtest/webroot/webinf/classes/
4.
DebitnoteAction.class.getClassloader (). GetResource ("")oder
Classloader.getSystemResource ("")Was Sie erhalten, ist auch der absolute URI -Pfad des aktuellen Klassenpfads.
wie:
Datei:/d:/eclipse/springtest/webroot/webinf/classes/
5. Erhalten Sie den relativen Serverpfad
System.getProperty ("user.dir")Zum Beispiel: E: /apache-tomcat-5.5.16/apache-tomcat-5.5.16/bin
Ich empfehle die Verwendung von Thread.currentThread (). GetContextClassloader (). GetResource (""), um die URI -Notation des absoluten Pfades des aktuellen Klassenpfads zu erhalten
6. Erhalten Sie den absoluten Weg im Projekt
Im Allgemeinen verwendet
Request.getRealPath ("/")oder
request.getRealPath ("/config/")Es wird jedoch nicht empfohlen, Request.GetRealPath ("/") zu verwenden. Sie können die methode servletContext.getrealPath ("/") ausprobieren, um den absoluten Pfad zum Stammverzeichnis der Webanwendung zu erhalten
Es ist sehr einfach, die SRC -Datei zu erhalten, da SRC das Standard -Relativverzeichnis ist. Wenn Sie beispielsweise sagen, dass Sie die Datei test.java im COM -Verzeichnis unter SRC erhalten möchten, müssen Sie dies nur so ausreichen.
Datei f = neue Datei (com/test.java);
Wenn ich jedoch Dateien erhalten möchte, die nicht im Verzeichnis SRC oder Webroot enthalten sind, muss ich sie aus der gleichen Ebene von SRC oder Webroot erhalten, z. B. DOC
Meine harte Methode wird so implementiert:
String path = this.getServletContext (). GetRealPath ("/"); Eigenschaften p = neue Eigenschaften (); p.Load (neuer FileInputStream (neue Datei (Path.Substring (0, (Path.Lastindexof "doc/db.properties")));Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!