I want to get the root url of my web application from one of the servlet.
If I deploy my application in \"www.mydomain.com\" I want to get the root url like \"http:/
You do realize that the URL client sees (and/or types into his browser) and the URL served by the container your servlet is deployed on can be very different?
In order to get the latter, though, you have a few methods available on HttpServletRequest:
getScheme()
, getServerName()
, getServerPort()
and getContextPath()
and combine them using appropriate separatorsgetRequestURL()
and remove getServletPath()
and getPathInfo()
from it.Generally, you can't obtain the URL; but, there are workarounds for specific cases. See Finding your application’s URL with only a ServletContext
Write a scriptlet in the welcome file to capture the root path. I assume index.jsp is the default file. So put the following code in that
<%
RootContextUtil rootCtx = RootContextUtil.getInstance();
if( rootCtx.getRootURL()==null ){
String url = request.getRequestURL().toString();
String uri = request.getRequestURI();
String root = url.substring( 0, url.indexOf(uri) );
rootCtx.setRootURL( root );
}
%>
Use this variable wherever needed within the application directly by calling the value as
String rootUrl = RootContextUtil.getInstance().getRootURL();
NOTE: No need to worry about protocols/ports/etc.. Hope this helps every one
public static String getBaseUrl(HttpServletRequest request) {
String scheme = request.getScheme();
String host = request.getServerName();
int port = request.getServerPort();
String contextPath = request.getContextPath();
String baseUrl = scheme + "://" + host + ((("http".equals(scheme) && port == 80) || ("https".equals(scheme) && port == 443)) ? "" : ":" + port) + contextPath;
return baseUrl;
}
This function helps you to get your base URL from a HttpServletRequest
:
public static String getBaseUrl(HttpServletRequest request) {
String scheme = request.getScheme() + "://";
String serverName = request.getServerName();
String serverPort = (request.getServerPort() == 80) ? "" : ":" + request.getServerPort();
String contextPath = request.getContextPath();
return scheme + serverName + serverPort + contextPath;
}