Чтение параметров URL, когда запрос POST с данными поступает в сервлет Java

1

В сервлетах Java вы читаете JSON из запроса POST, например, через

new JSONObject(toString(httpRequest.getInputStream()))

Теперь, помимо JSON, я хотел бы указать параметры в URL-адресе, их можно прочитать через:

httpRequest.getParameterMap().get("someURLParam")

Все работает (я использую почтовые запросы AJAX и причал для сервера)

НО

Я обеспокоен и смущен, если и когда эти два метода влияют друг на друга как javadocs из javax.​servlet.​ServletRequest.getParamter(String) говорит:

Если данные параметров были отправлены в тело запроса, например, с запросом HTTP POST, то чтение тела напрямую через ServletRequest.getInputStream или ServletRequest.getReader может помешать выполнению этого метода.

Что это значит в моем случае? Или они только мешают, если тип контента x-www-form-urlencoded? Или только при использовании getParameter и метода getParameterMap в порядке?

  • 0
    Я изучил исходные тексты, и они действительно вызывают getInputStream только внутри getParameterMap, если: закодированное содержимое формы && еще не прочитано && (положить или опубликовать). Но так ли это для всех контейнеров, где это указано?
  • 0
    В этом ответе говорится, что это только для опубликованных данных, но не поддерживает это заявление с какими-либо официальными документами ... stackoverflow.com/a/3831791/438742
Показать ещё 2 комментария
Теги:
servlets
jetty

1 ответ

0

Если вы используете только getParameter/getParameterMap, вы будете в порядке. Это потому, что за кулисами эти методы могут вызвать getInputStream. Спецификация говорит МАЙ, потому что это до реализации, поэтому поведение может варьироваться от одного контейнера к другому.

Если ваш контент не закодирован в форме или вы обрабатываете запрос GET и т.д., GetParameter/getParameterMap нужно только получить параметры из строки запроса, поэтому имеет смысл, что Jetty не будет читать тело в этих случаях.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню