Я пишу JSP/Servlet и пытаюсь получить якорную часть URI, например:
blabla.rdf#mark
Как мне получить оценку за мой запрос? Очевидно, что request.getParameter()
не работает?
Любая помощь приветствуется.
Я пишу 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. Это точно скажет вам, что браузер видит как ваш адрес.