Dynamic Web Project -> file

PollerJava

Top Contributor
Hallo,

ich habe ein ganz normales Dynamic Web Project mit Eclipse erzeugt und möchte jetzt, dass ich gewisse Daten in einem File speichern kann. Dazu hab ich mir ein File (test.txt) unter "ProjektName/WebContent/test.txt" angelegt.
Von einem Servlet aus (im Package com.company.controller) möchte ich nun in die Datei test.txt schreiben.
Wie muss ich den Pfad vom servlet aus zu der Datei legen. ich habs schon versucht mit ../../../ProjektName/WebContent/test.txt (.. für den Package namen), aber das funktioniert nicht.
Oder weiß jemand eine bessere Idee?
Vielen Dank,
 
Es gibt kein WebContent für die WebApp, nur für die IDE.

Abgesehen davon kann man nicht einfach so in Dateien schreiben die in der WebApp liegen, weil es u.U. gar keine Dateien gibt.

Suche doch mal ein bisschen im Forum hier, gab es sehr oft.
 
OK, ich hab jetzt in der *.ear und dann in der *.war nachgesehen, es gibt wie erwartet den Ordner WebContent wirklich nicht,
nach was soll ich da suchen in diesem Forum, hab schon gesucht, bin aber nicht auf den gewünschten Sucherfolg gekommen,
vielen Dank,
 
OK, Suchbegriffe dafür sind wirklich schwer zu finden.

Tatsache ist: Du sollst in WebApps gar nicht mit java.io.File arbeiten (oder Jars, EARs, usw.), und auf keinen Fall versuchen in Dateien zu schreiben die zur WebApp gehören.
Begründet ist das in Servlet Spek., es gibt keine Garantie dass es wirklich Dateien gibt, also die War entpackt wird, manche Server entpacken nach jedem Neustart alles neu -> Änderungen werden überschrieben

Lösungen gibt es dafür,die Frage lautet aber: Was hast du denn vor? bzw. Warum möchtest du denn in diese Datei schreiben?
 
Ich bin gerade dabei einen "Prototypen" zu bauen, ich gebe über eine JSP- form etwas ein und dass soll dann in einer Datei gespeichert werden, Diese Datei wird dann vielleicht mit einer Datenbank ersetzt aber wer weiß,
Also ich brauche eine ganz einfache Möglichkeit, etwas zu speichern und da ist eben ein file das einfachste.
Ich habs jetzt so gemacht, dass ich den Pfad auf "C:/test.txt" gelegt habe, und das funktioniert interessanterweise, obwohl ich da acuh ein ungutes gefühl habe, da ich von einem Servlet (einer *.war Datei) auf das lokale Verzeichnis zugreife.

Wie könnt ich das am besten lösen.
lg
 
Also ich hatte so ein "ähnliches" Problem und zwar habe ich eine property Datei mit verschiedenen Einstellungen, auf die ich aber nur lesend zugreife.
jedenfalls liegt die Datei bei mir in /resources/config.properties

Um nun auf die Datei zugreifen zu können
Java:
getClass().getResource("/resources/config.properties").getFile();

Gruß
 
Also von einer *.ear bzw. einer *.war aus auf eine externe Resource zuzugreifen ist erlaubt/empfehlenswert?
Gibts da nicht irgendwelche sicherheitsbestimmungen wie bei einem Applet (SandBox)?
 
Nein, hat auch keiner behauptet.

Ähnlich, gehen aber weiter und sind nicht nur für die Sicherheit.

OK, aber es funktoniert, wenn man auf externe Resourcen zugreift was bei Applets schon wieder ein bisschen schwieriger ist mit dem signieren.
Ein Datenbankzugriff wäre ja auch ein externer Zugriff und das ist auch erlaubt und entspricht auch dem Standard (vom Persistance- Layer aus), meine Datei sollte nur als Datenbankersatz (einstweilen) dienen. Also ist meiner Meinung nach alles im grünen Bereich denn sonst gibt es ja keine Möglichkeit, außer Datenbanken oder externe Files.
Wie seht ihr das?
 
Wie seht ihr das?
Vollkommen egal wie "wir" das sehen, es gibt einen Standard, solltest du auch mal lesen 😉

Dein Vergleich mit Applets passt nicht im geringsten, es geht um andere Dinge, zB. Clusterfähigkeit, Unterstützung von Transaktion, die Tatsache dass es gar keine Dateien geben muss(!).
Sicherheit hat damit nix zu tun.

Deine Lösung ist nur ein Workaround (diplomatisch ausgedrückt), aber gut genug für eine Demo/Prototypen, Produktiv solltest du es schon sauber lösen.
 
OK, aber es funktoniert, wenn man auf externe Resourcen zugreift was bei Applets schon wieder ein bisschen schwieriger ist mit dem signieren.
Ein Datenbankzugriff wäre ja auch ein externer Zugriff und das ist auch erlaubt und entspricht auch dem Standard (vom Persistance- Layer aus), meine Datei sollte nur als Datenbankersatz (einstweilen) dienen. Also ist meiner Meinung nach alles im grünen Bereich denn sonst gibt es ja keine Möglichkeit, außer Datenbanken oder externe Files.
Wie seht ihr das?

Wie du siehst macht das ganze schon in einem Prototypen Probleme. Und was beweist dieser Prototyp, wenn er sich nicht (Spec)konform verhält?
Wenn im Produkt eine DB verwendet werden muss oder soll, dann mach das jetzt auch. Bediene dich einer kleinen DB wie z.B. die HSQL-DB, die du in-process laufen lassen kannst, die sich aber (als Datasource angemeldet) eben wie eine DB verhält, schnell aufgesetzt ist und eher deinem Endprodukt entsprchen wird.

Ein Prototyp, der nur die halbe Applikation abbildet, würde ich keinen Meter weit trauen.
 
Naja, ganz so ist es nicht, Prototyp hab ich deshalb geschreiben da es ein versuch war mit einer externen XML- Datei, da diese aber jetzt so gut funktioniert, wird es auch bei der XML- Datei bleiben.
Jetzt ist nur die Frage, wie man das Professionell aufbaut -> da gibt es ja dann gar keinen möglichkeit, das so zu machen.
Maki hat ja geschrieben, dass ein XML- File im Dynamic Web Projekt nicht dem Standard entspricht und einen externe XML- Datei schon gar nicht.
Jetzt ist halt die Frage wie ich das machen soll, gibts eine Datenbank, in der ich mein XML- File speichern und leicht ändern kann?
 
Naja, ganz so ist es nicht, Prototyp hab ich deshalb geschreiben da es ein versuch war mit einer externen XML- Datei, da diese aber jetzt so gut funktioniert, wird es auch bei der XML- Datei bleiben.
Ja, das "Ergebnis" war zu erwarten.

Jetzt ist nur die Frage, wie man das Professionell aufbaut
*G*
Das steht bereits in den Antworten weiter oben.
Ich mag Puritaner sein in dieser Hinsicht, aber auch als pragmatische Lösung rate ich von Zugriffen auf das Filesystem aus einer Enterprise- oder Webapplikation ab... aus Erfahrung und aus gutem Grund.
 
Wie lesen ich denn jetzt nun eine KonfigurationsDatei ein?

Besser gefragt, wie lege ich den Pfad fest, damit es sowohl unter Linux wie auch Win Umgebung funktioniert? da bleibt mir doch nur der Web-ordner oder? Aber dann wird es mitkompiliert und ist witzlos...:shock:
 
Ja sehr gern, nutze ich die web.xml 🙂

Aber ein absoluter Pfad, klappt nur bei mir auf der Kiste...
Muss es also ein relativer sein... aber wohin komme ich denn wenn ich "\" aus dem Verzeichnis der web.xml "rausspringe" ? Soll ja unter Linux wie auch Windows funktionieren...

Kurz: was ich nicht raffe ist, wohin lege ich meine Konfig-Dateien (Ordner) und wie trage muss der Value für die web.xml dafür heissen... Das ist mein probläääm
 
ich werd nicht schlau wie ich in der web.xml einen Dateipfad hinterlegen soll
[XML]<servlet-mapping>
<servlet-name>myconfig</servlet-name>
<url-pattern>/conf/myconfig.xml</url-pattern>
</servlet-mapping>[/XML]

Java:
<%= config.getServletContext() %>
funktioniert nicht -> The requested resource () is not available.
 
vsk, wenn man WebApps entwickeln will sollte man sich auch mit der Materie auseinandersetzen.
Da sehe ich bei dir ehrlich gesagt noch riesige defizite, zeigt sich an den fragen die du stellt und am Code den du hier reinstellt.
Und nein, das geht nicht per learing-by-doing.

[xml]<servlet-mapping>
<servlet-name>myconfig</servlet-name>
<url-pattern>/conf/myconfig.xml</url-pattern>
</servlet-mapping>[/xml]
Da ist kein "Dateifad" den du hier festlegst, sondern ein mapping zwischen Servlets und URL.
Du willst Servlet Parameter.

[xml]<%= config.getServletContext() %>[/xml]
Der Contextpath hat rein gar nicht mit Servletmappings oder Dateipfaden zu tun.

Tue dir slber einen großen gefallen und fange an zu lesen, die Servlet Spek wäre imho ein guter Startpunkt.
 

Zurück
Oben