Пустой список параметров в запросах из .html отправлять формы multipart / form-data в сервлеты 2.5 или 3.0 - PullRequest
1 голос
/ 05 февраля 2011

Моя проблема в том, что у меня есть форма на HTML-странице, которая активирует сервлет с именем CodeSubmission. Сначала я реализовал с помощью API 3.0 (просто используя @WebServlet("/CodeSubmission")), но всякий раз, когда сервлет был активирован, запрос приходил без каких-либо параметров. Поэтому я решил попробовать и использовать API 2.5 в совершенно новом проекте (вручную добавив сервлет в файл web.xml), но опять же, при каждом вызове сервлета запрос приходит без каких-либо параметров.

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

Вот код HTML-формы:

<form action="CodeSubmission" method="POST" enctype="multipart/form-data">
<label for="compiler">Compilador:</label>
<select id="compiler">
    <option value="c">C</option>
    <option value="c++">C++</option>
    <option value="scala7">Scala 2.7.7</option>
    <option value="scala8">Scala 2.8.1</option>
    <option value="java5">Java 1.5</option>
    <option value="java6">Java 1.6</option>
</select>
<br /> 
<label for="code">Arquivo:</label>
<input id="code" type="file" size=80 />
<br /> 
<input type="submit" value="Enviar" />
</form>

А вот тестовый код для проверки параметров:

    System.out.println("Length: "+request.getContentLength());
    System.out.println("Content Type: "+request.getContentType());
    System.out.println("Method: "+request.getMethod());
    Enumeration<String> attributeNames = request.getAttributeNames();
    System.out.println("Request Attributes");
    while (attributeNames.hasMoreElements()) {
        String name = attributeNames.nextElement();
        System.out.println(name + ": " + request.getAttribute(name));
    }
    Enumeration<String> paramNames = request.getParameterNames();
    System.out.println("Request Parameters");
    while (paramNames.hasMoreElements()) {
        String name = paramNames.nextElement();
        System.out.println(name + ": " + request.getParameter(name));
    }

Перечисление request.getParameterNames () всегда имеет размер 0. Вот что печатается в консоли, когда я нажимаю кнопку «Enviar» после загрузки файла и выбора опции, используя Servlet 2.5:

Length: 44
Content Type: multipart/form-data; boundary=----WebKitFormBoundary4E3NYbsqXZZMWwcl
Method: POST
Request Attributes
Request Parameters

1 Ответ

2 голосов
/ 06 февраля 2011

multipart/form-data имеет другую схему кодирования для параметров.Для servelt 2.5 вы должны использовать commons-fileupload.С сервлетом 3.0 вы все еще можете использовать его или использовать request.getPart(..).Вы также должны аннотировать свой сервлет @MultiPartConfig

...