Salve a tutti, sto sviluppando un'applicazione jsp che prevede la possibilitā di scaricare i file presenti in una cartella. Io vorrei evitare di usare il link diretto ai file, e gestire il tutto tramite appunto jsp.
per fare questo, leggendo in giro, devo inserire nel codice della pagina:
codice:
<%
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition", "attachment; filename=\"" + nomedelfile + "\"");
ServletOutputStream os = response.getOutputStream();
java.io.FileInputStream fileInputStream = new java.io.FileInputStream("\\"+nomedelfile);
int data;
while ((data=fileInputStream.read()) != -1) {
os.write(data);
}
fileInputStream.close();
os.flush();
os.close();
}
catch(Exception genEx){
out.println(genEx.getMessage());
}
%>
tuttavia in questo modo ottengo l'errore:
codice:
getOutputStream() has already been called for this response
dovuto al fatto che le jsp impiegano giā l'output nel momento in cui vengono lanciate.
Sempre leggendo in giro, tra le varie soluzioni suggerite vi č quella di far gestire tutto da una servlet, evitando in questo modo di occupare l'out della response. Ma non mi č ben chiaro questo ultimo passaggio: si intende dire che devo scrivere un javabean con un metodo "doDownload (request, response)", infilandoci il codice che ho scritto sopra? E in quel caso, poi, come potrei assegnare il bean al download del file (l'utente dovrebbe comunque cliccare un pulsante o qualsiasi altra cosa che sta in ogni caso su una jsp...)? Cosa si intende, insomma, in maniera pratica, la frase "fai gestire tutto da una servlet"?
Spero di essermi spiegato abbastanza chiaramente, grazie per ogni eventuale aiuto!