отправка данных в сервлет с использованием httpclient - PullRequest
0 голосов
/ 10 ноября 2011

Я пытаюсь опубликовать 2 поля, id и данные, в сервлет, используя HttpClient. Проблема в том, что если длина поля данных меньше 1 МБ или около того, сервлет получит то, что я написал. Но если длина поля данных превышает 1 МБ или около того, сервлет получит значение NULL для всех полей. Что мне здесь не хватает? Спасибо.

Вот пример данных, которые я публикую в сервлете:

id = 12312123123123

data = содержимое файла, закодированного в base-64

Вот метод, который я использую для отправки данных в сервлет.

    private byte[] post(String aUrl,
                        Map<String,String> aParams,
                        String aCharsetEnc,
                        int aMaxWaitMs) throws Exception
{
    PostMethod post = null;
    try
    {
        HttpClient client = new HttpClient();
        post = new PostMethod(aUrl);
        post.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=" + aCharsetEnc);           

        for (String key : aParams.keySet())
        {
            post.addParameter(key, aParams.get(key));
        }

        final int code = client.executeMethod(post);
        if (code == HttpStatus.SC_NO_CONTENT || code == HttpStatus.SC_NOT_FOUND)
        {
            return null;
        }
        else if (code != HttpStatus.SC_OK)
        {
            throw new HttpException("Error code " + code + " encountered.");
        }

        InputStream stream = post.getResponseBodyAsStream();
        if (stream != null)
        {
            return BlobHelper.readBytes(stream);
        }
        return null;
    }
    finally
    {
        if (post != null)
        {
            post.releaseConnection();
        }
    }
}

Вот метод сервлета.

public void doPost(HttpServletRequest aReq, HttpServletResponse aResp)
    throws ServletException, IOException
{
    setNoCache(aResp);
    aResp.setContentType("text/plain");

    try
    {
        final String id = aReq.getParameter(PARAM_ID);
        final String dataStr = aReq.getParameter(PARAM_DATA);


        if (log().isDebugEnabled())
        {
            log().debug("id=" + id);
            log().debug("data=" + dataStr);
        }
     }
     catch (Exception e)
     {
     }
}   

1 Ответ

1 голос
/ 10 ноября 2011

Обычно контейнеры сервлета имеют параметр максимального размера сообщения.

Для Tomcat вы можете выполнить шаги, описанные здесь (они должны быть похожи для других серверов приложений) -

Существует ли максимальный размер содержимого параметра POST?

...