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

gal*_*hen 27 java tomcat

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

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

JRi*_*dsz 16

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

要获取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"/>
Run Code Online (Sandbox Code Playgroud)

之后,重启tomcat

使用浏览器列出应用

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

http://some_ip:some_port/manager/text/list
Run Code Online (Sandbox Code Playgroud)

将出现登录信息.输入在TOMCAT_HOME/conf/tomcat-users.xml中配置的用户/密码

使用命令行

只需执行此操作:

curl -v -u my_user:my_pass http://127.0.0.1:some_port/manager/text/list
Run Code Online (Sandbox Code Playgroud)

结果应该是:

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
Run Code Online (Sandbox Code Playgroud)

最后一种方法被许多与自动tomcat部署相关的插件使用(Devops)

HTH


Sta*_*lin 11

您可以使用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.
}
Run Code Online (Sandbox Code Playgroud)

  • 在Tomcat 7+中,您可能需要将"Tomcat"更改为"Catalina"才能使示例代码生效.一旦进行了更改,示例代码就能完美运行. (6认同)

And*_*eas 3

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

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