Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get an absolute URL of webapp from ExternalContext?

Tags:

java

jsf

jsf-2

I'm trying to retrieve the root URL of a web application from ExternalContext, but can't understand which method to use...

like image 651
yegor256 Avatar asked Mar 01 '11 11:03

yegor256


4 Answers

A more concise way is:

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

Then you don't need to fiddle with omitting the ports when the scheme is http and port is 80 and so on.

like image 124
BalusC Avatar answered Nov 10 '22 15:11

BalusC


You can get ExternalContext from FacesContext and extract request from External context then

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

like image 23
jmj Avatar answered Nov 10 '22 15:11

jmj


This is the easiest way I've found that doesn't involve mysterious string manipulation on the various parts of the URL. It seems to work in all cases, including different protocols and ports.

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();
 }
like image 20
dfraser Avatar answered Nov 10 '22 17:11

dfraser


I have one similar to BalusC's:

FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest();
String requestURL = request.getRequestURL().toString();
String url = requestURL.substring(0, requestURL.lastIndexOf("/"));
like image 3
Chris Harris Avatar answered Nov 10 '22 15:11

Chris Harris