Получение параметров хеширования из запроса URL
У меня есть такой url – http://www.coolsite.com/daily-plan/#id=1 Какой самый простой способ проанализировать эту строку и прочитать значение hashа (значение после # id =)? спасибо
- Возможна ли сумма ArrayList без цикла
- Использование шаблона проектирования Singleton для SQLiteDatabase
- Проблемы с импортом проекта в Android Studio в отношении ActionBarSherlock
- HashMap с несколькими значениями под одним и тем же ключом
- Как установить блок для Paint.setTextSize ()
- Исходные ресурсы по сравнению с базой данных SQLite
- Переменные среды для установки Java
- Какой самый простой способ получить текущий день недели в Android?
На стороне клиента (т.е. с JavaScript) вы можете проверить window.location.hash
чтобы получить hash. На стороне сервера общий ответ «невозможно», поскольку хеш не отправляется в запрос на сервер.
Обновление: Возможно, я неправильно понял вопрос. Мой ответ о том, как получить hash-часть URL-адреса в браузере или на стороне сервера во время обработки запроса, а не о обработке строк.
Upd2: ответьте на комментарий здесь, потому что он не соответствует комментариям.
Как это работает, когда пользователь нажимает на ваши навигационные ссылки?
Я предполагаю, что хеш изменен, а соответствующий контент загружается через запрос AJAX из веб-службы или REST.
Например, если ваш пользователь имеет URL http://www.example.com в своем браузере, и на этой странице отображается список категорий продуктов. Пользователь нажимает одну категорию и URL-адрес на http://www.example.com/#id=5, а продукты из этой категории (с идентификатором = 5) загружаются через AJAX и отображаются на странице. Нет обратной передачи, только частичное обновление страницы.
Это близко к вашему сценарию?
Теперь вы хотите, чтобы пользователь вставлял / вводил http://www.example.com/#id=5 непосредственно в адресную строку браузера и перешел непосредственно к списку продуктов этой категории.
Но / # id = 5 не отправляется на сервер с запросом браузером, поэтому нет способа получить это значение на стороне сервера, и вы ничего не можете с этим поделать, поскольку браузер решил не отправлять эти данные, а вы не иметь его на стороне сервера.
В нашем проекте мы используем решение, когда сервер возвращает только общий код страницы / html, то есть заголовок, нижний колонтитул, без основной / центральной части страницы. Затем есть код JavaScript, который выполняется сразу после загрузки этого обычного HTML-кода. Он берет window.location.hash
и отправляет его на веб-службу через AJAX, а веб-служба возвращает контент (HTML) для основной части страницы.
new URI("http://.../abc#xyz").getFragment();
См. Javadocs для URI
ЗАМЕНИТЕ ‘#’ с помощью?? при parsingе URL. Проверьте код ниже
String url = "http://www.coolsite.com/daily-plan/#id=1"; String urlNew = url.replace("#", "?"); String id = Uri.parse(urlNew).getQueryParameter("id");
String url = " http://www.coolsite.com/daily-plan/#id=1"; int sharpPos = url.indexOf('#'); String q = null; if (sharpPos >= 0) { q = url.substring(sharpPos); }
Конечно, вы можете использовать различные методы строковой манипуляции, включая регулярные выражения.
Но на самом деле ваш пример странный. Обычно параметры URL передаются после вопросительного знака. В этом случае вы можете просто использовать стандартный class URL:
String q = new URL(" http://www.coolsite.com/daily-plan?id=1").getQuery();
что вы используете для этого?
Если вы используете jsp или servlet, то вам будет полезно
if (request.getParameter("#id") == null) { out.println("Please enter your name."); } else { out.println("Hello "+request.getParameter(i)+"!"); }
Если вы используете javascript для него, следующая функция будет полезна вам
function getURLParameters() { var sURL = window.document.URL.toString(); if (sURL.indexOf("?") > 0) { var arrParams = sURL.split("?"); var arrURLParams = arrParams[1].split("&"); var arrParamNames = new Array(arrURLParams.length); var arrParamValues = new Array(arrURLParams.length); var i = 0; for (i=0;i
Вот как фиксировать привязные ссылки. Работает во всех веб-фреймворках.
Я буду использовать примерный сценарий, чтобы проиллюстрировать: допустим, нам нужно захватить глубокий URL http://server.com/ #/xyz, запрошенный не прошедшим проверку пользователем, чтобы они могли быть перенаправлены на этот глубокий URL-адрес после входа.
-
Пользователь, не прошедший проверку подлинности, запрашивает http://server.com/ #/xyz (все, начиная с «#» и далее, не отправляется на сервер).
-
Весь сервер знает, что пользователь хочет http://server.com/ и что они не аутентифицированы. Сервер перенаправляет пользователя в форму входа.
-
Вот умный бит: клиент по-прежнему ждет своего первоначального запроса, поэтому, если сервер содержит скрытый элемент в форме входа с некоторым JS, который ссылается на window.location.href, он может захватить полный URL-адрес исходного запроса в комплекте с анкерная часть:
-
Пользователь аутентифицирует себя, и исходный URL-адрес отправляется с помощью POST. Затем сервер может передать пользователю оригинальный глубокий URL-адрес.
Если URL-адрес будет таким же, как вы пишете и не содержит anythins else, тогда ваш код на Java поможет вам
String val = "http://www.coolsite.com/daily-plan/#id=1"; System.out.println(val.split("#id")[1]);
Не забудьте проверить значение null.
PS Если вы используете сервлет, вы можете получить этот параметр из request.getAttribute («id»).
С наилучшими пожеланиями, Psycho