Cloud with rain
.:G
G:.
0 and 1 serie, black on white
pulled card
myjsp.feelinglinux.com
ver. 1.1.9-4
Hallo, welcome to my world.
Here you can find some stuff about computer science.
<<< Enjoy your visit! >>>
0 and 1 serie, white on black

Jakarta-Tomcat: implementare download automatico di file

        Scritto: Giansante Gabriele, prima del 2005     

L'obiettivo e' implementare una funzionalita' di download automatico.
Si vuole pilotare il download dei file in modo che possano essere compiute determinate azioni lato server, come ad esempio il nascondere l'eventuale collocazione fisica dei file stessi.
Il funzionamento prevede il click su un link e l'inizio del download da parte del browser. Il link punta ad una pagina jsp che si puo' occupare di
  • Salvare statistiche sui file scaricati
  • Attivare il download
  • Qualsiasi altra cosa ci venga in mente...
Questa pagina non avra' un contenuto visibile per l'utente, ma sara' costituita interamente dal contenuto del file da scaricare.
In pratica, leggiamo il file voluto e ne scriviamo il contenuto in output, ovvero sulla pagina. Fornendo un content type opportuno, si avra' l'effetto di download automatico.
Dal momento che comunque vi e' del codice Java da scrivere, sia esso su una classe normale, un bean o sulla pagina stessa, possiamo sicuramente anteporre delle routine per salvare su database, per esempio, le statistiche su quanti hanno scaricato il file.
Un'altra cosa che si potrebbe fare e' il salvataggio di eventuali preferenze relative all'utente, oppure anche bloccare il download per utenti non registrati. Infatti, con questo metodo, il file potrebbe anche non essere accessibile via web e risiedere in una parte del filesystem non gestita da Tomcat o dal server web (quindi l'unico modo di scaricare il file diventerebbe la pagina-filtro).
Vediamo un semplice schema per il salvataggio delle statistiche su DB ed il download automatico:

                                     ____
  FS = File System                  /    \
  DB = Database              file   \____/
                               +--- | FS |
                               |    \____/
  +------+         +------+ <--+     ____
  |A     |         |B     |         /    \
  | Pag. |  link   | Pag. |  stat.  \____/
  | JSP  | ------> | JSP  | ------> | DB |
  |      |         |      |         \____/
  +------+         +------+
                      |
                      |   file     +--------+
                      +----------> | Utente |
                                   +--------+
Si parte dalla pagina A in cui e' presente un link ad un file. Attraverso il link si raggiunge la pagina B, che compie le seguenti operazioni:
  1. Salvataggio delle statistiche
  2. Lettura del file e visualizzazione in output
Non verra' implementata la parte relativa alla lettura del file da scaricare, cosi' come quella relativa al salvataggio delle statistiche, in quanto fuori tema.

Tre sono gli aspetti chiave:
  1. non deve esistere in pagina alcun contenuto diverso da quello del file da scaricare
  2. e' necessario settare il content type opportuno (piu' avanti...)
  3. eliminare tutti gli spazi ed i caratteri di "a capo" fra un tag jsp ed un altro
Il secondo punto ci assicura che il download possa avvenire correttamente, invece di presentare una pagina con caratteri "strani". Il terzo punto, insieme al primo, invece, ci assicura che il file scaricato abbia il contenuto corretto. Infatti, le pagine JSP servite da Tomcat hanno il brutto difetto di inserire caratteri non voluti (e non e' tanto strano...), derivanti dagli invio e dagli spazi inseriti fra i tag jsp.
<%
  String nome = request.getParameter("file");
%><tags:stat file="<%=nome%>" /><%
  response.setContentType("application/octet-stream");
  response.setHeader("Content-Disposition", "attachment; filename="+nome);
%><tags:download file="<%=nome%>" />
Pubblicita'
Naturalmente questo non e' altro che un frammento di codice della pagina JSP di download (la pagina B nello schema in alto), senza controlli particolari (come la verifica che il parametro non sia null, che il file esista, ecc.). Manca, ad esempio, la dichiarazione dei tag personalizzati tags:stat e tags:download. Si puo' usare anche codice Java al posto dei tag, ma cosi' e' piu' elegante e comprensibile.
I due tag usati (e non implementati, come gia' ho detto), servono rispettivamente ad aggiornare le statistiche e a generare il contenuto del file da scaricare. Il contenuto puo' essere letto da un altro file oppure generato al volo da qualche algoritmo.
Notare come i tag siano "appiccicati" l'uno con l'altro. E' importantissimo, altrimenti il contenuto del file scaricato sara' diverso da quanto desiderato. Vanno eliminati anche gli spazi e tutti gli altri caratteri dopo l'ultimo tag JSP.
Un'ultima cosa. Il "content type" identifica il tipo del file ed indica al browser come trattare cio' che gli arriva. Nel "Content-Disposition", indichiamo il nome del file cosi' come apparira' all'utente. Volendo si puo' nascondere il nome originale passando alla pagina JSP l'id di un oggetto rappresentante il file, invece del nome stesso. Ci pensera' il codice java del tag a trovare a quale file appartiene l'id ricevuto.


Hai trovato utile questo articolo?
Aiutami a condividerlo o metti un "mi piace".
Grazie mille!


Gli strumenti di condivisione (Google+, Facebook) sono visibili in alto a destra solo dopo aver accettato la policy di utilizzo dei cookie per questo sito.
FAQ - Come faccio a cambiare la mia scelta?

 

Strumenti (myjsp.feelinglinux.com)
Gioco: allenamento con la tastiera Strumenti di codifica/decodifica URI (%-encoding) e Base64 Strumenti di calcolo online per IP e Reti
QUIZ GAME
Quiz game

Cerca @myjsp.feelinglinux.com

Pubblicita'