2016-03-28 5 views
0

En résumé, j'ai une servlet qui transfère une requête GET à une JSP, et je voudrais "cacher" l'URL cible de l'utilisateur .Transférer une requête du servlet vers JSP en utilisant RequestDispatcher ne cache pas l'URL cible

Ma configuration est la suivante:

  1. Un servlet, mis en correspondance avec l'URL "www.mydomain.com/pages/page1"
  2. Une JSP, à l'adresse «/WEB-INF/pages/page1 .jsp ", par rapport à la racine de l'application. La JSP réside dans le répertoire WEB-INF, afin de ne pas être accessible directement depuis le navigateur.

Lors de l'accès à partir du navigateur, le servlet pré-traite la requête GET entrant, et il transmet à la JSP en utilisant le code suivant-extrait:

request.getRequestDispatcher("/WEB-INF/pages/page1.jsp").forward(request, response); 

Le comportement souhaité est pour le navigateur maintenez l'URL "www.mydomain.com/pages/page1", pendant que l'utilisateur voit le contenu de la JSP.

Malheureusement, le navigateur passe toujours pour afficher l'URL de la page JSP: "www.mydomain.com/WEB-INF/pages/page1.jsp" (testé dans Chrome et Firefox)

Quelqu'un peut-il me dire, qu'est-ce pourrait provoquer ce comportement?

Source: Cette solution est décrite dans cette réponse CodeRanch, dans laquelle ils réussissent à « cacher » l'adresse à la JSP: http://www.coderanch.com/t/618800/JSP/java/Url-hiding

+1

Cela devrait fonctionner correctement. Pouvez-vous envoyer la méthode 'doGet()' complète de votre servlet et la 'servlet-mapping' dans' web.xml'. –

+0

@ W-S, merci de confirmer que vous attendez également que cela fonctionne. Cela m'a inspiré à faire un peu de débogage, et à trouver la cause plutôt farfelue du problème. Voir ma réponse ci-dessous. – paulkore

Répondre

0

Après avoir fait quelques vaste farfouillé ma mise en œuvre, j'ai pu pour isoler la cause de ce problème. Le code source exact est trop complexe pour être publié ici et n'est en fait pas pertinent.

Le problème a été causé par cette ligne obscure de Javascript, tirée dans la JSP à partir d'une classe d'utilité séparée, via un scriptlet (pratique obsolète).

<script type='text/javascript'> 
    window.history.replaceState(null, document.title, sanitizedURL); 
</script> 

Pour des raisons historiques, l'URL de la page était « assaini » en enlevant une partie de sa chaîne de requête, puis « remplaçant l'état de l'histoire de la fenêtre » a eu lieu. Je ne suis pas sûr que cela qualifie comme une nouvelle page de chargement, mais l'effet secondaire indésirable fait surface de l'URL de ressource réelle, "www.mydomain.com/WEB-INF/pages/page1.jsp"

line: si vous rencontrez un problème similaire, essayez de rechercher Javascript qui perturbe l'état de la fenêtre/du document