web-dev-qa-db-de.com

Wie erhält man die ursprüngliche Anforderungs-URL von einem Servlet/jsp, nachdem mehrere Servlets weitergeleitet wurden

Ich arbeite an einer Kreuzfahrtbuchungs-App, die Struts/Tiles verwendet, die multiple internes Servlet/Jsp verwenden, um das rechte Jsp zur Anzeige zu erreichen. Sobald Sie jedoch das letzte jsp erreicht haben, das zum Rendern der Seite verwendet wird, gibt der ${pageContext.request.requestURL}-Aufruf in diesem jsp den Pfad von this jsp zurück.

Zum Beispiel

  1. Ursprüngliche Anfrage: / booking/getCruiseDetails
  2. wird weitergeleitet an: /booking/validateCruiseDeteails.jsp
  3. wird weitergeleitet an: /booking/validateUser.jsp
  4. wird schließlich weitergeleitet an: /booking/showCruiseDetails.jsp

Wenn Sie also in /booking/showCruiseDetails.jsp ${pageContext.request.requestURL} I .__ aufrufen, erhalten Sie /booking/showCruiseDetails.jsp

Wie erhält man die ursprüngliche (vom Client gemachte) Anforderungs-URL von einem JSP, das über multiple erreicht wurde. Ich habe die folgenden Beiträge auf stackoverflow gefunden, die auf die Lösung hier und hier hinweisen, aber sie gehen nicht darauf ein, wie Sie die ursprüngliche Anforderungs-URL finden würden, nachdem mehrere Vorläufen aufgetreten sind.

28
Salman Paracha

Ich habe in diesem Beitrag eine bessere Antwort gefunden. [ Wie erkennt man die URL in einem Java Servlet, wenn man an JSP weiterleitet? ]

Auf der Ziel-JSP verwenden Sie:

request.getAttribute("javax.servlet.forward.request_uri")

Um herauszufinden, wie die ursprüngliche URL lautete.

Sie müssen keine zusätzlichen Schritte für das Weiterleitungsservlet ausführen

57
Lenny Markus

Sie können einen Filter verwenden, um die Origin-Adresse mit dem Attribut anzufordern und dann von jsp zu lesen

Filter zugeordnet zu/Buchung/* Ausführen:

request.setAttribute("Origin", request.getRequestURL());

Jsp:

${pageContext.request.attribute["Origin"]}

Dies funktioniert, weil der Filter den REQUEST-Dispatcher standardmäßig festgelegt hat. Das bedeutet, dass der Filter nur für direkte Clientanforderungen ausgeführt wird, die nicht weitergeleitet werden sollen

10
smas
${requestScope["javax.servlet.forward.request_uri"]}

oder mit einfachen Anführungszeichen

${requestScope['javax.servlet.forward.request_uri']}
3
Marcus

Verwenden Sie stattdessen Servlet-Filter, um Informationen zu überprüfen. Dies bedeutet, dass Sie Ihre Validierungsweiterleitung vermeiden und einfach in einer einzigen JSP-Datei bleiben können.

Sie können es ohne Verwendung einer Bean-Referenz mit folgendem anzeigen:

<h:outputText value="#{requestScope['javax.servlet.forward.request_uri']}" />

Natürlich müssen Sie die 404-Seite in Ihrer Datei web.xml abbilden.

<error-page>
    <error-code>404</error-code>
    <location>/xhtml/pg/error/404.xhtml</location>
</error-page>
0
Sky Games Inc

Entspricht @Lenny Markus, verwendet jedoch die in der Request Dispatcher-Klasse angegebene Konstante.

request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI)
0
winter