我需要在Apache Tomcat中获取已部署的Web应用程序列表。此外,对于每个webapp,我需要获取初始化的servlet和JSP列表。任何想法如何做到这一点?
我发现目录\tomcat\work\Catalina\localhost\
包含每个webapp的子目录。是否有任何其他部署的Web应用程序不存在?
答案 0 :(得分:14)
有点晚了,但我希望这有帮助。
要获取tomcat中已部署应用程序的列表,您需要配置xml文件并执行简单的curl命令:
在 /.../.../ 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)