2011-03-01 14 views

Odpowiedz

13

Można uzyskać ExternalContext z FacesContext i wyodrębnić request z kontekstu zewnętrznego następnie

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

Pozwól mi ponownie fraza odpowiedź Jigar trochę:

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

bardziej zwięzły sposób to:

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

Wtedy nie trzeba się bawić z pominięciem portów gdy system jest http i port jest 80 i tak dalej.

+0

W tym przypadku mamy do Zgubienie „ścieżki kontekstu” – yegor256

+0

Twoje pytanie nie obejmują go. Po prostu dodaj '+ request.getContextPath()'. Zaktualizuję odpowiedź. – BalusC

+0

Myślę, że tutaj 'request.getRequestURI(). Substring (0)', '.substring (0)' nie jest obowiązkowe. Czy jest to wymagane w niektórych bardzo szczególnych przypadkach? – Tiny

7

To jest najprostszy sposób, jaki odkryłem, że nie obejmuje on tajemniczej manipulacji ciągiem na różnych częściach adresu URL. Wydaje się, że działa we wszystkich przypadkach, w tym w różnych protokołach i portach.

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

mam jeden podobny do BalusC to:

FacesContext context = FacesContext.getCurrentInstance(); 
HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest(); 
String requestURL = request.getRequestURL().toString(); 
String url = requestURL.substring(0, requestURL.lastIndexOf("/")); 
Powiązane problemy