Frage

Ich schreibe ein JSP/Servlet und versuche, den Ankerteil des URI abzurufen, z. B.:

blabla.rdf#mark

Wie erhalte ich meine Note für meine Anfrage?Offensichtlich request.getParameter() funktioniert nicht?

Jede Hilfe wäre willkommen.

War es hilfreich?

Lösung

Dies ist nicht möglich, da Clients den „Ankerteil“ nicht an den Server senden

Als Beispiel sehen Sie hier die genaue Anfrage, die Chrome nach dem Absenden generiert hat http://example.com/#foobar (aufgezeichnet mit 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

Sehen Sie, kein #foobar.Es gibt also keine Möglichkeit, dass eine Serveranwendung es lesen kann.

Sie könnten etwas JavaScript-Magie anwenden, um den Anker in einem Cookie oder in einem versteckten Eingabefeld oder was auch immer Sie mögen, zu speichern.Bei Anfragen, die nicht von Ihren eigenen Websites stammen, funktioniert dies jedoch nie.Es ist einfacher, alles, was Sie auf dem Server benötigen, zum Teil der Abfragezeichenfolge zu machen und den Anker nur für reine JavaScript-Aufgaben zu verwenden – oder ihn zum Navigieren in einem einfachen HTML-Dokument zu verwenden – aber das ist so 90er-Jahre ;).

Hier ist der wichtige Teil aus dem erwähnten RFC 1808:

Beachten Sie, dass die Fragmentkennung (und das "#", das ihm vorausgeht) nicht als Teil der URL angesehen wird.Da es jedoch häufig im selben String -Kontext 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 Parsingprozesses beiseite legen.

Andere Tipps

Ich denke, Sie möchten ein Lesezeichen-AJAX-Webantrag erstellen und bestimmte Fragmente des DOM ersetzen, ohne die volle Seite neu zu laden. (Andernfalls könnten Sie Abfrageparameter verwenden.) AS sfussenegger Erwähnungen, Browser überträgt nicht 'Anker'auf den Server. Die Lösung ist auf der Client-Seite.

JavaScript window.location.hash gibt den Ankerinformationen. Sie können einen Event -Handler an die anhängen window.onload Ereignis, das sich greift window.location.hash und überträgt es in einem AJAX XHTTPrequest an den Server. Sie fangen die Antwort und bauen sie in den DOM auf.

Leider sind es zwei Roundtrips von Client-Server.

Mehr dazu bei Ajaxpatterns.

Diese Lösung würde nur funktionieren nach Es wurde eine Sub -Taste gedrückt, aber: Sie könnten JavaScript verwenden, um einen versteckten Wert in Ihrem Formular zu platzieren, der auf den Wert der Dokumente festgelegt ist. Das würde Ihnen genau sagen, was der Browser als Ihre Adresse betrachtet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top