# JSP: Download erzwingen



## Der Held (27. Oktober 2005)

Hi, meine JSP erzeugt eine XML Datei auf dem Server, diese soll vom User runtergeladen werden.
Mit  

```
response.sendRedirect( fileName );
```
leite ich auf diese Datei um, allerdings wird sie im Browser angezeigt anstatt, dass der download Dialog aufgeht. Wie kann ich das erzwingen (falls ueberhaupt)?

Gruss,
DH


----------



## javaprogger1987 (29. Oktober 2005)

Du kannst es ja mal mit 



```
response.setContentType("application/download");
```
(Den MIME-Typ gibt es nicht -> Browser bietet Download-Dialog an)

versuchen. Bin mir aber nicht sicher ob das dann auch bei einer Weiterleitung geht..


----------



## Der Held (31. Oktober 2005)

Zusammen mit dem Redirect funktioniert es nicht. Das ist auch klar, denke ich, da setContentType ja schliesslich den MimeTyp des aktuellen Dokumentes, also der JSP-Seite in der der aufruf stattfindet veraendert.

Ich habe daher anstelle des FileOutputStream direkt ins Dokument geschrieben und den MimeTyp wie vorgeschlagen auf "application/download" gesetzt. Das klappt soweit auch klasse.

Allerdings moechte ich natuerlich, dass die Datei eine .xml Endung hat und keine .jsp. Selber umbenennen ist natuerlich wenig benutzerfreundlich und sorgt fuer Probleme. Also gibt es zwei moeglichekeiten: Irgendwie dem Browser eine Dateiendung fuer das zu downloadende File vorgeben, wobei ich nicht glaube, dass das geht, oder 2. den JSP-Code in einer XML-Seite einbetten und Tomcat beibringen, dass er auch XML-Dokumente nach JSP parsen muss, habe aber keine Ahnung wie/wo  das geht.

Gibt es sonst noch weitere Moeglichkeiten?

Gruss,DH
Merci fuer die Antwort


----------



## Billie (1. November 2005)

Wäre es nicht wesentlich einfacher einen einfachen Link auf die Datei anzuzeigen? Evtl. könntest du es auch mit JavaScript lösen, zumindest in den Meisten Downloadseiten kommt immer die Meldung "Der Download startet in Kürze, falls das nicht der Fall sein sollte, klicken Sie hier". Oder du verpackst deine XML-Datei in einer *.zip Datei. Dann müsste der Browser automatisch Downloaden, glaube ich. Eigentlich nur sinnvoll bei großen Dateien, aber ich weiß ja nicht wie groß deine XML-Dateien sind und ansonsten auch nicht weiter schlimm.


----------



## javaprogger1987 (1. November 2005)

Also hab mich noch mal ein bissel eingelesen und dann folgendes gefunden:

http://www.galileocomputing.de/openbook/javainsel4/javainsel_17_008.htm
Zitat:


> <%
> String url = ";;
> 
> response.sendRedirect*(* url *)*;
> ...


 
Ich denke du könntest das dann mit dem "manuellen" Umlenken auch machen, indem du da den ContentType auf application/download setzt und die URL entsprechend anpasst...


----------



## Billie (1. November 2005)

Was ich auch noch anmerken wollte, mir ist aufgefallen dass man hier im Forum bei gewissen Posts ja Dateien anhängen kann. Die werden auch immer über den Downloadmanager aufgerufen, egal welchen Typ sie haben.


----------



## Der Held (1. November 2005)

Hallo, danke fuer die Antworten.

Ich habs zwar so geloest, dass eine Datei auf dem Server abgelegt wird, aber am elegantesten faende ich ich es, wenn die generierte Seite direkt runtergeladen werden kann, da ich mich dann nicht mehr um die "Verbleibsel" auf dem Server kuemmern muss.

Die Loesung mit JavaScript wuerde zumindest fuer den Benutzer so aussehen wie gewuenscht. Eine Seite auf der nur ein Link angeboten wird, ohne automatischen download finde ich nicht angemessen.

Die Sache mit der Weiterleitung ist interessant, aber dabei muss ich immernoch eine Datei auf dem Server ablegen.

Momentan habe ich schon fast die gewuenschte Funktionalitaet erreicht, sobald ich den Link anklicke der mich zur JSP - Seite fuehrt wird mir ein Download angeboten. Das runtergeladene File enthaelt das XML-Dokument hat aber noch Standardmaessig die Endung .jsp statt .xml. Das ist alles.

Hier mal der Code, ich habe JDOM zur generierung des XML-Files benutzt

```
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<%@ page import="org.jdom.output.*" %>
<%@ page import="org.jdom.Document" %>
<%@ page import="java.io.*" %>
<%//@ page errorPage="error.jsp" %>
<jsp:useBean id="export" class ="beans.ExportBean" />

<%

export.setProjectID(Integer.parseInt(request.getParameter( "pid" )));
export.createDocument();
XMLOutputter output = new XMLOutputter(Format.getPrettyFormat());

response.setContentType("application/download");

%>
<%= output.outputString(export.getDoc())	 %>
```


----------



## Billie (1. November 2005)

Hm, mir fällt noch etwas ein *ggg* Ähm, bist du Vertraut mit dem phpBB Forum? Dort gibt es im Administrationsbereich die Funktion "Datenbank Backup". Wenn du diese Seite aufrufst öffnet sich auch eine PHP-Seite die den Downloadmanager aufruft und speichert die Datei im *.sql Format.

Ich weiß leider nicht wie das dort Umgesetzt wurde... ist auch PHP, aber das lässt sich dann sicher auch irgendwie in JSP realisieren.


----------



## Der Held (1. November 2005)

Kenne ich, phpMyAdmin hat auch was sehr aehnliches, man kann sich nen Datenbankdump als file Downloaden und dabei wird IMHO auch kein File auf dem Server angelegt sondern direkt runtergeladen.

Nur wie ist das mit JSP zu knacken?


----------



## Thomas Darimont (2. November 2005)

Hallo!

 ich wuerde das nicht innerhalb einer JSP abhandeln
 schau mal hier:
http://www.tutorials.de/tutorials225926.html

 Gruss Tom


----------

