2010-08-18 4 views
6

Mi sto divertendo molto a gestire le richieste multipart/form-data con il mio server applicazioni java. Da quanto ho scoperto, la specifica del servlet 3.0 fornisce metodi come HttpServletRequest.getParts(), che sarebbe l'ideale per l'elaborazione dei dati del modulo caricati sul mio servlet.Come posso gestire le richieste POST multipart/form-data nel mio servlet java?

Tuttavia, questo metodo fa parte delle specifiche della servlet 3.0 e il mio application server (Tomcat 6) non lo supporta ancora. Anche con un file di 3.0 web.xml valido e il Java EE 6 librerie, ottengo la seguente eccezione quando si cerca di chiamare getParts():

java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getParts()Ljava/util/Collection; 

commutazione application server non è davvero un'opzione fattibile per questo progetto. Sono disponibili librerie di terze parti per l'elaborazione di multipart/form-data all'interno di servlet java?

+2

Non si può semplicemente compilare contro i Java EE 6 librerie e si aspettano di lavorare con Tomcat 6 - il Java EE 6 librerie forniscono solo le interfacce, è necessario un server app che implementa effettivamente quelle interfacce. – Jesper

risposta

11

Check out Apache Commons Fileupload. Ti fornisce un'API programmatica per analizzare una richiesta multipart e iterare singolarmente attraverso le sue parti.

L'ho usato in passato per l'elaborazione multipart diretta e fa il lavoro bene senza essere eccessivamente complicato.

+0

Sì! Questo è esattamente ciò di cui avevo bisogno. –

5

Tomcat 6 does not and will not support Servlet Specification 3.0. Dovresti provare a farlo su Tomcat 7, ma non sono sicuro che questa funzionalità sia presente nella versione beta attualmente disponibile. La funzionalità dovrebbe essere presente nella versione di produzione.

È possibile continuare ad utilizzare FileUpload di Apache Commons come postato nell'altra risposta oppure utilizzare Glassfish (in base alla fase e al tipo corrente del progetto).

1

quando abbiamo usato il metodo post che i dati sono crittografati, quindi dobbiamo usare servletfileupload per ottenere i dati richiesti e utilizzando FileItemIterator possiamo ottenere tutti i dati dei moduli.

ho già risposto su questo link How to process a form sent Google Web Toolkit in a servlet