2011-03-01 26 views

Respuesta

13

Puede obtener ExternalContext de FacesContext y extraer request a partir del contexto externo y luego

String file = request.getRequestURI(); 
if (request.getQueryString() != null) { 
    file += '?' + request.getQueryString(); 
} 
URL reconstructedURL = new URL(request.getScheme(), 
           request.getServerName(), 
           request.getServerPort(), 
           file); 
reconstructedURL.toString(); 

source

2

Déjame reformular la respuesta de Jigar un poco:

final ExternalContext ectx = context.getExternalContext(); 
String url = ectx.getRequestScheme() 
    + "://" + ectx.getRequestServerName() 
    + ":" + ectx.getRequestServerPort() 
    + "/" + ectx.getRequestContextPath(); 
16

Una forma más concisa es:

HttpServletRequest request = (HttpServletRequest) externalContext.getRequest(); 
String url = request.getRequestURL().toString(); 
String baseURL = url.substring(0, url.length() - request.getRequestURI().length()) + request.getContextPath() + "/"; 

entonces usted no tenga que jugar con la omisión de los puertos cuando el esquema es http y el puerto es 80 y así sucesivamente.

+0

En este caso estamos perdiendo "ruta de contexto" – yegor256

+0

Lo sentimos, su pregunta no cubrirlo. Solo agrega '+ request.getContextPath()'. Actualizaré la respuesta. – BalusC

+0

Creo que aquí 'request.getRequestURI(). Substring (0)', '.substring (0)' no es obligatorio. ¿Se requiere para algunos casos muy específicos? – Tiny

7

Esta es la forma más fácil que he encontrado que no implica la manipulación misteriosa de cadenas en las diversas partes de la URL. Parece que funciona en todos los casos, incluidos diferentes protocolos y puertos.

String getAbsoluteApplicationUrl() throws URISyntaxException { 
     ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext(); 
     HttpServletRequest request = (HttpServletRequest) externalContext.getRequest(); 
     URI uri = new URI(request.getRequestURL().toString()); 
     newUri = new URI(uri.getScheme(), null, 
       uri.getHost(), 
       uri.getPort(), 
       request.getContextPath().toString(),null, null); 
     return newUri.toString(); 
} 
3

Tengo uno similar al de BalusC:

FacesContext context = FacesContext.getCurrentInstance(); 
HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest(); 
String requestURL = request.getRequestURL().toString(); 
String url = requestURL.substring(0, requestURL.lastIndexOf("/")); 
Cuestiones relacionadas