Список развернутых webapps в Apache Tomcat

Мне нужно получить список развернутых webapps в Apache Tomcat. Кроме того, для каждого webapp мне нужно получить список инициализированных сервлетов и JSP. Любые идеи, как это можно сделать?

Я обнаружил, что каталог \tomcat\work\Catalina\localhost\ содержит дочерний каталог для каждого webapp. Могут ли быть какие-либо другие развернутые webapps, которых там нет?

Ответ 1

Вы можете сделать это, используя javax.management. Это будет выглядеть

private Iterable<String> collectAllDeployedApps() {
    try {
        final Set<String> result = new HashSet<>();
        final Set<ObjectName> instances = findServer()
                .queryNames(new ObjectName("Tomcat:j2eeType=WebModule,*"), null);
        for (ObjectName each : instances) {
            result.add(substringAfterLast(each.getKeyProperty("name"), "/")); //it will be in format like //localhost/appname 
        }
        return result;
    } catch (MalformedObjectNameException e) {
         //handle
    }
}

private MBeanServer findServer() {
    ArrayList<MBeanServer> servers = MBeanServerFactory.findMBeanServer(null);
    for (MBeanServer eachServer : servers) {
        for (String domain : eachServer.getDomains()) {
            if (domain.equals("Tomcat")) {
                return eachServer;
            }
        }
    }
    //handle. We are not in Tomcat.
}

Ответ 2

Немного поздно, но я надеюсь, что эта помощь:

Конфигурации Tomcat

Добавьте это в свой /.../.../TOMCAT_HOME/conf/tomcat-users.xml

<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>

<user username="my_user" password="my_pass" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script"/>

После этого перезапустите tomcat и используйте:

Результат должен быть:

OK - Listed applications for virtual host localhost
/manager:running:0:manager
/:running:0:ROOT
/docs:running:0:docs
/examples:running:0:examples
/host-manager:running:0:host-manager
/my_app:running:0:my_app
/my_other_app:running:0:my_other_app
....
* Connection #0 to host 127.0.0.1 left intact

НТН

Ответ 4

Я не знаю, как это сделать. Но есть приложение-менеджер в стандартном дистрибутиве tomcat, в котором перечислены развернутые приложения. Исходный код предоставляется, поэтому вы можете посмотреть его.

Что касается вашего вопроса о других webapps: Да, могут быть другие webapps, которые не находятся в каталоге webapp. Они могут быть указаны в файле server.xml.

Ответ 5

Лучший способ найти информацию о развернутых приложениях и их контенте (включая сервлеты, файлы, подключения и т.д.) - это установить Lambda Probe в дополнение к тому, что обслуживает экземпляр tomcat.

Ответ 6

Ознакомьтесь с руководством Apache Tomcat. Раздел 5 касается приложения Manager в Tomcat, которое делает именно это.