Progettazione… Programmazione… Soluzione…
[Java] Invio di File ad una Servlet
In Java le Servlet sono il primo strumento con il quale si viene a contatto, se si vuole realizzare una applicazione Web dinamica che interagisca con l’utente. Come sicuramente saprete, le Servlet sono in grado di ricevere le richieste HTTP GET o POST, e di restituire un risultato, che può anche dipendere dai parametri passati tramite la richiesta. Questa semplice caratteristica, è realizzabile grazie all’implementazione dei metodi doGet(…, …) e doPost(…, …) che la classe javax.servlet.http.HttpServlet mette a disposizione.
L’unico vero problema che ho riscontrato fin’ora con l’utilizzo di questa classe, è la limitazione da essa imposta riguardo il tipo di dati che è in grado di prelevare dalle richieste GET e POST che riceve. Infatti, con i due metodi sopracitati, è possibile solo elaborare richieste che contengono campi testuali che non fanno riferimento a codifiche particolari. Un classico esempio di questa limitazione, è l’impossibilità di inviare tramite GET o POST una immagine alla Servlet.
Java non offre nativamente altri strumenti per la gestione di contenuti di diverso tipo, quindi bisogna ricorrere ad una libreria esterna. Una libreria molto semplice ed intuitiva è messa a disposizione da Servlets.com ed è reperibile a questo indirizzo. La libreria in questione è com.oreilly.servlet, ed in particolare la classe che ci serve per raggiungere il nostro scopo, è la classe MultipartRequest. Vediamo di seguito un semplice esempio di utilizzo di quanto detto.
HTML – PHP – JSP
Questa porzione di codice, è quella che implementa il form per la scelta del file da inviare alla servlet. Può essere implementato in qualsivoglia linguaggio Web, ma per semplicità assumiamo di volerlo implementare in html.
1 2 3 4 | <form action="ServletDestinazione" method="post" enctype="multipart/form-data" > <input type="file" name="file" /> <input type="submit" name="submit" value="submit" /> </form> |
Alcuni commenti riguardo il codice di cui sopra:
- Il form utilizza il metodo HTTP POST per l’invio dei dati
- ServletDestinazione è la Servlet che implementa il metodo doPost(…, …) per la ricezione dei dati
- multipart/form-data è la codifica dei dati inviati alla Servlet
Java – Servlet
Ed ora vediamo come nella Servlet possiamo recuperare i dati della richiesta.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import java.io.File; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.oreilly.servlet.MultipartRequest; public class ServletDestinazione extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String temp_dir = "."; // Directory temporanea per il salvataggio del file int temp_size = "65536"; // Dimensione massima del file MultipartRequest mr = new MultipartRequest(request, temp_dir, temp_size); File f = mr.getFile("file"); // recupero l'oggetto passato nel campo "file" // Gestione libera del File f ... } } |
Dal codice di sopra, possiamo notare il semplice utilizzo della classe MultipartRequest e soprattutto delle poche componenti di essa utilizzate. Dai commenti e dai JavaDoc della classe, credo sia abbastanza comprensibile la scelta del costruttore utilizzato, e l’utilizzo del metodo getFile(…) per creare un oggetto File utilizzando l’attributo file della richiesta POST. Questo oggetto File sarà poi completamente manipolabile dalla Servlet senza alcun vincolo riguardo la sua provenienza.
. . .
Link utili
| Stampa l'articolo | Questo articolo è stato pubblicato da nerthase il 4 giugno 2010 alle 18:37, ed è archiviato come Guide, HTML & CSS, Informatica & co, Internet, Java. Puoi seguire i commenti a questo post attraverso RSS 2.0. Puoi pubblicare un commento o segnalare un trackback dal tuo sito. |




