Class ManagerServlet

  • All Implemented Interfaces:
    Servlet, ServletConfig, java.io.Serializable, ContainerServlet
    Direct Known Subclasses:
    HTMLManagerServlet

    public class ManagerServlet
    extends HttpServlet
    implements ContainerServlet
    Servlet that enables remote management of the web applications installed within the same virtual host as this web application is. Normally, this functionality will be protected by a security constraint in the web application deployment descriptor. However, this requirement can be relaxed during testing.

    This servlet examines the value returned by getPathInfo() and related query parameters to determine what action is being requested. The following actions and parameters (starting after the servlet path) are supported:

    • /deploy?config={config-url} - Install and start a new web application, based on the contents of the context configuration file found at the specified URL. The docBase attribute of the context configuration file is used to locate the actual WAR or directory containing the application.
    • /deploy?config={config-url}&war={war-url}/ - Install and start a new web application, based on the contents of the context configuration file found at {config-url}, overriding the docBase attribute with the contents of the web application archive found at {war-url}.
    • /deploy?path=/xxx&war={war-url} - Install and start a new web application attached to context path /xxx, based on the contents of the web application archive found at the specified URL.
    • /list - List the context paths of all currently installed web applications for this virtual host. Each context will be listed with the following format path:status:sessions. Where path is the context path. Status is either running or stopped. Sessions is the number of active Sessions.
    • /reload?path=/xxx - Reload the Java classes and resources for the application at the specified path.
    • /resources?type=xxxx - Enumerate the available global JNDI resources, optionally limited to those of the specified type (fully qualified Java class name), if available.
    • /serverinfo - Display system OS and JVM properties.
    • /sessions - Deprecated. Use expire.
    • /expire?path=/xxx - List session idle time information about the web application attached to context path /xxx for this virtual host.
    • /expire?path=/xxx&idle=mm - Expire sessions for the context path /xxx which were idle for at least mm minutes.
    • /sslConnectorCiphers - Display diagnostic info on SSL/TLS ciphers that are currently configured for each connector.
    • /start?path=/xxx - Start the web application attached to context path /xxx for this virtual host.
    • /stop?path=/xxx - Stop the web application attached to context path /xxx for this virtual host.
    • /threaddump - Write a JVM thread dump.
    • /undeploy?path=/xxx - Shutdown and remove the web application attached to context path /xxx for this virtual host, and remove the underlying WAR file or document base directory. (NOTE - This is only allowed if the WAR file or document base is stored in the appBase directory of this host, typically as a result of being placed there via the /deploy command.
    • /vminfo - Write some VM info.
    • /save - Save the current server configuration to server.xml
    • /save?path=/xxx - Save the context configuration for the web application deployed with path /xxx to an appropriately named context.xml file in the xmlBase for the associated Host.

    Use path=/ for the ROOT context.

    The syntax of the URL for a web application archive must conform to one of the following patterns to be successfully deployed:

    • file:/absolute/path/to/a/directory - You can specify the absolute path of a directory that contains the unpacked version of a web application. This directory will be attached to the context path you specify without any changes.

    NOTE - Attempting to reload or remove the application containing this servlet itself will not succeed. Therefore, this servlet should generally be deployed as a separate web application within the virtual host to be managed.

    The following servlet initialization parameters are recognized:

    • debug - The debugging detail level that controls the amount of information that is logged by this servlet. Default is zero.
    Author:
    Craig R. McClanahan, Remy Maucherat
    See Also:
    Serialized Form
    • Field Detail

      • configBase

        protected java.io.File configBase
        Path where context descriptors should be deployed.
      • context

        protected transient Context context
        The Context container associated with our web application.
      • debug

        protected int debug
        The debugging detail level for this servlet.
      • versioned

        protected java.io.File versioned
        Path used to store revisions of webapps.
      • host

        protected transient Host host
        The associated host.
      • mBeanServer

        protected transient javax.management.MBeanServer mBeanServer
        MBean server.
      • oname

        protected javax.management.ObjectName oname
        The associated deployer ObjectName.
      • global

        protected transient javax.naming.Context global
        The global JNDI NamingContext for this server, if available.
      • sm

        protected static final StringManager sm
        The string manager for this package.
      • wrapper

        protected transient Wrapper wrapper
        The Wrapper container associated with this servlet.
    • Constructor Detail

      • ManagerServlet

        public ManagerServlet()
    • Method Detail

      • getWrapper

        public Wrapper getWrapper()
        Return the Wrapper with which we are associated.
        Specified by:
        getWrapper in interface ContainerServlet
        Returns:
        The Wrapper with which this Servlet is associated.
      • setWrapper

        public void setWrapper​(Wrapper wrapper)
        Set the Wrapper with which we are associated.
        Specified by:
        setWrapper in interface ContainerServlet
        Parameters:
        wrapper - The new wrapper
      • doPut

        public void doPut​(HttpServletRequest request,
                          HttpServletResponse response)
                   throws java.io.IOException,
                          ServletException
        Process a PUT request for the specified resource.
        Overrides:
        doPut in class HttpServlet
        Parameters:
        request - The servlet request we are processing
        response - The servlet response we are creating
        Throws:
        java.io.IOException - if an input/output error occurs
        ServletException - if a servlet-specified error occurs
      • findleaks

        protected void findleaks​(boolean statusLine,
                                 java.io.PrintWriter writer,
                                 StringManager smClient)
        Find potential memory leaks caused by web application reload.
        Parameters:
        statusLine - Print a status line
        writer - The output writer
        smClient - StringManager for the client's locale
      • sslReload

        protected void sslReload​(java.io.PrintWriter writer,
                                 java.lang.String tlsHostName,
                                 StringManager smClient)
      • vmInfo

        protected void vmInfo​(java.io.PrintWriter writer,
                              StringManager smClient,
                              java.util.Enumeration<java.util.Locale> requestedLocales)
        Write some VM info.
        Parameters:
        writer - The output writer
        smClient - StringManager for the client's locale
        requestedLocales - the client's locales
      • threadDump

        protected void threadDump​(java.io.PrintWriter writer,
                                  StringManager smClient,
                                  java.util.Enumeration<java.util.Locale> requestedLocales)
        Write a JVM thread dump.
        Parameters:
        writer - The output writer
        smClient - StringManager for the client's locale
        requestedLocales - the client's locales
      • sslConnectorCiphers

        protected void sslConnectorCiphers​(java.io.PrintWriter writer,
                                           StringManager smClient)
      • save

        protected void save​(java.io.PrintWriter writer,
                            java.lang.String path,
                            StringManager smClient)
        Store server configuration.
        Parameters:
        writer - Destination for any user message(s) during this operation
        path - Optional context path to save
        smClient - i18n support for current client's locale
      • deploy

        protected void deploy​(java.io.PrintWriter writer,
                              java.lang.String config,
                              ContextName cn,
                              java.lang.String tag,
                              boolean update,
                              HttpServletRequest request,
                              StringManager smClient)
        Deploy a web application archive (included in the current request) at the specified context path.
        Parameters:
        writer - Writer to render results to
        config - URL of the context configuration file to be installed
        cn - Name of the application to be installed
        tag - Tag to be associated with the webapp
        update - Flag that indicates that any existing app should be replaced
        request - Servlet request we are processing
        smClient - i18n messages using the locale of the client
      • deploy

        protected void deploy​(java.io.PrintWriter writer,
                              ContextName cn,
                              java.lang.String tag,
                              StringManager smClient)
        Install an application for the specified path from the specified web application archive.
        Parameters:
        writer - Writer to render results to
        tag - Revision tag to deploy from
        cn - Name of the application to be installed
        smClient - i18n messages using the locale of the client
      • deploy

        protected void deploy​(java.io.PrintWriter writer,
                              java.lang.String config,
                              ContextName cn,
                              java.lang.String war,
                              boolean update,
                              StringManager smClient)
        Install an application for the specified path from the specified web application archive.
        Parameters:
        writer - Writer to render results to
        config - URL of the context configuration file to be installed
        cn - Name of the application to be installed
        war - URL of the web application archive to be installed
        update - true to override any existing webapp on the path
        smClient - i18n messages using the locale of the client
      • list

        protected void list​(java.io.PrintWriter writer,
                            StringManager smClient)
        Render a list of the currently active Contexts in our virtual host.
        Parameters:
        writer - Writer to render to
        smClient - i18n support for current client's locale
      • reload

        protected void reload​(java.io.PrintWriter writer,
                              ContextName cn,
                              StringManager smClient)
        Reload the web application at the specified context path.
        Parameters:
        writer - Writer to render to
        cn - Name of the application to be restarted
        smClient - i18n support for current client's locale
      • resources

        protected void resources​(java.io.PrintWriter writer,
                                 java.lang.String type,
                                 StringManager smClient)
        Render a list of available global JNDI resources.
        Parameters:
        writer - Writer to render to
        type - Fully qualified class name of the resource type of interest, or null to list resources of all types
        smClient - i18n support for current client's locale
      • printResources

        protected void printResources​(java.io.PrintWriter writer,
                                      java.lang.String prefix,
                                      javax.naming.Context namingContext,
                                      java.lang.String type,
                                      StringManager smClient)
        List the resources of the given context.
        Parameters:
        writer - Writer to render to
        prefix - Path for recursion
        namingContext - The naming context for lookups
        type - Fully qualified class name of the resource type of interest, or null to list resources of all types
        smClient - i18n support for current client's locale
      • serverinfo

        protected void serverinfo​(java.io.PrintWriter writer,
                                  StringManager smClient)
        Writes System OS and JVM properties.
        Parameters:
        writer - Writer to render to
        smClient - i18n support for current client's locale
      • sessions

        protected void sessions​(java.io.PrintWriter writer,
                                ContextName cn,
                                int idle,
                                StringManager smClient)
        Session information for the web application at the specified context path. Displays a profile of session thisAccessedTime listing number of sessions for each 10 minute interval up to 10 hours.
        Parameters:
        writer - Writer to render to
        cn - Name of the application to list session information for
        idle - Expire all sessions with idle time > idle for this context
        smClient - i18n support for current client's locale
      • expireSessions

        protected void expireSessions​(java.io.PrintWriter writer,
                                      ContextName cn,
                                      HttpServletRequest req,
                                      StringManager smClient)
        Extract the expiration request parameter
        Parameters:
        writer - Writer to render to
        cn - Name of the application to list session information for
        req - The Servlet request
        smClient - i18n support for current client's locale
      • start

        protected void start​(java.io.PrintWriter writer,
                             ContextName cn,
                             StringManager smClient)
        Start the web application at the specified context path.
        Parameters:
        writer - Writer to render to
        cn - Name of the application to be started
        smClient - i18n support for current client's locale
      • stop

        protected void stop​(java.io.PrintWriter writer,
                            ContextName cn,
                            StringManager smClient)
        Stop the web application at the specified context path.
        Parameters:
        writer - Writer to render to
        cn - Name of the application to be stopped
        smClient - i18n support for current client's locale
      • undeploy

        protected void undeploy​(java.io.PrintWriter writer,
                                ContextName cn,
                                StringManager smClient)
        Undeploy the web application at the specified context path.
        Parameters:
        writer - Writer to render to
        cn - Name of the application to be removed
        smClient - i18n support for current client's locale
      • isDeployed

        protected boolean isDeployed​(java.lang.String name)
                              throws java.lang.Exception
        Invoke the isDeployed method on the deployer.
        Parameters:
        name - The webapp name
        Returns:
        true if a webapp with that name is deployed
        Throws:
        java.lang.Exception - Propagate JMX invocation error
      • check

        protected void check​(java.lang.String name)
                      throws java.lang.Exception
        Invoke the check method on the deployer.
        Parameters:
        name - The webapp name
        Throws:
        java.lang.Exception - Propagate JMX invocation error
      • isServiced

        @Deprecated
        protected boolean isServiced​(java.lang.String name)
                              throws java.lang.Exception
        Deprecated.
        Unused. Will be removed in Tomcat 10.1.x onwards.
        Invoke the isServiced method on the deployer.
        Parameters:
        name - The webapp name
        Returns:
        true if a webapp with that name is being serviced
        Throws:
        java.lang.Exception - Propagate JMX invocation error
      • addServiced

        @Deprecated
        protected void addServiced​(java.lang.String name)
                            throws java.lang.Exception
        Deprecated.
        Unused. Will be removed in Tomcat 10.1.x onwards. Use tryAddServiced(java.lang.String)
        Invoke the addServiced method on the deployer.
        Parameters:
        name - The webapp name
        Throws:
        java.lang.Exception - Propagate JMX invocation error
      • tryAddServiced

        protected boolean tryAddServiced​(java.lang.String name)
                                  throws java.lang.Exception
        Attempt to mark a context as being serviced
        Parameters:
        name - The context name
        Returns:
        true if the application was marked as being serviced and false if the application was already marked as being serviced
        Throws:
        java.lang.Exception - Error invoking the deployer
      • removeServiced

        protected void removeServiced​(java.lang.String name)
                               throws java.lang.Exception
        Invoke the removeServiced method on the deployer.
        Parameters:
        name - The webapp name
        Throws:
        java.lang.Exception - Propagate JMX invocation error
      • uploadWar

        protected void uploadWar​(java.io.PrintWriter writer,
                                 HttpServletRequest request,
                                 java.io.File war,
                                 StringManager smClient)
                          throws java.io.IOException
        Upload the WAR file included in this request, and store it at the specified file location.
        Parameters:
        writer - Writer to render to
        request - The servlet request we are processing
        war - The file into which we should store the uploaded WAR
        smClient - The StringManager used to construct i18n messages based on the Locale of the client
        Throws:
        java.io.IOException - if an I/O error occurs during processing
      • validateContextName

        protected static boolean validateContextName​(ContextName cn,
                                                     java.io.PrintWriter writer,
                                                     StringManager smClient)
      • getConnectorCiphers

        protected java.util.Map<java.lang.String,​java.util.List<java.lang.String>> getConnectorCiphers​(StringManager smClient)
      • getConnectorCerts

        protected java.util.Map<java.lang.String,​java.util.List<java.lang.String>> getConnectorCerts​(StringManager smClient)
      • getConnectorTrustedCerts

        protected java.util.Map<java.lang.String,​java.util.List<java.lang.String>> getConnectorTrustedCerts​(StringManager smClient)