Как я могу обрабатывать POST-запросы multipart/form-data в моем сервлете Java?

Мне очень трудно иметь дело с запросами multipart/form-data с моим сервером приложений Java. Из того, что я узнал, спецификация сервлета 3.0 предоставляет такие методы, как HttpServletRequest.getParts(), которые идеально подходят для обработки данных формы, загруженных в мой сервлет.

Однако этот метод является частью спецификации сервлета 3.0, и мой сервер приложений (Tomcat 6) еще не поддерживает его. Даже с допустимым файлом web.xml 3.0 и библиотеками java EE 6 я получаю следующее исключение при попытке вызвать getParts():

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

Переключение серверов приложений на самом деле не является возможным вариантом для этого проекта. Существуют ли сторонние библиотеки для обработки multipart/form-data в java-сервлетах?


person Nik Reiman    schedule 18.08.2010    source источник
comment
Вы не можете просто скомпилировать библиотеки Java EE 6 и ожидать, что они будут работать с Tomcat 6 — библиотеки Java EE 6 предоставляют только интерфейсы, вам нужен сервер приложений, который фактически реализует эти интерфейсы.   -  person Jesper    schedule 18.08.2010


Ответы (3)


Ознакомьтесь с загрузкой файлов Apache Commons. Он дает вам программный API для анализа составного запроса и повторения его частей по отдельности.

Я использовал его в прошлом для простой обработки нескольких частей, и он отлично справляется со своей задачей, не будучи слишком сложным.

person Andrzej Doyle    schedule 18.08.2010
comment
Да! Это именно то, что мне нужно. - person Nik Reiman; 18.08.2010

Tomcat 6 не поддерживает и не будет поддерживать Спецификацию сервлетов 3.0. Вы должны попытаться сделать это на Tomcat 7, но я не совсем уверен, присутствует ли эта функция в бета-версии, доступной в настоящее время. Однако ожидается, что функциональность будет присутствовать в производственной версии.

Вы можете продолжить использовать Apache Commons FileUpload, как указано в другом ответе, или вы можете использовать Glassfish (в зависимости от текущей фазы и типа вашего проекта).

person Vineet Reynolds    schedule 18.08.2010

когда мы использовали метод post, данные шифруются, поэтому мы должны использовать servletfileupload для получения запрошенных данных, а с помощью FileItemIterator мы можем получить все данные формы.

я уже отвечаю по этой ссылке ">Как обработать форму, отправленную Google Web Toolkit в сервлете

person Divyesh Rupawala    schedule 20.06.2013