Возможно, но это не красиво и привязывает вас к конкретному контейнеру.Короче говоря, это что-то вроде хака, YMMV.Решение ниже будет работать для Jetty.
В контексте contextInitialize вы можете получить доступ к WebAppContext следующим образом:
public void contextInitialized(ServletContextEvent sce) {
WebAppContext ctx = (WebAppContext) sce.getServletContext();
System.out.println("context Base Path" + ctx.getContextPath());
System.out.println("Getting the port is a bit trickier");
System.out.println("One valid Port = " + ctx.getServer().getConnectors()[0].getPort());
}
Я удалил некоторые проверки и проверки, чтобы быть кратким, но этого должно быть достаточно, чтобы получитьИдея ... добавить повязку по своему вкусу.
Здесь вы можете получить разные ответы с разными исполнениями.Так как цель состоит в том, чтобы вызвать службу, это не имеет большого значения, если мы получим исходные объявления или псевдоним, что означает, что вызов успешен.
Наконец, поскольку целевой IP-адрес известен (localhost), поскольку рабочий потокв той же JVM, что и целевой адрес, и путь к сервису известен, как только я попаду в нужный контекст, все, что нам нужно, это знать корневой порт порта и контекста.
Если вы попробуете это и получитеПроблемы, пожалуйста, отредактируйте ответ или оставьте комментарии, чтобы мы могли извлечь выгоду из вашего опыта.