Не очень понял - вам нужен 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 сервис или сервлеты?