metodos - doget java
Cómo obtener la URL de solicitud original de un servlet/jsp después de múltiples servlets hacia adelante (5)
Considere usar filtros de servlet para validar información. Esto significa que puede evitar su reenvío de validación y quedarse en un solo archivo JSP.
Estoy trabajando en una aplicación de reserva de cruceros utilizando struts / tiles que usa múltiples servlets / jsp hacia adelante para alcanzar el jsp correcto para visualizar. Pero, una vez que llegue al jsp final que se utiliza para representar la página, la llamada ${pageContext.request.requestURL}
en esa jsp devuelve la ruta de este jsp.
Por ejemplo
- Solicitud original: / booking / getCruiseDetails
- se reenvía a: /booking/validateCruiseDeteails.jsp
- se reenvía a: /booking/validateUser.jsp
- finalmente se reenvía a: /booking/showCruiseDetails.jsp
Entonces, en /booking/showCruiseDetails.jsp cuando llamo ${pageContext.request.requestURL}
obtengo /booking/showCruiseDetails.jsp
¿Cómo se obtiene la URL de solicitud original (hecha por el cliente) desde un jsp al que se ha llegado a través de múltiples reenvíos. Encontré las siguientes publicaciones en stackoverflow que insinúan la solución here y here , pero no abordan la forma de encontrar la URL de solicitud original después de que se produjeron varios forwards.
Encontré una mejor respuesta en esta publicación [ ¿Cómo se detecta la URL en un Servlet Java al reenviar a JSP? ]
En el uso JSP objetivo:
request.getAttribute("javax.servlet.forward.request_uri")
Para saber cuál era la URL original.
No requiere que realice ningún paso adicional en el servlet de reenvío
Puede mostrarlo sin utilizar una referencia de bean con lo siguiente:
<h:outputText value="#{requestScope[''javax.servlet.forward.request_uri'']}" />
Por supuesto, necesita asignar la página 404 en su archivo web.xml.
<error-page>
<error-code>404</error-code>
<location>/xhtml/pg/error/404.xhtml</location>
</error-page>
Puede usar un filtro para colocar la dirección de origen para solicitar el atributo y luego leerlo desde jsp
Filtro asignado a / booking / * execute:
request.setAttribute("origin", request.getRequestURL());
Jsp:
${pageContext.request.attribute["origin"]}
Esto funciona porque filtro ha configurado el despachador de PETICIONES por defecto. Significa que el filtro se ejecuta solo para solicitudes directas de clientes, no para reenviar / incluir
${requestScope["javax.servlet.forward.request_uri"]}
o con comillas simples
${requestScope[''javax.servlet.forward.request_uri'']}