Package org.apache.catalina.manager.host

# Class HostManagerServlet

java.lang.Object
javax.servlet.GenericServlet
javax.servlet.http.HttpServlet
org.apache.catalina.manager.host.HostManagerServlet

All Implemented Interfaces:
  `Serializable`, `Servlet`, `ServletConfig`, `ContainerServlet`

Direct Known Subclasses:
  `HTMLHostManagerServlet`

public class HostManagerServlet extends HttpServlet implements ContainerServlet
Servlet that enables remote management of the virtual hosts installed on the server. 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:

- /add?name={host-name}&aliases={host-aliases}&manager={manager} - Create and add a new virtual host. The `host-name` attribute indicates the name of the new host. The `host-aliases` attribute is a comma separated list of the host alias names. The `manager` attribute is a boolean value indicating if the webapp manager will be installed in the newly created host (optional, false by default).
- /remove?name={host-name} - Remove a virtual host. The `host-name` attribute indicates the name of the host.
- /list - List the virtual hosts installed on the server. Each host will be listed with the following format `host-name#host-aliases`.
- /start?name={host-name} - Start the virtual host.
- /stop?name={host-name} - Stop the virtual host.

NOTE - Attempting to stop or remove the host containing this servlet itself will not succeed. Therefore, this servlet should generally be deployed in a separate virtual host.

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 Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected Context`
  `context`
  The Context container associated with our web application.
  `protected int`
  `debug`
  The debugging detail level for this servlet.
  `protected Engine`
  `engine`
  The associated engine.
  `protected Host`
  `installedHost`
  The associated host.
  `protected static final StringManager`
  `sm`
  The string manager for this package.
  `protected Wrapper`
  `wrapper`
  The Wrapper container associated with this servlet.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `HostManagerServlet()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected void`
  `add(PrintWriter writer, String name, String aliases, String appBase, boolean manager, boolean autoDeploy, boolean deployOnStartup, boolean deployXML, boolean unpackWARs, boolean copyXML, StringManager smClient)`
  Add a host using the specified parameters.
  `protected void`
  `add(HttpServletRequest request, PrintWriter writer, String name, boolean htmlMode, StringManager smClient)`
  Add host with the given parameters.
  `protected boolean`
  `booleanParameter(HttpServletRequest request, String parameter, boolean theDefault, boolean htmlMode)`
  Extract boolean value from checkbox with default.
  `void`
  `destroy()`
  Finalize this servlet.
  `void`
  `doGet(HttpServletRequest request, HttpServletResponse response)`
  Process a GET request for the specified resource.
  `protected File`
  `getConfigBase(String hostName)`
  Get config base.
  `Wrapper`
  `getWrapper()`
  Return the Wrapper with which we are associated.
  `void`
  `init()`
  A convenience method which can be overridden so that there's no need to call `super.init(config)`.
  `protected void`
  `list(PrintWriter writer, StringManager smClient)`
  Render a list of the currently active Contexts in our virtual host.
  `protected void`
  `persist(PrintWriter writer, StringManager smClient)`
  Persist the current configuration to server.xml.
  `protected void`
  `remove(PrintWriter writer, String name, StringManager smClient)`
  Remove the specified host.
  `void`
  `setWrapper(Wrapper wrapper)`
  Set the Wrapper with which we are associated.
  `protected void`
  `start(PrintWriter writer, String name, StringManager smClient)`
  Start the host with the specified name.
  `protected void`
  `stop(PrintWriter writer, String name, StringManager smClient)`
  Stop the host with the specified name.

  ### Methods inherited from class javax.servlet.http.HttpServlet

  `doDelete, doHead, doOptions, doPost, doPut, doTrace, getLastModified, service, service`

  ### Methods inherited from class javax.servlet.GenericServlet

  `getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init, log, log`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### context

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

  - ### debug

    protected int debug
    The debugging detail level for this servlet.

  - ### installedHost

    protected transient Host installedHost
    The associated host.

  - ### engine

    protected transient Engine engine
    The associated engine.

  - ### 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 Details

  - ### HostManagerServlet

    public HostManagerServlet()

- ## Method Details

  - ### 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

  - ### destroy

    public void destroy()
    Finalize this servlet.
    Specified by:
      `destroy` in interface `Servlet`
    Overrides:
      `destroy` in class `GenericServlet`

  - ### doGet

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    Process a GET request for the specified resource.
    Overrides:
      `doGet` in class `HttpServlet`
    Parameters:
      `request` - The servlet request we are processing
      `response` - The servlet response we are creating
    Throws:
      `IOException` - if an input/output error occurs
      `ServletException` - if a servlet-specified error occurs
    See Also:
      - `ServletResponse.setContentType(java.lang.String)`

  - ### add

    protected void add(HttpServletRequest request, PrintWriter writer, String name, boolean htmlMode, StringManager smClient)
    Add host with the given parameters.
    Parameters:
      `request` - The request
      `writer` - The output writer
      `name` - The host name
      `htmlMode` - Flag value
      `smClient` - StringManager for the client's locale

  - ### booleanParameter

    protected boolean booleanParameter(HttpServletRequest request, String parameter, boolean theDefault, boolean htmlMode)
    Extract boolean value from checkbox with default.
    Parameters:
      `request` - The Servlet request
      `parameter` - The parameter name
      `theDefault` - Default value
      `htmlMode` - Flag value
    Returns:
      the boolean value for the parameter

  - ### init

    public void init() throws ServletException
    Description copied from class: `javax.servlet.GenericServlet`
    A convenience method which can be overridden so that there's no need to call `super.init(config)`.

    Instead of overriding `GenericServlet.init(ServletConfig)`, simply override this method and it will be called by `GenericServlet.init(ServletConfig config)`. The `ServletConfig` object can still be retrieved via `GenericServlet.getServletConfig()`.

    Overrides:
      `init` in class `GenericServlet`
    Throws:
      `ServletException` - if an exception occurs that interrupts the servlet's normal operation

  - ### add

    protected void add(PrintWriter writer, String name, String aliases, String appBase, boolean manager, boolean autoDeploy, boolean deployOnStartup, boolean deployXML, boolean unpackWARs, boolean copyXML, StringManager smClient)
    Add a host using the specified parameters.
    Parameters:
      `writer` - Writer to render results to
      `name` - host name
      `aliases` - comma separated alias list
      `appBase` - application base for the host
      `manager` - should the manager webapp be deployed to the new host ?
      `autoDeploy` - Flag value
      `deployOnStartup` - Flag value
      `deployXML` - Flag value
      `unpackWARs` - Flag value
      `copyXML` - Flag value
      `smClient` - StringManager for the client's locale

  - ### remove

    protected void remove(PrintWriter writer, String name, StringManager smClient)
    Remove the specified host.
    Parameters:
      `writer` - Writer to render results to
      `name` - host name
      `smClient` - StringManager for the client's locale

  - ### list

    protected void list(PrintWriter writer, StringManager smClient)
    Render a list of the currently active Contexts in our virtual host.
    Parameters:
      `writer` - Writer to render to
      `smClient` - StringManager for the client's locale

  - ### start

    protected void start(PrintWriter writer, String name, StringManager smClient)
    Start the host with the specified name.
    Parameters:
      `writer` - Writer to render to
      `name` - Host name
      `smClient` - StringManager for the client's locale

  - ### stop

    protected void stop(PrintWriter writer, String name, StringManager smClient)
    Stop the host with the specified name.
    Parameters:
      `writer` - Writer to render to
      `name` - Host name
      `smClient` - StringManager for the client's locale

  - ### persist

    protected void persist(PrintWriter writer, StringManager smClient)
    Persist the current configuration to server.xml.
    Parameters:
      `writer` - Writer to render to
      `smClient` - i18n resources localized for the client

  - ### getConfigBase

    protected File getConfigBase(String hostName)
    Get config base.
    Parameters:
      `hostName` - The host name
    Returns:
      the config base for the host