Получение параметров хеширования из запроса 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

  • Обслуживание статических файлов со встроенным Jetty
  • Android Thread для таймера
  • Создание с помощью каталога Intellij 2017.2 / out дублирует файлы в каталоге / build
  • Использование сертификатов клиент / сервер для двухсторонней аутентификации SSL-сокета на Android
  • Можем ли мы создать экземпляр абстрактного classа?
  • Как исправить android.os.NetworkOnMainThreadException?
  • Должен ли я строго избегать использования перечислений на Android?
  • Что такое синтаксис?
  • Android Studio не удалось найти версию, совместимую с com.android.support:appcompat-v7:+
  • Как конвертировать 24-х часовой формат в формат до 12 часов?
  • WebView и Cookies на Android
  • Interesting Posts

    Почему gmail считает, что почта, которую отправляет мой сервер, является спамом?

    Попробуйте использовать Window.FEATURE_CUSTOM_TITLE, но получило исключение: вы не можете комбинировать собственные заголовки с другими функциями названия.

    Интеграция дизайна материалов Lite с помощью Angular2

    Как создать пустой файл из командной строки в Windows

    Excel (2010) HYPERLINK: как вызвать файл с аргументами командной строки и пробелами в пути?

    JPA @ManyToOne с CascadeType.ALL

    Xcode 4: запустить тесты из командной строки (xcodebuild)?

    Динамически добавленные элементы управления в Asp.Net

    Параметры матрицы URL по сравнению с параметрами запроса

    Кэширование ответа HTTP

    Использование планировщика GWT

    Получить int из String, также содержащий буквы, в Java

    Как получить цвет из шестнадцатеричного цветового кода с помощью .NET?

    Соответствие поля массива, которое содержит любую комбинацию предоставленного массива в MongoDB

    Как работает Gson TypeToken?

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