web-dev-qa-db-fra.com

Comment obtenir l'URL de requête d'origine à partir d'un servlet/jsp après plusieurs transferts de servlet

Je travaille actuellement sur une application de réservation de croisière utilisant des entretoises/tuiles utilisant plusieurs servlet/jsp interne vers l'avant pour atteindre le bon jsp à afficher. Mais une fois que vous avez atteint le dernier fichier jsp utilisé pour le rendu de la page, l'appel ${pageContext.request.requestURL} dans ce fichier renvoie le chemin this jsp.

Par exemple

  1. Demande initiale: / booking/getCruiseDetails
  2. est transmis à: /booking/validateCruiseDeteails.jsp
  3. est transmis à: /booking/validateUser.jsp
  4. est finalement transmis à: /booking/showCruiseDetails.jsp

Ainsi, dans /booking/showCruiseDetails.jsp lorsque j'appelle ${pageContext.request.requestURL} I Get /booking/showCruiseDetails.jsp

Comment obtenez-vous l'URL de demande d'origine (faite par le client) à partir d'un fichier jsp qui a été atteint via multiple avant. J'ai trouvé les articles suivants sur stackoverflow qui font allusion à la solution ici et ici , mais ils n'indiquent pas comment vous allez trouver l'URL de la demande d'origine après plusieurs transferts.

28
Salman Paracha

Vous pouvez utiliser un filtre pour définir l’attribut origine de l’attribut, puis le lire à partir de jsp.

Filtre associé à/booking/* execute:

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

Jsp:

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

Cela fonctionne car le filtre a défini le répartiteur REQUEST par défaut. Cela signifie que le filtre s’exécute uniquement pour les demandes directes des clients, pas pour le transfert/y compris

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

ou avec des guillemets simples

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

Pensez plutôt à utiliser des filtres de servlet pour valider les informations. Cela signifie que vous pouvez éviter le transfert de validation et rester dans un seul fichier JSP.

Vous pouvez l'afficher sans utiliser une référence de bean avec les éléments suivants:

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

Bien sûr, vous devez toutefois mapper la page 404 dans votre fichier web.xml.

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