<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!DOCTYPE document [
  <!ENTITY project SYSTEM "project.xml">
]>
<document url="server.html">

  &project;

  <properties>
    <author email="craigmcc@apache.org">Craig R. McClanahan</author>
    <title>The Server Component</title>
  </properties>

<body>

<section name="Table of Contents">
<toc/>
</section>

<section name="Introduction">

  <p>A <strong>Server</strong> element represents the entire Catalina
  servlet container.  Therefore, it must be the single outermost element
  in the <code>conf/server.xml</code> configuration file.  Its attributes
  represent the characteristics of the servlet container as a whole.</p>

</section>


<section name="Attributes">

  <subsection name="Common Attributes">

  <p>All implementations of <strong>Server</strong>
  support the following attributes:</p>

  <attributes>

    <attribute name="className" required="false">
      <p>Java class name of the implementation to use.  This class must
      implement the <code>org.apache.catalina.Server</code> interface.
      If no class name is specified, the standard implementation will
      be used.</p>
    </attribute>

    <attribute name="address" required="false">
      <p>The TCP/IP address on which this server waits for a shutdown
      command. If no address is specified, <code>localhost</code> is used.</p>
    </attribute>

    <attribute name="port" required="true">
      <p>The TCP/IP port number on which this server waits for a shutdown
      command. Set to <code>-1</code> to disable the shutdown port.</p>
      <p>Note: Disabling the shutdown port works well when Tomcat is started
      using <a href="https://commons.apache.org/daemon/">Apache Commons Daemon</a>
      (running as a service on Windows or with jsvc on un*xes). It cannot be
      used when running Tomcat with the standard shell scripts though, as it
      will prevent shutdown.bat|.sh and catalina.bat|.sh from stopping it
      gracefully.</p>
    </attribute>

    <attribute name="shutdown" required="true">
      <p>The command string that must be received via a TCP/IP connection
      to the specified port number, in order to shut down Tomcat.</p>
    </attribute>

  </attributes>

  </subsection>

  <subsection name="Standard Implementation">

  <p>The standard implementation of <strong>Server</strong> is
  <strong>org.apache.catalina.core.StandardServer</strong>.
  It supports the following additional attributes (in addition to the
  common attributes listed above):</p>

  <attributes>
  </attributes>

  </subsection>

</section>


<section name="Nested Components">

  <p>The following components may be nested inside a <strong>Server</strong>
  element:</p>
  <ul>
  <li><a href="service.html"><strong>Service</strong></a> -
      One or more service element.</li>
  <li><a href="globalresources.html"><strong>GlobalNamingResources</strong></a> -
      Configure the JNDI global resources for the server.</li>
  </ul>

</section>


<section name="Special Features">

  <p>There are no special features associated with a <strong>Server</strong>.
  </p>

</section>


</body>

</document>
