среда, 6 ноября 2013 г.

Заметка про Сервлеты: getParameter/getParameterMap и getInputStream

Невнимательное чтение документации, а также принцип Гейзенберга попортили немало крови. Поэтому заношу сюда.

А всё ведь просто оказалось:
if the parameter information came in as encoded POST data, it may not be available if the POST data has already been read manually using the getReader() or getInputStream() method of ServletRequest (because POST data can be read only once).

Что на человеческом означает - если http-вызов осуществляется методом POST, и при этом параметры передаются в данных, т.е. после пропущенной строки (с заголовком application/x-www-form-urlencoded), а не в QueryString, то ВЫЗОВ getParameterValue(s)/getParameterMap ОБНУЛЯЕТ InputStream. Причём даже, если этот вызов был сделан в дебаггере (на что я и наступил).
Аналогично и в обратную сторону: если сначала вызвать getInputStream(), то параметров в getParameter* не будет.