Dateidownload im Servlet mit ServletOutputStream. Danch neue JSP aufrufen

thomrohd

Grünschnabel
Hallo!

Habe folgendes Problem:

Ich habe ein Servlet, in dem erzeuge ich einen Download, was auch wunderbar funktioniert. Nach dem Download möchte ich aber auf eine andere JSP, als die ursprüngliche verweisen. Wie kann ich das realisieren? Mit "rd.forward(request, response);" kriege ich immer eine Exception: "Cannot forward after response has been committed"

Hier mein Servlet:

Code:
// Download des TAN-Bogens
String datei = "C:/Programme/Apache Software Foundation/Tomcat 5.5/webapps/Banking/TAN/";
String dateiname = request.getSession().getAttribute("ktonr").toString() + ".pdf";
File file = new File(datei+dateiname);
InputStream in = new FileInputStream(file);
									
response.addHeader("Content-Type", "application/pdf");
response.addHeader("Content-Disposition", "attachment; filename="+dateiname);
response.addHeader("Pragma", "public");
response.addHeader("Cache-Control", "max-age=0");
			
ServletOutputStream outs = response.getOutputStream();
			
byte pic[]= new byte[in.available()];
in.read( pic );
		    
outs.write( pic );    		
outs.flush();
outs.close();
in.close();
	        
// Nach dem Download wird die Datei gelöscht.
file.delete();
	       	
request.setAttribute("Meldung", "Jo. Fertig.");
RequestDispatcher rd = getServletContext().getRequestDispatcher("/gui/tan.jsp");
rd.forward(request, response);

Wenn ich die letzten drei Zeilen weglasse funxt alles, aber ich bleibe halt auf der ursprünglichen JSP.

Kann mir jemand helfen? Schon einmal Danke.

Thomas
 
Moin,

der Kern Deines Problems sind diese Zeilen:

ServletOutputStream outs = response.getOutputStream();
//...
outs.close();
// und danach dann
request.setAttribute("Meldung", "Jo. Fertig.");
RequestDispatcher rd = getServletContext().getRequestDispatcher("/gui/tan.jsp");
rd.forward(request, response);


Was glaubst Du, über welchen Kanal jetzt (nach outs.close()) noch eine weitere Seite an den Browser geschickt werden kann ;)
 
Hi oko,

danke für die Antwort. Klingt irgendwie logisch, aber wie könnte man es denn ansonsten machen?

Thomas
 

Neue Beiträge

Zurück