java - ¿Cómo obtener la URL de solicitud real en Struts with Tiles?
servlets (4)
Cuando estás utilizando Tiles con Struts y ...
request.getRequestURL()
... obtienes la URL para, por ejemplo, /WEB-INF/jsp/layout/newLayout.jsp
lugar de la URL real que ingresó / hizo clic en el usuario, algo así como /context/action.do
.
En las versiones más nuevas de Struts, 1.3.xy posteriores, puede usar la solución mencionada en javaranch y obtener la URL real utilizando el atributo de solicitud ORIGINAL_URI_KEY
.
¿Pero cómo hacer esto en Struts 1.2.x?
No sé si Struts 1.2.x tiene una constante de Globals similar, pero podrías crear la tuya propia al menos de dos maneras:
- obtener la URL de solicitud original en la Acción y configurarla en la solicitud, y llamarla desde la JSP
- use un filtro de servlet para hacer lo mismo
Esto funciona en Struts 1.2
private String getOriginalUri(HttpServletRequest request) {
String targetUrl = request.getServletPath();
if (request.getQueryString() != null) {
targetUrl += "?" + request.getQueryString();
}
return targetUrl;
}
Cuando consulta request.getRequestURL () desde su capa view / jsp / tiles, ya es otra solicitud reescrita.
Como menciona Mwanji Ezana, la forma más adecuada es guardarlo para separar la propiedad en la fase de ejecución de la acción. Es posible que desee automatizar este proceso con la ayuda de interceptores en Struts2.
Yo uso esto, que también funciona en Spring:
<% out.println(request.getAttribute("javax.servlet.forward.request_uri")); %>
Si también necesita la cadena de consulta (contribuido por matchew ):
<% out.println(request.getAttribute("javax.servlet.forward.query_string")); %>