Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Класс для парсинга параметров в URL


Автор: Royan 11.12.2009, 14:41
У вас есть строка: "http://foo.com?p1=aaa&p2=bbb"

Существует ли стандартный класс (ну или хотя бы не очень стандартный), которому можно скормить такую строку а потом методом getParameter("p1") получить значение "aaa" 

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

Спасибо!

Автор: serger 11.12.2009, 16:12
Дак напишите!
В общем - у каждого есть своя небольшая либка для решения таких стандартных но специфических простеньких задач..  smile 

Автор: AntonSaburov 11.12.2009, 16:21
В Spring есть MockHttpServletRequest - правда это из пушки по воробьям. Проще свой класс написать.

Автор: Samotnik 11.12.2009, 19:43
Цитата(Royan @  11.12.2009,  14:41 Найти цитируемый пост)
Существует ли стандартный класс 

наверное нет, да он и не нужен, ведь самому лучше написать, займет это очень мало времени и кода, тем более, что
Цитата(Royan @  11.12.2009,  14:41 Найти цитируемый пост)
Совсем не хочется брать хакерские примеры из интернета и вставлять их в свой аккуратный, чистенький код

 smile  

Автор: aleksandy 15.12.2009, 10:18
Код

String s = "http://foo.com?p1=aaa&p2=bbb";
s = s.substring(s.indexOf('?') + 1);
Pattern p = Pattern.compile("([^=&]+)=([^&]+)");
Matcher m = p.matcher(s);
Map<String, List<String>> params = new HashMap<String, List<String>>();
while (m.find()) {
  String key = m.group(1);
  String value = m.group(2);
  List<String> vals = params.get(key);
  if (vals == null) {
    vals = new ArrayList<String>();
  }
  vals.add(value);
  params.put(key, vals);
}
System.out.println(params);

Автор: Royan 17.12.2009, 17:39
Всем спасибо! Плохо что класса нет, стандартная задача в общем-то


Мой вариант:

Код

private String getUrlParameter(String url, String param) {
        String paramsPart = url.substring(url.indexOf("?") + 1);
        final String fullParam = param + "=";
        final int paramStart = paramsPart.indexOf(fullParam);
        
        /* Such param exists in the URL */
        if(paramStart > -1) {
            String leftPart = paramsPart.substring(paramStart + fullParam.length());
            final int nextParamIdx = leftPart.indexOf('&');
            
            /* There are more params */
            if(nextParamIdx > -1) {
                return leftPart.substring(0, nextParamIdx);
            } else {/* This is last param in the URL */
                return leftPart;
            }
        } else {/* No such param in the URL */
            return "";
        }
    }

Автор: AntonSaburov 17.12.2009, 17:47
Вы не учли, что параметр может содержать не только "хорошие" символы. ТАм же может быть и русские буквы и прочая гадость, которая в URL передается через encoding.

Автор: COVD 18.12.2009, 04:30
Цитата

Плохо что класса нет, стандартная задача в общем-то

Стандартная для веб-серверов. И там это реализовано. Например, в Томкате, в имплементации javax.servlet.ServletRequest. А где еще это требуется, чтобы тянуло на стандартную задачу?

Автор: LSD 18.12.2009, 19:25
Цитата(COVD @  18.12.2009,  04:30 Найти цитируемый пост)
Стандартная для веб-серверов. И там это реализовано. Например, в Томкате, в имплементации javax.servlet.ServletRequest. А где еще это требуется, чтобы тянуло на стандартную задачу? 

HTTP клиент например smile

Автор: COVD 18.12.2009, 21:09
Цитата

HTTP клиент например 

Клиент же сам и формирует эту строку, вставляет туда параметры гет запроса. Для чего ему их обратно извлекать?   

Автор: LSD 21.12.2009, 12:10
Цитата(COVD @  18.12.2009,  21:09 Найти цитируемый пост)
Клиент же сам и формирует эту строку, вставляет туда параметры гет запроса. Для чего ему их обратно извлекать?

- получили HTML, распарсили, вытащили оттуда ссылки и хотим перейти по ним и надо проверить что там указаны верные параметры
- ссылки читаем из файла или получаем извне и надо к ним добавить пару параметров (конечно надо проверить, что их там уже нет)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)