Puoi fare tutto tramite servlet. All'interno del metodo opportuno della servelt fai una cosa del genere (il file sul server lo crei cmq...al massimo dopo lo cancelli):
Codice PHP:
File tuoFile = ... ; //crei il tuo file e lo "riempi"
...
int read = 0;
byte[] bytes = new byte[1024];
//queste due righe sono fondamentali
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=\"" + tuoFile.getName() + "\"");
FileInputStream fis = null;
OutputStream os = null;
fis = new FileInputStream(new File(pathAlTuoFile, tuoFile.getName()));
os = response.getOutputStream();
while ((read = fis.read(bytes)) != -1) {
os.write(bytes, 0, read);
}
fis.close();
os.flush();