2016-03-28 28 views
0

Kurz gesagt, ich habe ein Servlet, das eine GET-Anfrage an eine JSP weiterleitet, und ich möchte die Ziel-URL vom Benutzer "ausblenden" .Weiterleiten einer Anfrage von Servlet zu JSP mit RequestDispatcher versteckt nicht die Ziel-URL

Mein Setup ist wie folgt:

  1. Ein Servlet, abgebildet URL "www.mydomain.com/pages/page1"
  2. Eine JSP, an der Adresse „/ WEB-INF/pages/Seite1 .jsp "relativ zum Anwendungsstamm. Die JSP befindet sich im WEB-INF-Verzeichnis, um nicht direkt vom Browser aus erreichbar zu sein.

Beim Zugriff über den Browser, das Servlet Vorverarbeitung der eingehende GET-Anforderung und leitet sie an die JSP mit dem folgenden Code-Schnipsel:

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

Das gewünschte Verhalten ist für den Browser Pflegen Sie die URL "www.mydomain.com/pages/page1", während der Benutzer den Inhalt der JSP sieht.

Leider konsequent der Browser schaltet die JSP URL anzuzeigen: "www.mydomain.com/WEB-INF/pages/page1.jsp" (Getestet in Chrome und Firefox)

Kann mir jemand sagen, was könnte dieses Verhalten verursachen?

Quelle: Diese Lösung in dieser CodeRanch Antwort beschrieben wird, in dem sie erfolgreich sind, an die Adresse der JSP „versteckt“: http://www.coderanch.com/t/618800/JSP/java/Url-hiding

+1

Das sollte gut funktionieren. Können Sie die vollständige 'doGet()' Methode Ihres Servlets und das 'Servlet-Mapping' in der' web.xml' senden. –

+0

@ W-S, danke für die Bestätigung, dass Sie auch erwarten, dass dies funktioniert. Das hat mich dazu inspiriert, etwas zu debuggen und die ziemlich weit hergeholte Ursache des Problems zu finden. Siehe meine Antwort unten. – paulkore

Antwort

0

einige umfangreiche Stochern meine Implementierung getan zu haben, konnte ich um die Ursache dieses Problems zu isolieren. Der genaue Quellcode ist zu komplex, um hier zu posten, und ist in der Tat irrelevant.

Das Problem wurde durch diese obskure Javascript-Zeile verursacht, die von einer separaten Dienstprogrammklasse über ein Scriptlet in die JSP übernommen wurde (veraltete Methode).

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

Für ältere Gründen wurde die Seite URL durch Entfernen eines Teils seiner Query-String „hygienisiert“ wird und dann stattfand, „den Zustand der Fenster Geschichte zu ersetzen“. Ich bin mir nicht sicher, ob dies als eine Seite neu geladen wird, aber der unerwünschte Nebeneffekt ist das Auftauchen der tatsächlichen Ressource URL, "

Bottom Zeile: Wenn Sie ein ähnliches Problem haben, versuchen Sie, nach Javascript zu suchen, das mit dem Fenster-/Dokumentstatus unordentlich ist