web-dev-qa-db-fra.com

Liste des applications Web déployées dans Apache Tomcat

Je dois obtenir une liste des applications Web déployées dans Apache Tomcat. En outre, pour chaque application Web, je dois obtenir une liste des servlets et JSP initialisés. Des idées comment cela peut être fait?

J'ai trouvé que le répertoire \Tomcat\work\Catalina\localhost\ contient un répertoire enfant pour chaque application Web. Pourrait-il y avoir d'autres applications Web déployées qui n'y sont pas présentes?

22
galchen

Un peu tard, mais j'espère cette aide.

Pour obtenir la liste des applications déployées dans Tomcat, vous devez configurer les fichiers xml et exécuter une simple commande curl: 

Configurations Tomcat

Ajoutez ceci dans votre /.../.../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"/>

Après cela, redémarrez Tomcat

Lister les applications en utilisant le navigateur

Accédez à votre navigateur préféré et entrez cette URL:

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

Un identifiant apparaîtra. Entrez le nom d'utilisateur/mot de passe configuré dans votre Tomcat_HOME/conf/Tomcat-users.xml

Utiliser la ligne de commande

Il suffit d'exécuter ceci:

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

Le résultat devrait être:

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

Cette dernière approche est utilisée par de nombreux plug-ins liés aux déploiements automatisés de Tomcat (Devops).

HTH

13
JRichardsz

Vous pouvez le faire en utilisant javax.management. Ça va ressembler

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.
}
9
Stan Kurilin

Citation manuelle: List_Currently_Deployed_Applications

http://localhost:8080/manager/text/list
4
tsohr

Je ne sais pas comment le faire. Cependant, il existe une application de gestionnaire dans la distribution standard de Tomcat, qui répertorie les applications déployées. Le code source est fourni, vous pouvez donc y jeter un coup d'œil.

En ce qui concerne votre question sur les autres applications Web: Oui, il pourrait exister d’autres applications Web qui ne se trouvent pas dans le répertoire des applications Web. Ils pourraient être spécifiés dans le fichier server.xml.

3
Andreas

Le meilleur moyen que j'ai trouvé pour obtenir des informations sur les applications déployées et leur contenu (y compris les servlets, les fichiers, les connexions, etc.) est d'installer Lambda Probe en plus de ce que l'instance Tomcat sert.

1
0xCAFEBABE

Consultez le manuel Apache Tomcat . La section 5 concerne l'application Manager dans Tomcat, qui ne fait que cela.

0
SPee