Question

J'écris un JSP / Servlet et j'essaie d'obtenir la partie ancre de l'URI, par exemple:

blabla.rdf#mark

Comment puis-je obtenir ma note de ma demande? Évidemment, request.getParameter () ne fonctionne pas?

Toute aide serait la bienvenue.

Était-ce utile?

La solution

Cela n’est pas possible car les clients n’envoient pas la "pièce d'ancrage". au serveur

À titre d'exemple, voici la requête exacte générée par Google Chrome après la soumission de http://example.com/#foobar (enregistré à l'aide de 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 de #foobar. Il est donc impossible qu'une application serveur puisse le lire.

Vous pouvez utiliser un peu de magie JavaScript pour stocker l’ancre dans un cookie, dans un champ de saisie masqué ou dans tout autre style vaudou dans lequel vous vous trouvez. Mais cela 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 le serveur de la chaîne de requête et d'utiliser l'ancre uniquement pour les tâches JavaScript uniquement - ou utilisez-la pour naviguer à l'intérieur d'un simple document HTML - mais c'est tellement 90;).

Voici la partie importante de la RFC 1808 mentionnée:

  

Notez que l'identifiant de fragment (et le "#" qui le précède) est   ne fait pas partie de l'URL. Cependant, puisqu'il est couramment utilisé   dans le même contexte de chaîne qu'une URL, un analyseur syntaxique doit pouvoir   reconnaître le fragment quand il est présent et le mettre de côté dans le cadre de   le processus d'analyse.

Autres conseils

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

Javascript window.location.hash donne les informations sur l'ancre. Vous pouvez ajouter un gestionnaire d'événements à l'événement window.onload qui récupère 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 plus d'informations à ce sujet, consultez la page ajaxpatterns .

Cette solution ne fonctionnerait qu'après un bouton d'envoi a été poussé, mais vous pouvez utiliser javascript pour placer une valeur masquée sur votre formulaire, définie sur la valeur de document.location. Cela vous indiquerait exactement ce que le navigateur considère comme votre adresse.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top