Не очень понял - вам нужен  context path вашего приложения или полный URL? 
Если первое, то можно  например сделать такой листенер :
@WebListener
public class MyApplicationLifeCicleListener implements ServletContextListener {
	@Override
	public void contextInitialized(ServletContextEvent event) {
              // cохраняем куда-нибудь путь
		System.out.println(event.getServletContext().getContextPath());
	}
	@Override
	public void contextDestroyed(ServletContextEvent event) {
	}
}
Если второе то как  вариант такой костыль - делаем реквест-листенер 
@WebListener
public class MyRequestListener extends RequestContextListener {
	@Override
	public void requestInitialized(ServletRequestEvent requestEvent) {
		super.requestInitialized(requestEvent);
		if (requestEvent.getServletRequest() instanceof HttpServletRequest) {
                        // cохраняем путь
			String url = ((HttpServletRequest) requestEvent.getServletRequest()).getRequestURL().toString();
			System.out.println(url);
		}
	}
}
И в первом и втором случае вам придется либо завести статическую переменную (можно прямо в  листенере) для записи url. Либо класс-синглтон, который вам вернет нужное значение. 
Но это конечно же костыль, так как для того чтобы к примеру получить URL во втором случае, нужно дождаться хотябы  одного реквеста. Да и урл в  зависимости от ресурса будет меняться.
А что вам мешает пользоваться HttpServletRequest в родном потоке? 
И почему вы не знаете свой URL? (Можно его в какой-нибудь конфиг прописать)
У вас REST сервис или сервлеты?