2009-10-28 2 views
9

Ich bin ein JSP/Servlet zu schreiben und ich versuche, die der Ankerteil des URI beispiels zu erhalten:Erhalten Anker von URI

blabla.rdf#mark 

Wie erhalte ich meine Marke von meiner Anfrage? Offensichtlich funktioniert request.getParameter() nicht?

Jede Hilfe wäre willkommen.

+0

Hier ist eine ähnliche Frage für PHP, mit einer ähnlich hochgestellten Antworten: http://stackoverflow.com/questions/1032242/how-to-obtain-anchor-part-of-url-after-in-php –

Antwort

19

dies nicht möglich ist, wie Clients mit dem Server, hier

Als Beispiel nicht den „Ankerteil“ senden ist die genaue Anforderung, die http://example.com/#foobar nach der Einreichung (aufgenommen mit Wireshark) erzeugte Chrome:

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 

Siehe, keine #foobar. Es gibt also keine Möglichkeit, wie eine Serveranwendung es lesen kann.

Sie können JavaScript-Magie verwenden, um den Anker in einem Cookie oder in einem versteckten Eingabefeld oder Voodoo zu speichern. Aber es wird niemals für Anfragen funktionieren, die nicht von Ihren eigenen Seiten stammen. Es ist einfacher, alles, was Sie brauchen, auf dem Server Teil der Abfragezeichenfolge zu machen und den Anker nur für JavaScript-only-Aufgaben zu verwenden - oder verwenden Sie es, um in einem einfachen HTML-Dokument zu navigieren - aber das ist so 90er;).

Hier ist der wichtige Teil aus dem genannten RFC 1808:

Beachten Sie, dass das Fragment Identifier (und die „#“ dass es vorangeht) ist nicht Teil der URL berücksichtigt. Da es jedoch häufig innerhalb desselben Zeichenfolgenkontexts wie eine URL verwendet wird, muss ein Parser in der Lage sein, das Fragment zu erkennen, wenn es vorhanden ist, und es als Teil des Analyseprozesses als Teil von beiseite zu legen.

+0

Für Informationen , [RFC 1808] (http://www.ietf.org/rfc/rfc1808.txt), die erklären, warum der Ankerteil nicht an den Server gesendet wird. –

0

würde diese Lösung nur nach Arbeit eines Submit-Button gedrückt wurde, aber: Sie Javascript verwenden könnten einen versteckten Wert auf dem Formular zu platzieren, die auf den Wert von document.location eingestellt ist. Das würde Ihnen genau sagen, was der Browser als Ihre Adresse sieht.

2

Ich denke, Sie möchten eine Bookmark-fähige Ajax-Webanwendung erstellen und bestimmte Fragmente des DOM ersetzen, ohne die ganze Seite neu zu laden. (Sonst könnten Sie Abfrageparameter verwenden.) Wie sfussenegger erwähnt, überträgt der Browser 'Anker' nicht an den Server. Die Lösung ist auf der Client-Seite.

Javascript window.location.hash gibt die Ankerinformationen. Sie können einen Ereignishandler an das Ereignis window.onload anhängen, das window.location.hash ergreift und in einem Ajax XHttpRequest an den Server überträgt. Sie fangen die Antwort und bauen sie in das DOM ein.

Leider sind es zwei Client-Server-Roundtrips.

Mehr dazu unter ajaxpatterns.