2011-10-18 83 views
12

我需要在Apache Tomcat中獲取部署的webapps列表。另外,對於每個webapp,我需要獲得已初始化的servlet和JSP的列表。任何想法如何做到這一點?我發現\tomcat\work\Catalina\localhost\包含每個webapp的子目錄。有沒有其他已部署的Web應用程序不存在?在Apache Tomcat中列出部署的webapps

回答

3

我不知道該怎麼做。但是在tomcat的標準發行版中有一個管理器應用程序,其中列出了已部署的應用程序。源代碼提供,所以你可以看看那裏。

關於你關於其他webapps的問題:是的,可能有其他的webapps,它不駐留在webapp目錄中。它們可以在server.xml中指定。

1

對於部署的應用程序及其內容(包括servlet,文件,連接等)的信息,我發現的最佳方式是除了tomcat實例正在服務之外,還安裝Lambda Probe

0

查看Apache Tomcat manual。第5部分是關於Tomcat中的Manager應用程序,它就是這樣做的。

+0

我做看看那裏,但/經理/列表可能屬於以前的版本。無論如何,我需要獲得清單 – galchen

8

您可以通過使用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. 
} 
+1

漂亮的代碼。完美的作品。謝謝。 – jeorfevre

+5

在Tomcat 7+中,您可能需要將「Tomcat」更改爲「Catalina」,以便示例代碼正常工作。一旦做出改變,示例代碼就可以很好地工作。 –

+0

@WilliamBrendel - 我有類似的問題,但在我的情況下,我無法登錄(我在測試應用程序) - 因此應用程序列表始終爲空。任何想法?我的問題可以在這裏找到 - http://stackoverflow.com/questions/39488852/tomcat-7-get-the-application-name-during-runtime-without-login-via-java-agent – Lin

4

晚了一點,但我希望這幫助:

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和使用:

結果應該是:

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