Получить привязку от URI - PullRequest
       44

Получить привязку от URI

9 голосов
/ 28 октября 2009

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

blabla.rdf#mark

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

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

Ответы [ 3 ]

19 голосов
/ 28 октября 2009

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

Например, вот точный запрос, сгенерированный 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, парсер должен иметь возможность распознать фрагмент, когда он присутствует, и отложить его как часть процесс разбора.

2 голосов
/ 11 августа 2010

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

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

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

Подробнее об этом на ajaxpatterns .

0 голосов
/ 28 октября 2009

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

...