Вопрос

Я пишу JSP / Servlet и пытаюсь получить якорную часть URI, например:

blabla.rdf#mark

Как мне получить оценку по моему запросу? Очевидно, request.getParameter () не работает?

Любая помощь будет приветствоваться.

Это было полезно?

Решение

Это невозможно, поскольку клиенты не отправляют " якорную часть " на сервер

В качестве примера приведем точный запрос, сгенерированный Chrome после отправки http://example.com/#foobar (записанного с помощью Wireshark):

GET / HTTP/1.1
Host: example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.3 (KHTML, like Gecko) Chrome/4.0.223.11 Safari/532.3
Cache-Control: max-age=0
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
If-None-Match: "b300b4-1b6-4059a80bfd280"
If-Modified-Since: Tue, 15 Nov 2005 13:24:10 GMT

Видите, нет #foobar. Так что серверное приложение никак не сможет его прочитать.

Вы можете использовать магию JavaScript, чтобы сохранить привязку в файле cookie, в скрытом поле ввода или в любом другом вуду. Но это никогда не будет работать для запросов, которые не исходят от ваших собственных сайтов. Проще сделать все, что вам нужно, в серверной части строки запроса и использовать привязку только для задач только для JavaScript - или использовать ее для навигации внутри простого HTML-документа - но это так, 90-е годы;).

Вот важная часть из упомянутого RFC 1808:

  

Обратите внимание, что идентификатор фрагмента (и знак "#", предшествующий ему)   не считается частью URL. Тем не менее, так как он обычно используется   в том же строковом контексте, что и URL, парсер должен иметь возможность   распознать фрагмент, когда он присутствует, и отложить его как часть   процесс разбора.

Другие советы

Полагаю, вы хотите создать закладочное веб-приложение Ajax и заменить некоторые фрагменты DOM без перезагрузки полной страницы. (В противном случае вы можете использовать параметры запроса.) Как упоминает sfussenegger , браузер не передает « якорь » на сервер. Решение на стороне клиента.

Javascript window.location.hash предоставляет информацию о привязке. Вы можете добавить обработчик события к событию window.onload , который захватывает window.location.hash и передает его на сервер в Ajax XHttpRequest. Вы ловите ответ и встраиваете его в DOM.

К сожалению, это два обхода клиент-сервер.

Подробнее об этом можно узнать на ajaxpatterns .

Это решение будет работать только после нажатия кнопки отправки, но: вы можете использовать javascript для размещения скрытого значения в вашей форме, которое установлено в значение document.location. Это точно скажет вам, что браузер видит в качестве вашего адреса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top