2011-10-18 21 views
12

Necesito obtener una lista de aplicaciones web implementadas en Apache Tomcat. Además, para cada aplicación web necesito obtener una lista de servlets y JSP inicializados. ¿Alguna idea de cómo se puede hacer esto?Lista de aplicaciones desplegadas en Apache Tomcat

He encontrado que el directorio \tomcat\work\Catalina\localhost\ contiene un directorio secundario para cada aplicación web. ¿Podría haber algún otro webapps desplegado que no esté presente allí?

Respuesta

3

No sé cómo hacerlo. Pero hay una aplicación de administrador en la distribución estándar de tomcat, que enumera las aplicaciones implementadas. Se proporciona Sourcecode, para que pueda echar un vistazo allí.

En relación con su pregunta acerca de otras aplicaciones web: Sí, podría haber otras aplicaciones web, que no se encuentran en el directorio de aplicaciones web. Se podrían especificar en server.xml.

1

La mejor manera que encontré para obtener información sobre las aplicaciones implementadas y su contenido (incluidos servlets, archivos, conexiones y demás) es instalar Lambda Probe además de lo que sea que se esté sirviendo la instancia de tomcat.

0

Eche un vistazo a Apache Tomcat manual. La Sección 5 trata de la aplicación Manager en Tomcat, que hace precisamente eso.

+0

i tenía una mirada allí, pero/gerente/lista probablemente pertenece a la versión anterior. de todos modos, necesito obtener el formulario de lista dentro de un filtro – galchen

8

Puede hacerlo utilizando javax.management. Se parece a

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. 
} 
+1

hermoso código. funciona perfectamente. Gracias. – jeorfevre

+5

En Tomcat 7+, es posible que deba cambiar "Tomcat" por "Catalina" para que el código de muestra funcione. Una vez hecho ese cambio, el código de muestra funcionó perfectamente. –

+0

@WilliamBrendel - Tengo un problema similar, pero en mi caso no puedo iniciar sesión (estoy instrumentando la aplicación) y, por lo tanto, la lista de aplicaciones siempre está vacía. ¿Alguna idea? Mi pregunta en detalle se puede encontrar aquí - http://stackoverflow.com/questions/39488852/tomcat-7-get-the-application-name-during-runtime-without-login-via-java-agent – Lin

4

Un poco tarde, pero espero que esta ayuda:

configuraciones Tomcat

Añadir esto en su /... /.../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"/> 

Después de eso, reiniciar Tomcat y uso:

El resultado debe ser:

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 

HTH

Cuestiones relacionadas