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?
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:
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
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
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
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.
}
Citation manuelle: List_Currently_Deployed_Applications
http://localhost:8080/manager/text/list
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.
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.
Consultez le manuel Apache Tomcat . La section 5 concerne l'application Manager dans Tomcat, qui ne fait que cela.