Se nella tua pagina JSP hai qualcosa del tipo
codice:
Scarica file
quando clicchi il link fai una richiesta al server di restituirti il file, però quando arriva la risposta il browser la gestisce aprendo una pagina come se fosse HTML.
Invece devi indirizzare la richiesta a una servlet che modificando il ContentType inganni il browser
Per es.
codice:
Scarica file
La servlet imposta il contentType con un tipo che il browser non riconosce, legge il file e lo scrive direttamente sul ServletOutputStream.
Quando la risposta arriva al browser, essendo di un tipo sconosciuto si apre la classica finestra SalvaFile.