Каково поведение getParameter для действий post и get?

У меня есть сервлет Java со строкой запроса URL с такими инструкциями

http://hostname/servet?param1=value1&param2=value2

Я также структурирую doPost/doGet следующим образом.

public void doPost(HttpServletRequest req, HttpServletResponse res) {
        try {
            doGet(req, res);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

public void doGet(HttpServletRequest req, HttpServletResponse res) {
        try {
            String sParam1 = req.getParameter("param1")
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Я могу получить доступ к каждому параметру queryString через getParameter() для действий GET. Но когда я пытаюсь получить доступ к той же строке запроса через getParameter() для действий POST, возвращаемое значение равно NULL.

Итак, я хотел бы подтвердить такое поведение getParameter для действий POST и GET. То есть getParameter НЕ возвращает параметры queryString для действий POST? И нужно ли мне вручную анализировать строку запроса для их обработки в случае действия POST?


person angryITguy    schedule 23.07.2013    source источник
comment
Я вижу, что это связано, но я ищу конкретный ответ на этот вопрос в отношении управления параметрами сервлета. Хотя ссылка полезная.   -  person angryITguy    schedule 23.07.2013
comment
мне нужно вручную анализировать строку запроса, чтобы обработать их в случае действия POST. В случае публикации они не будут добавлены к URL-адресу, поэтому нет способа анализа.   -  person kosa    schedule 23.07.2013
comment
А.. Так это игнорируется? Возвращали ли старые реализации контейнеров сервлетов строку запроса? #смущенный   -  person angryITguy    schedule 23.07.2013
comment
Этот вопрос был помечен как дубликат, но я не согласен. Связанный с этим вопрос не дает явного ответа на мой вопрос здесь о поведении doGet и doPost для getParameter и о том, доступна ли строка запроса из транзакции POST. Попросили открыть заново.   -  person angryITguy    schedule 24.07.2013


Ответы (1)


Для метода GET параметры отправляются как часть URL (строка запроса), для метода POST параметры отправляются как часть тела, поэтому в случае POST вы не получаете параметры, так как они ищутся в тело не в URL.

мне нужно вручную анализировать строку запроса, чтобы обработать их в случае действия POST?

Да, если вы отправляете строку запроса, но используете метод POST, вам придется самостоятельно анализировать строку запроса, если только вы не соблюдаете стандарты и не отправляете параметры внутри тела, а не в URL-адресе.

person morgano    schedule 23.07.2013
comment
Я обновил свой вопрос, пожалуйста, не стесняйтесь просмотреть свой ответ. - person angryITguy; 23.07.2013
comment
Получал ли getParameter когда-либо значения строки запроса для почтовых действий? Я работаю над очень старым кодом, и он недавно перестал работать. - person angryITguy; 23.07.2013
comment
В JavaEE API не указано, что произойдет, если вы используете getQueryString() и не используют метод GET, я думаю, вы получите нулевое значение, но попробуйте, может быть, я ошибаюсь - person morgano; 23.07.2013
comment
Причина, по которой я спросил о поведении POST с getParameter, заключается в том, что я работаю с IBM JVM, и более старые версии фактически получают параметры Querystring из POST с getParameter, последние версии (т.е. 1.6) теперь применяют правило, совместимое с Oracle (урожденное Sun) JVM. Возможно, JVM IBM была ошибкой или просто не соответствовала требованиям. - person angryITguy; 24.07.2013
comment
@giulio: Я предполагаю, что это может быть несоответствием. Каждый из этих реализаторов имеет свои собственные функции, добавленные поверх спецификации. - person kosa; 24.07.2013