Список развернутых веб-приложений в Apache Tomcat - PullRequest
25 голосов
/ 18 октября 2011

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

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

Ответы [ 7 ]

15 голосов
/ 21 ноября 2016

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

Чтобы получить список развернутых приложений в tomcat, вам нужно настроить XML-файлы и выполнить простую команду curl:

Конфигурации 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

Список приложений с помощью браузера

Перейдите в ваш любимый браузер и введите этот URL:

http://some_ip:some_port/manager/text/list

Появится логин. Введите имя пользователя / пароль, настроенные в вашем TOMCAT_HOME / conf / tomcat-users.xml

Использование командной строки

Просто выполните это:

curl -v -u my_user:my_pass http://127.0.0.1:some_port/manager/text/list

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

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

Этот последний подход используется многими плагинами, связанными с автоматизированным развертыванием Tomcat (Devops)

НТН

10 голосов
/ 05 июля 2013

Вы можете сделать это с помощью 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.
}
5 голосов
/ 13 августа 2014
3 голосов
/ 18 октября 2011

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

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

1 голос
/ 18 октября 2011

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

0 голосов
/ 26 января 2013

http://code.google.com/p/psi-probe/wiki/Features кажется хорошим местом для поиска.

0 голосов
/ 18 октября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...