列出Apache Tomcat中部署的Web应用程序

时间:2011-10-18 10:31:03

标签: java tomcat

我需要在Apache Tomcat中获取已部署的Web应用程序列表。此外,对于每个webapp,我需要获取初始化的servlet和JSP列表。任何想法如何做到这一点?

我发现目录\tomcat\work\Catalina\localhost\包含每个webapp的子目录。是否有任何其他部署的Web应用程序不存在?

7 个答案:

答案 0 :(得分:14)

有点晚了,但我希望这有帮助。

要获取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

使用浏览器列出应用

转到您喜欢的浏览器并输入此网址:

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)相关的插件使用

HTH

答案 1 :(得分:10)

您可以使用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 :(得分:4)

Manual quote: List_Currently_Deployed_Applications

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

答案 3 :(得分:3)

我不知道怎么做。但是在tomcat的标准发行版中有一个管理器应用程序,它列出了已部署的应用程序。提供了源代码,因此您可以查看。

关于您关于其他网络应用的问题:是的,可能还有其他网络应用程序,它们不在webapp目录中。它们可以在server.xml中指定。

答案 4 :(得分:1)

我发现有关已部署的应用程序及其内容(包括servlet,文件,连接等)的信息的最佳方法是安装Lambda Probe以及tomcat实例所服务的内容。

答案 5 :(得分:0)

查看Apache Tomcat manual。第5节是关于Tomcat中的Manager应用程序,它就是这样做的。

答案 6 :(得分:-1)

http://code.google.com/p/psi-probe/wiki/Features似乎是个好看的地方。