Как говорит @JasonArmstrong, вы можете инициировать перезагрузку с помощью JMX Beans, которые доступны в одной JVM для любого приложения.Вы можете перезагрузить себя или другое приложение.Позже я опубликую код, чтобы показать, как это сделать.
С другой стороны, если все, что вам нужно, это развернуть дополнительный сервлет, , вы можете сделать это с помощью стандартных API-интерфейсов Java-сервлетов.
Интерфейс Java Servlet API ServletContext
содержит метод addServlet
, который позволяет развертывать новый сервлет.Это, в сочетании с возвращаемым значением из этого метода, должно позволить вам развернуть новый сервлет после инициализации приложения.
Например (в Servlet
)
Servlet servlet = ...; // Make your servlet, here
ServletContext application = getServletContext();
ServletRegistration.Dynamic reg = application.addServlet("MyNewServlet", servlet);
reg.addMapping("/nyNewServlet");
ОБНОВЛЕНИЕ 2018-12-07
Извинения за приведенный выше текст, который был теперь отозван.Все в нем верно, за исключением того, что вы не можете развернуть новые сервлеты (и, по-видимому, фильтры и тому подобное) после того, как контекст был инициализирован .
== Вернуться к исходному ответу ==
Или, если вы хотите перезагрузить контекст, вы все равно можете сделать это с помощью JMX.Код выглядит примерно так:
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
// Get the JVM's local "server" (there should be only one)
MBeanServer mbs = MBeanServerFactory.findMBeanServer(null).get(0);
// Create an "object name" that points to the application's
// context in Tomcat's MXBean tree. You might want to use
// jvisualvm or a similar MBean explorer to locate your
// application to get the exact right syntax for your context
// in the tree. Tomcat version may affect this value.
ObjectName objectName = new ObjectName("Catalina:j2eeType=WebModule,name=//localhost/contextname,J2EEApplication=none,J2EEServer=none");
// Invoke the "reload" method, which will
mbs.invoke(objectName, "reload", null, null);