2011-10-18 31 views
12

Tôi cần có danh sách các ứng dụng web được triển khai trong Apache Tomcat. Ngoài ra, đối với mỗi ứng dụng web tôi cần có danh sách các servlet và JSP được khởi tạo. Bất kỳ ý tưởng làm thế nào điều này có thể được thực hiện?Liệt kê các ứng dụng web được triển khai trong Apache Tomcat

Tôi nhận thấy rằng thư mục \tomcat\work\Catalina\localhost\ chứa thư mục con cho mỗi ứng dụng web. Có thể có bất kỳ ứng dụng web được triển khai nào khác không có ở đó không?

Trả lời

3

Tôi không biết cách thực hiện. Nhưng có một ứng dụng quản lý trong việc phân phối tiêu chuẩn của tomcat, trong đó liệt kê các ứng dụng được triển khai. Sourcecode được cung cấp, vì vậy bạn có thể có một cái nhìn ở đó.

Về câu hỏi của bạn về các ứng dụng web khác: Có, có thể có các ứng dụng web khác, không nằm trong thư mục webapp. Chúng có thể được chỉ định trong tệp server.xml.

1

Cách tốt nhất tôi tìm thấy để biết thông tin về các ứng dụng được triển khai và nội dung của chúng (bao gồm servlet, tệp, kết nối và như vậy) là cài đặt Lambda Probe ngoài bất kỳ trường hợp tomcat nào đang phân phối.

0

Khám phá Apache Tomcat manual. Phần 5 là về ứng dụng Trình quản lý trong Tomcat, chỉ thực hiện điều đó.

+0

tôi đã có một cái nhìn đó, nhưng/quản lý/danh sách có lẽ thuộc về phiên bản trước. anyways, tôi cần để có được các hình thức danh sách bên trong một bộ lọc – galchen

8

Bạn có thể làm điều đó bằng cách sử dụng javax.management. Nó sẽ giống như

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

mã đẹp. hoạt động hoàn hảo. Cảm ơn. – jeorfevre

+5

Trong Tomcat 7+, bạn có thể cần thay đổi "Tomcat" thành "Catalina" để mã mẫu hoạt động. Sau khi thực hiện thay đổi đó, mã mẫu đã hoạt động hoàn hảo. –

+0

@WilliamBrendel - Tôi có một vấn đề tương tự, nhưng trong trường hợp của tôi tôi không thể đăng nhập (Tôi đang thiết kế ứng dụng) - và do đó danh sách các ứng dụng luôn trống. Bất kỳ ý tưởng? Câu hỏi của tôi chi tiết có thể được tìm thấy ở đây - http://stackoverflow.com/questions/39488852/tomcat-7-get-the-application-name-during-runtime-without-login-via-java-agent – Lin

4

Một chút trễ, nhưng tôi hy vọng điều này giúp đỡ:

Tomcat cấu hình

Thêm này trong thư mục /... /.../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"/> 

Sau đó, khởi động lại tomcat và sử dụng:

Kết quả sẽ là:

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

Các vấn đề liên quan