2010-07-19 3 views
2

J'essaie de transmettre une demande à une autre URL qui inclut le symbole dièse (« n »):l'utilisation du symbole de hachage dans l'URL de l'avant avec RequestDispatcher

request.getRequestDispatcher("/some/path.jsp#somehash").forward(request, response); 

Tomcat, cependant, me dit que « la demande la ressource n'est pas disponible ". Si je supprime le hash de l'URL, tout fonctionne correctement. Est-ce que les hashs ne sont pas autorisés ou ne les traite-je pas correctement?

Répondre

7

Le symbole # est une chose sur le navigateur, et non sur le serveur. Lorsque vous tapez une URL avec un # dans le navigateur, le navigateur n'envoie pas cette partie au serveur. Il envoie l'URL sans lui, puis saute à l'ancre nommée quand il récupère la page. Lorsque vous demandez au conteneur d'obtenir cette URL pour vous, il ne traite pas le # différemment d'une autre URL - il n'a pas de signification particulière, il recherche donc une page JSP appelée /some/path.jsp#somehash, qui Bien sûr, ça n'existe pas.

Vous devrez conserver cette logique d'accrochage sur le client. Peut-être que vous pourriez mettre un peu de javascript sur la page résultante pour faire défiler jusqu'à ce point dans le document.

4

Les fragments d'URL sont purement côté client. Le RequestDispatcher#forward() est entièrement côté serveur. L'adresse URL forward ne sera pas envoyée au client. Vous pouvez cependant rediriger vers l'URL donnée en utilisant HttpServletResponse#sendRedirect(). Le fragment d'URL sera ensuite envoyé au client et reflété dans la barre d'adresse du navigateur. La redirection de la requête présente cependant l'inconvénient que la requête en cours sera garbée et qu'une nouvelle sera créée. Si ce n'est pas abordable, alors vous devrez regarder dans le coin JavaScript pour trouver la solution.

Questions connexes