Получение параметров хеширования из запроса URL

У меня есть такой url – http://www.coolsite.com/daily-plan/#id=1 Какой самый простой способ проанализировать эту строку и прочитать значение hashа (значение после # id =)? спасибо

На стороне клиента (т.е. с 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-адрес после входа.

  1. Пользователь, не прошедший проверку подлинности, запрашивает http://server.com/ #/xyz (все, начиная с «#» и далее, не отправляется на сервер).

  2. Весь сервер знает, что пользователь хочет http://server.com/ и что они не аутентифицированы. Сервер перенаправляет пользователя в форму входа.

  3. Вот умный бит: клиент по-прежнему ждет своего первоначального запроса, поэтому, если сервер содержит скрытый элемент в форме входа с некоторым JS, который ссылается на window.location.href, он может захватить полный URL-адрес исходного запроса в комплекте с анкерная часть:

     

  4. Пользователь аутентифицирует себя, и исходный 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

Interesting Posts
Давайте будем гением компьютера.