2009-10-28 4 views
9

J'écris une page JSP/Servlet et je suis en train de faire la partie d'ancrage de l'URI par exemple:Obtenir l'ancre de URI

blabla.rdf#mark 

Comment puis-je obtenir ma marque de ma demande? De toute évidence request.getParameter() ne fonctionne pas?

Toute aide serait la bienvenue.

+0

Voici une question similaire pour PHP, avec des réponses également mises à jour: http://stackoverflow.com/questions/1032242/how-to-obtain-anchor-part-of-url-after-in-php –

Répondre

19

Ce n'est pas possible que les clients n'envoient pas la « partie d'ancrage » au serveur

À titre d'exemple, voici la demande exacte que Chrome générée après avoir soumis http://example.com/#foobar (enreg en utilisant 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 

Voir, pas #foobar. Il n'y a donc aucun moyen qu'une application serveur puisse le lire.

Vous pourriez faire un peu de magie JavaScript pour stocker l'ancre dans un cookie ou dans un champ de saisie caché ou quelque chose de vaudou dans lequel vous êtes. Mais il ne fonctionnera jamais pour les demandes qui ne proviennent pas de vos propres sites. Il est plus simple de créer tout ce dont vous avez besoin sur la partie serveur de la chaîne de requête et d'utiliser l'ancre uniquement pour les tâches JavaScript uniquement - ou de l'utiliser pour naviguer dans un document HTML simple - mais cela fait 90s;).

est ici la partie importante de la RFC 1808 mentionné:

Notez que l'identifiant de fragment (et le « # » qui le précède) est partie pas considéré de l'URL. Cependant, comme il est couramment utilisé dans le même contexte de chaîne en tant qu'URL, un analyseur doit pouvoir reconnaître le fragment lorsqu'il est présent et le mettre de côté dans le cadre du processus d'analyse syntaxique .

+0

Pour plus d'informations , le [RFC 1808] (http://www.ietf.org/rfc/rfc1808.txt) qui explique pourquoi la pièce d'ancrage n'est pas envoyée au serveur. –

0

Cette solution ne fonctionne que après un bouton de soumission a été poussé, mais vous pouvez utiliser javascript pour placer une valeur cachée sur votre formulaire qui est mis à la valeur de document.location. Cela vous dirait exactement ce que le navigateur voit comme votre adresse.

2

Je suppose que vous voulez créer une application Web Ajax signable et que vous voulez remplacer certains fragments du DOM sans recharger la page entière. (Sinon, vous pouvez utiliser des paramètres de requête.) Comme sfussenegger mentionne, le navigateur ne transmet pas 'ancre' au serveur. La solution est du côté client.

Javascript window.location.hash donne l'information d'ancre. Vous pouvez ajouter un gestionnaire d'événement à l'événement window.onload qui saisit window.location.hash et le transmet au serveur dans un Ajax XHttpRequest. Vous attrapez la réponse et la construisez dans le DOM.

Malheureusement, il s'agit de deux allers-retours client-serveur.

Pour en savoir plus, rendez-vous au ajaxpatterns.