Альтернатива устаревшему javax.servlet.http.HttpUtils.parseQueryString?

StackOverflow https://stackoverflow.com/questions/248938

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Например, рассмотрим URL-адрес, подобный этому:

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

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top