Puoi utilizzare una Servlet che lo legge e lo invia al client... è più sicuro!
codice:
// doGet o doPost... vedi te...
public void doGet(HttpServletRequest request, HttpServletResponse response) {
String nomeFile = ... // Nome da visualizzare nella finestra di download
String pathFisicoAlFile = ... // Path fisico che punta al file sul server
response.setContentType("application/octet-stream; name=\"" + nomeFile + "\"");
response.setCharacterEncoding("UTF-8");
response.addHeader("content-disposition", "attachment; filename=\"" + nomeFile + "\"");
FileInputStream fis = new FileInputStream( pathFisicoAlFile );
byte[] dati = new byte[ fis.available() ];
fis.read( dati );
fis.close();
response.setContentLength( dati.length );
ServletOutputStream out = response.getOutputStream();
out.write( dati );
out.flush();
out.close();
break;
}
Ciao.