2011-03-01 8 views

답변

13

당신은 FacesContext에서 ExternalContext를 얻을 수

다음 외부 상황에서 request를 추출
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

하자 나를 다시 문구 Jigar의 대답은 조금 :

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

더 간결 방법은 다음과 같습니다

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

는 그런 다음 계획은 http이며 포트 80 등 때 포트를 생략 바이올린 필요가 없습니다.

+0

을 – yegor256

+0

죄송합니다, 귀하의 질문은 포함되지 않았다. 그냥'+ request.getContextPath()'를 추가하십시오. 나는 대답을 업데이트 할 것이다. – BalusC

+0

여기서'request.getRequestURI(). substring (0)','.substring (0)'은 필수는 아닙니다. 아주 특정한 경우에 필요합니까? – Tiny

7

이것은 URL의 다양한 부분에서 신비한 문자열 조작을 포함하지 않는 가장 쉬운 방법입니다. 그것은 다른 프로토콜 및 포트를 포함하여 모든 경우에 작동하는 것으로 보입니다.

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

내가 BalusC의 유사 하나있다 : 우리가 "컨텍스트 경로"를 잃어버린하고이 경우

FacesContext context = FacesContext.getCurrentInstance(); 
HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest(); 
String requestURL = request.getRequestURL().toString(); 
String url = requestURL.substring(0, requestURL.lastIndexOf("/")); 
관련 문제