Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Класс для парсинга параметров в URL 
:(
    Опции темы
Royan
Дата 11.12.2009, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



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

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

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

Спасибо!


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
serger
Дата 11.12.2009, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 1
Всего: 5



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


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
AntonSaburov
Дата 11.12.2009, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



В Spring есть MockHttpServletRequest - правда это из пушки по воробьям. Проще свой класс написать.
PM MAIL WWW ICQ   Вверх
Samotnik
Дата 11.12.2009, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



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

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

 smile  
PM MAIL   Вверх
aleksandy
Дата 15.12.2009, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 260
Регистрация: 17.12.2006

Репутация: 4
Всего: 5



Код

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);


Это сообщение отредактировал(а) aleksandy - 15.12.2009, 10:37
PM   Вверх
Royan
Дата 17.12.2009, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



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


Мой вариант:

Код

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 "";
        }
    }



--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
AntonSaburov
Дата 17.12.2009, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Вы не учли, что параметр может содержать не только "хорошие" символы. ТАм же может быть и русские буквы и прочая гадость, которая в URL передается через encoding.
PM MAIL WWW ICQ   Вверх
COVD
Дата 18.12.2009, 04:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

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

Стандартная для веб-серверов. И там это реализовано. Например, в Томкате, в имплементации javax.servlet.ServletRequest. А где еще это требуется, чтобы тянуло на стандартную задачу?
PM MAIL   Вверх
LSD
Дата 18.12.2009, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



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

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


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
COVD
Дата 18.12.2009, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

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

Клиент же сам и формирует эту строку, вставляет туда параметры гет запроса. Для чего ему их обратно извлекать?   
PM MAIL   Вверх
LSD
Дата 21.12.2009, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



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

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


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0559 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.