Альтернатива устаревшему javax.servlet.http.HttpUtils.parseQueryString? - PullRequest
9 голосов
/ 30 октября 2008

Я хочу проанализировать URL-адрес, чтобы получить коллекцию параметров строки запроса в Java. Чтобы было ясно, мне нужно проанализировать данный URL (или строковое значение объекта URL), а не URL из запроса сервлета.

Похоже, что метод javax.servlet.http.HttpUtils.parseQueryString был бы очевидным выбором, но он устарел.

Есть ли альтернативный метод, который мне не хватает, или он просто устарел без эквивалентной замены / расширенной функции?

Ответы [ 4 ]

5 голосов
/ 30 октября 2008

Я думаю, что идея состоит в том, чтобы вместо этого использовать HttpServletRequest. Для запуска есть методы getParameterMap (), getParameterNames () и getParameterValues ​​().

Существует также метод getParameter (String paramname) для получения значения определенного метода.

Они не делают различий между параметрами строки запроса и параметрами формы, поэтому, если вы намеревались искать строку запроса в отдельности, то, я думаю, это не поможет.

2 голосов
/ 12 мая 2011
2 голосов
/ 30 октября 2008

Ну, так как вы упоминаете, что URL не приходит из запроса сервлета, правильный ответ, как обычно, , это зависит .

Проблема с частью запроса в URL заключается в том, что нет четкой спецификации о том, как обрабатывать дублирование параметров.

Например, рассмотрим следующий URL:

http://www.example.com?param1=value1&param2=value2&param1=value3

Что вы ожидаете в качестве значения для param1? первое значение, последнее, массив? Проблема заключается в том, что, согласно спецификациям, все эти ответы действительны, и поставщик сервера может свободно поддерживать один из этих или других. Некоторые используют нотацию param1 [], чтобы указать, что она должна рассматриваться как массив, но опять же, это не унифицированное решение.

Итак, «лучшее» решение - узнать, как ваш конечный объект обрабатывает параметры, и имитировать поведение с помощью самодельного служебного класса.

0 голосов
/ 30 октября 2008

Насколько я знаю, его нет.

Не должно быть слишком сложно написать его самостоятельно. Самым сложным, я думаю, было бы декодирование имени / значений URL (что на самом деле не так сложно, если подумать), и вы можете использовать java.net.URLDecoder#decodeURL(String,String) для этого.

...