Как мой сервлет может получать параметры из формы multipart/form-data?

У меня есть страница с этим фрагментом кода:

<form action="Servlet" enctype="multipart/form-data">
<input type="file" name="file">
<input type="text" name="text1">
<input type="text" name="text2">
</form>

Когда я использую request.getParameter("text1"); в своем сервлете, он показывает ноль. Как я могу заставить свой сервлет получать параметры?


person Bolaum    schedule 12.03.2012    source источник
comment
jguru.com/faq/view.jsp?EID=1045507   -  person jmj    schedule 12.03.2012
comment
Возможный дубликат Как загрузить файлы в JSP/Servlet?, другими словами: с помощью того же API, с помощью которого вы извлекли файл.   -  person BalusC    schedule 12.03.2012


Ответы (4)


Все параметры запроса встроены в составные данные. Вам придется извлечь их, используя что-то вроде загрузки файлов Commons: http://commons.apache.org/fileupload/

person gorjusborg    schedule 12.03.2012

Pleepleus прав, commons-fileupload — хороший выбор.
Если вы работаете в servlet 3.0+ environment, вы также можете использовать его поддержку составных частей, чтобы легко завершить работу по синтаксическому анализу составных данных. Просто добавьте @MultipartConfig в класс сервлета, после чего вы сможете получать текстовые данные, вызвав request.getParameter(), очень просто.

Учебное пособие. Загрузка файлов с помощью технологии сервлетов Java

person qiangbro    schedule 15.07.2013

Используйте getParts()

person Francisco Paulo    schedule 12.03.2012
comment
Из какого класса getParts()? - person Bolaum; 12.03.2012

Вам нужно отправить параметр следующим образом:

writer.append("--" + boundary).append(CRLF);
writer.append("Content-Disposition: form-data; name=\"" + urlParameterName + "\"" )
                .append(CRLF);
writer.append("Content-Type: text/plain; charset=" + charset).append(CRLF);
writer.append(CRLF);
writer.append(urlParameterValue).append(CRLF);
writer.flush();

А на стороне сервлета обработайте элементы формы:

items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
       item = (FileItem) iter.next();
       if (item.isFormField()) {
          name = item.getFieldName(); 
          value = item.getString();

   }}
person DejanR    schedule 07.11.2013