2009-12-01 2 views
1

Прежде всего, моя Java не поддается ржавлению, и я никогда не делал JSP или сервлеты, но я пытаюсь помочь кому-то решить проблему.Ограничение размера поля HTTP Request (POST) & Request.BinaryRead в JSP

Форма, предоставляемая JavaScript, публикуется на JSP. Некоторые поля в этой форме имеют размер более 100 КБ. Однако, когда поле формы извлекается со стороны JSP, значение поля усекается до 100 КБ.

Теперь я знаю, что аналогичная проблема возникает в ASP Request.Form, которую можно получить с помощью Request.BinaryRead. Есть ли эквивалент в Java?

Или, альтернативно, есть ли настройка в Websphere/Apache/IBM HTTP Server, которая затрагивает ту же проблему?

+0

Без кода не сообщается, что может быть неправильным. –

ответ

0

Мы решили проблему. Ничего общего с настройками веб-сервера, как выяснилось, и ничего не было усечено в сообщении.

Поле формы перед публикацией разделялось на фрагменты размером 102399 байт с помощью JavaScript, и каждый фрагмент был добавлен в поле формы в качестве значения, поэтому он заканчивался массивом значений. Request.Form() автоматически объединяет эти значения для воспроизведения единственной гигантской строки, но Java getParameter() не делает этого. Использование getParameterValues ​​() и перестройка строки из возвращаемых значений, однако, сделали трюк.

1

Поскольку размещенный запрос должен храниться в памяти контейнером сервлета для обеспечения функциональности, требуемой API ServletRequest, большинство контейнеров сервлетов имеют настраиваемый предел размера для предотвращения DoS-атак, поскольку в противном случае небольшое количество фиктивных клиентов могло бы вызывают у сервера нехватку памяти.

Немного странно, если WebSphere молча усекает запрос, а не ошибочно, но если это причина вашей проблемы, вы можете найти параметры конфигурации here in the WebSphere documentation.

0

Вы можете использовать getInputStream (необработанные байты) или getReader (декодированные символьные данные) для чтения данных из запроса. Примечание how this interacts с чтением параметров. Если вы не хотите использовать сервлет, взгляните на запрос Filter на номер wrap.

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