|
||
| [IT] Jakarta-Tomcat: implementare download automatico di file | ||
|
Jakarta-Tomcat: implementare download automatico di file 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
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:
Tre sono gli aspetti chiave:
<%
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%>" />
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. |
||
(c) 1999-2006
|