List deployed webapps in Apache Tomcat

前端 未结 7 1316
予麋鹿
予麋鹿 2020-12-09 02:29

I need to get a list of deployed webapps in Apache Tomcat. Also, for each webapp I need to get a list of initialized servlets and JSPs. Any ideas how this can be done?

相关标签:
7条回答
  • 2020-12-09 03:02

    I don't know how to do it. But there is a manager application in the standard distribution of tomcat, which lists the deployed apps. Sourcecode is provided, so you could have a look there.

    Regarding your question about other webapps: Yes, there could be other webapps, which resides not in the webapp directory. They could be specified in the server.xml.

    0 讨论(0)
  • 2020-12-09 03:03

    Check out the Apache Tomcat manual. Section 5 is about the Manager application in Tomcat, which does just that.

    0 讨论(0)
  • 2020-12-09 03:09

    The best way I found for information about the deployed applications and their content (including servlets, files, connections and such) is to install Lambda Probe in addition to whatever the tomcat instance is serving.

    0 讨论(0)
  • 2020-12-09 03:13

    In order to get a list of deployed apps of your tomcat you just need configure user/roles and use /manager/text/list tomcat endpoint

    Configure user and roles in Tomcat

    Add this in your /.../.../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"/>
    

    You could skip "admin-gui" & "admin-script" roles if you will not perform admin operations.

    After that, restart tomcat

    List apps using browser

    Go to your favorite browser and enter this url:

    http://some_ip:some_port/manager/text/list
    

    A login will appear. Enter the user/password configured in your TOMCAT_HOME/conf/tomcat-users.xml

    Using command line

    Just execute this:

    curl -v -u my_user:my_pass http://127.0.0.1:some_port/manager/text/list
    

    The result should be:

    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
    

    List apps with curl is used by a plugins related to automated tomcat deploys (Devops)

    HTH

    0 讨论(0)
  • 2020-12-09 03:16

    You can do it by using javax.management. It will look like

    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.
    }
    
    0 讨论(0)
  • 2020-12-09 03:16

    http://code.google.com/p/psi-probe/wiki/Features seems like a good place to look.

    0 讨论(0)
提交回复
热议问题