2009-10-28 9 views
9

Piszę JSP/servlet i próbuję dostać część kotwicą URI np:Get kotwicę z URI

blabla.rdf#mark 

Jak mogę dostać mój znak z moją prośbę? Oczywiście request.getParameter() nie działa?

Każda pomoc będzie mile widziane.

+0

Oto podobne pytanie dla PHP, z podobnie przegłosowanymi odpowiedziami: http://stackoverflow.com/questions/1032242/how-to-obtain-anchor-part-of-url-after-in-php –

Odpowiedz

19

To nie jest możliwe, ponieważ klienci nie wysyła „część kotwicy” do serwera

Jako przykład, oto dokładna wniosek, że Chrome wygenerowany po złożeniu http://example.com/#foobar (nagrane przy użyciu 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 

See, nie #foobar. Więc nie ma możliwości, aby aplikacja serwera mogła go odczytać.

Możesz zrobić magię JavaScript, aby przechowywać kotwicę w ciasteczku lub ukrytym polu wejściowym lub jakimkolwiek innym voodoo. Ale nigdy nie będzie działać dla żądań, które nie pochodzą z twoich własnych stron. Łatwiej jest zrobić, co jest potrzebne na serwerze, część łańcucha zapytania i użyć zakotwiczenia tylko dla zadań tylko JavaScript - lub użyć go do nawigacji w prostym dokumencie HTML - ale tak jest w latach 90-tych;).

Oto ważna część z wspomnianym dokumencie RFC 1808:

Zauważ, że identyfikator fragment (i „#”, który poprzedza go) jest nie traktowane jako część adresu URL. Jednak ponieważ jest on powszechnie używany w tym samym kontekście ciągów co adres URL, analizator składni musi być w stanie rozpoznać fragment, gdy jest on obecny, i odłożyć go jako część procesu analizy składniowej.

+0

Aby uzyskać więcej informacji , [RFC 1808] (http://www.ietf.org/rfc/rfc1808.txt), które wyjaśniają, dlaczego część kotwicy nie jest wysyłana na serwer. –

0

Rozwiązanie to działa tylko po złożyć przycisk został wciśnięty, ale: można użyć javascript, aby umieścić ukrytą wartość na formularzu, który jest ustawiony na wartość document.location. Dzięki temu dowiesz się dokładnie, co przeglądarka widzi jako Twój adres.

2

Wydaje mi się, że chcesz stworzyć niezwykłą aplikację Ajax i chcesz zastąpić niektóre fragmenty DOM bez przeładowania całej strony. (W przeciwnym razie możesz użyć parametrów zapytania.) Jak podaje sfussenegger, przeglądarka nie przesyła "kotwicy" na serwer. Rozwiązanie jest po stronie klienta.

Javascript window.location.hash podaje informacje o kotwicy. Możesz dołączyć obsługi zdarzeń do zdarzenia window.onload który chwyta window.location.hash i przesyła je do serwera w Ajax XHttpRequest. Łapiesz odpowiedź i tworzysz ją w DOM.

Niestety, to dwa roundtrips klient-serwer.

Więcej informacji na ten temat: ajaxpatterns.