ho creato in fretta un paio di JSP per vedere come funziona con il force-download
codice:
formpage.jsp
<%--
Document : formpage
Created on : 7-mag-2009, 14.59.38
Author : Andrea
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Creiamo un file e forziamone il download</title>
</head>
<body>
<iframe name="hiddenframe" style="display:none;"></iframe>
<h1>Dati del file</h1>
<form name="creafile" method="post" action="forcedownload.jsp" target="hiddenframe">
Nome: <input type="text" name="nome" />
Cognome: <input type="text" name="cognome" />
Telefono: <input type="text" name="telefono" />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
codice:
forcedownload.jsp
<%--
Document : forcedowload
Created on : 7-mag-2009, 15.07.24
Author : Andrea
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="java.io.*"%>
<%
response.setContentType("text/plain");
response.setHeader ("Content-Disposition", "attachment; filename=\"testfile.txt\"");
ServletOutputStream outs = response.getOutputStream();
outs.write(("Nome: "+request.getParameter("nome")+"\n").getBytes("utf-8"));
outs.write(("Cognome: "+request.getParameter("cognome")+"\n").getBytes("utf-8"));
outs.write(("Telefono: "+request.getParameter("telefono")).getBytes("utf-8"));
outs.flush();
outs.close();
%>
e come vedi non passo dalla creazione su server del file, ma lo sparo direttamente in output. Penso che dal secondo download in poi il tuo file sia scaricato correttamente, ovvero non contestualmente alla prima richiesta. Credo che sia proprio quello il problema, come accennavo nel post precedente. In altre parole, invece di affidarti al link diretto al file, crea una JSP o servlet che si occupi della creazione del file (non serve salvarlo da nessuna parte, il server se lo può anche tenere in memoria) e del suo inoltro al client...