# Generierte Dateien im Servlet und Pfade



## DarkGuardian (18. Sep 2008)

Hallo zusammen

Ich habe ein Servlet, welches mir u.a. Dateien generiert. Diese Dateien soll man über den Browser gespeichert werden können. Dabei habe ich das Problem, dass ich nicht weiß, wo ich diese Dateien am besten ablegen soll. 

ich habe versucht, über relative Pfade diese in einem Verzeichnis parallel zu META-INF abzulegen. Das hatte wenig erfolg, so dass ich den Pfad in der web.xml als init-Parameter abgelegt habe. Dadurch klappt das Ablegen der Dateien. Ist denn mein Zielordner dafür sinnvoll gewählt?

In der HTML-Seite habe ich nun für die Datei einen Link angelegt, über den der Benutzer diese speichern können soll. Dabei weiß ich nun nicht, wie ich die Datei über den Link adressieren soll. Denn als Link etwas vergleichbares wie bei Bildern ( /pics/ok.bmp) zu nehmen, klappt hierbei nicht und es gibt eine 404-Fehlermeldung.

Kann mir jemand erklären, wo ich meine generierten Dateien am besten ablegen soll und wie ich diese dann entsprechend adressiere?


----------



## maki (18. Sep 2008)

Was ist denn die "Lebenszeit" deiner generierten Dateien?
Für temporöre Dateien gibt es laut Servlet SPec einen eigenen Ordner, wird regelmässig gelscöht.

Falls die Dateien dauerhaft bestehen sollen, müssen sie unbedingt ausserhalb der Webanwendung gespeichert werden!
Den Pfad dazu kannst du zB. in den init-parametern oder in den context-parametern in der web.xml ablegen.


----------



## DarkGuardian (18. Sep 2008)

Hmm, über die Lebenszeit habe ich mir bisher keine großen Gedanken gemacht. Das Servlet läuft in einem abgeschlossenen Bereich und da der Server nur bei Bedarf gestartet wird, werde ich wohl im Init das Verzeichnis leer machen. Es handelt sich somit nicht um dauerhafte Dateien. Wann werden denn diese temporären Ordner gelöscht? Vielleicht kann ich dann auch sowas nutzen.

Wenn ich die Dateien außerhalb der Webanwendung speichere, wie kann ich dann diese entsprechen adressieren. Muss ich dazu einfach beim Apache eine Weiterleitung der URL auf dieses Verzeichnis konfigurieren? Da bin ich mir bisher nämlich unsicher. Meine aktuellen Links landen nicht in meinem Servlet (sollen sie ja auch nicht), so dass der Zugriff dann doch über den Webserver gesteuert werden muss, oder?


----------



## maki (18. Sep 2008)

Wenn die Dateien ausserhalb der Webapp leigen nimmst du ein sog. Stream Servlet, Code gibt es haufenweise im Netz.

Wenn die Dateien nur temporär sind, reicht so etwas in der Art:

```
File tmpdir=(File)context.getAttribute("javax.servlet.context.tempdir");
```


----------



## DarkGuardian (18. Sep 2008)

Danke für die Hilfe

Ich werde damit mal etwas rumspielen. Mal sehen, ob ich meine Vorstellung damit umsetzen kann. Ansonsten melde ich mich hier wieder.


----------



## DarkGuardian (18. Sep 2008)

Eine kurze Frage noch.

In meinem aktuellen Test erzeuge ich die Datei report64.rep im temporären Verzeichnis. Wie muss denn nun der Link aussehen, damit diese Datei über einen Browser gespeichert werden kann?


----------



## maki (18. Sep 2008)

Das tempdir Verzeichnis kennst du ja bereits, den Dateinamen vergibst du selber, mit einem Stream Servlet schickst du das ganze an den User.


----------



## DarkGuardian (18. Sep 2008)

Achso, ich hatte das so verstanden, dass ich ein StreamServlet nur bei nicht temporären Dateien benötige. Na dann werde ich mir das mal genauer ansehen.

Vielen Dank noch mal


----------



## maki (18. Sep 2008)

Hast recht, hab mich da geirrt


----------



## DarkGuardian (19. Sep 2008)

Vielen Dank nochmal

Jetzt klappt das alles so, wie ich mir das vorgestellt habe. Die Dateien liegen in einem temporären Verzeichnis und über ein ServletOutputStream wird die Datei an den Browser gesendet.


----------

