Как отмечает EJP, этот подход используется, когда данные POST запроса содержат не что иное, как параметры запроса.
Итак ...
Когда я должен использовать это, чтобы получить параметр, как о request.getParameter()?
Вы можете использовать его, когда вы ожидает запрос POST тела, чтобы быть документом. Но это может быть недостаточно, как объясняется ниже.
Этот код не является особенно эффективным, и что он может быть проблематичным в других отношениях.
На стороне эффективности, код использует BufferedReader
И чтения в большой (-ish) буфер символов перед передачей в StringBuilder
.
Использование BufferedReader
и char[]
отчасти бессмысленно. Если вы собираетесь делать блок-чтения, лучше читать с базового Reader
.
Чтение всех данных POST в StringBuilder
(без ограничения его длины) может оставить вас открытыми для атак типа «отказ в обслуживании», направленных на запуск OOME. (Вы получите ту же проблему, если длинные запросы являются законными ...).
Есть также большие проблемы:
должен обрабатывать данные POST как поток символов, а пытается создать отдельную строку?
Правильно ли рассматривать данные POST как символы? (См. Заголовок Content-type.)
Используете ли вы правильную схему кодирования для декодирования символов? (См. Заголовок Content-type и т. Д.)
Если вы используете заголовок Content-length в качестве подсказки для определения размеров и/или соблюдения ограничений размера запроса.
Коротко говоря, код, о котором вы нас спрашиваете, выглядит слишком упрощенным, чтобы быть общим решением проблемы чтения данных POST.
Если пост стоимостных данных много памяти, она будет отправлена на две части или больше?
Наверное, нет. Действительно, если вы (разработчик webapp) не реализуете схему, которая позволяет стороне клиента отправлять более мелкие куски, у клиента может не быть выбора, кроме как отправить один большой документ в данные POST. Конечно, в зависимости от того, что представляет собой документ и как его нужно обрабатывать, вы можете не нуждаться в, чтобы собрать его все в памяти. Другое дело, что вы не должны полагаться на то, что клиент «делает правильную вещь» в терминах того, что он вам отправляет. Ваш сервер должен защитить себя в какой-то момент.
Предлагаю обработать текст при его чтении, а не копировать данные из одного буфера, в другой буфер и обрабатывать их. Он более эффективен и делает код чище. –