<?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="introduction.html">

    &project;

    <properties>
        <title>Introduction</title>
    </properties>

<body>

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

<section name="Introduction">

<p>For administrators and web developers alike, there are some important bits
of information you should familiarize yourself with before starting out. This
document serves as a brief introduction to some of the concepts and
terminology behind the Tomcat container. As well, where to go when you need
help.</p>

</section>


<section name="Terminology">

<p>In the course of reading these documents, you will run across a number of
terms; some specific to Tomcat, and others defined by the
<a href="https://cwiki.apache.org/confluence/display/TOMCAT/Specifications">Servlet and
JSP specifications</a>.</p>

<ul>
<li><strong>Context</strong> - In a nutshell, a Context is a
    web application.</li>
</ul>
<p>That is it. If you find any more terms we need to add to this section, please
do let us know.</p>

</section>


<section name="Directories and Files">

<p>These are some of the key tomcat directories:</p>

<ul>
<li><strong>/bin</strong> - Startup, shutdown, and other scripts. The
    <code>*.sh</code> files (for Unix systems) are functional duplicates of
    the <code>*.bat</code> files (for Windows systems).  Since the Win32
    command-line lacks certain functionality, there are some additional
    files in here.</li>
<li><strong>/conf</strong> - Configuration files and related DTDs.  The most
    important file in here is server.xml.  It is the main configuration file
    for the container.</li>
<li><strong>/logs</strong> - Log files are here by default.</li>
<li><strong>/webapps</strong> - This is where your webapps go.</li>
</ul>

</section>

<section name="CATALINA_HOME and CATALINA_BASE">
  <p>Throughout the documentation, there are references to the two following
    properties:
    <ul>
      <li>
        <strong>CATALINA_HOME</strong>: Represents the root of your Tomcat
        installation, for example <code>/home/tomcat/apache-tomcat-9.0.10</code>
        or <code>C:\Program Files\apache-tomcat-9.0.10</code>.
      </li>
      <li>
        <strong>CATALINA_BASE</strong>: Represents the root of a runtime
        configuration of a specific Tomcat instance. If you want to have
        multiple Tomcat instances on one machine, use the <code>CATALINA_BASE</code>
        property.
      </li>
    </ul>
  </p>
  <p>
    If you set the properties to different locations, the CATALINA_HOME location
    contains static sources, such as <code>.jar</code> files, or binary files.
    The CATALINA_BASE location contains configuration files, log files, deployed
    applications, and other runtime requirements.
  </p>
  <subsection name="Why Use CATALINA_BASE">
    <p>
      By default, CATALINA_HOME and CATALINA_BASE point to the same directory.
      Set CATALINA_BASE manually when you require running multiple Tomcat
      instances on one machine. Doing so provides the following benefits:
    </p>
    <ul>
      <li>
        Easier management of upgrading to a newer version of Tomcat. Because all
        instances with single CATALINA_HOME location share one set of
        <code>.jar</code> files and binary files, you can easily upgrade the files
        to newer version and have the change propagated to all Tomcat instances
        using the same CATALINA_HOME directory.
      </li>
      <li>
        Avoiding duplication of the same static <code>.jar</code> files.
      </li>
      <li>
        The possibility to share certain settings, for example the <code>setenv</code> shell
        or bat script file (depending on your operating system).
      </li>
    </ul>
  </subsection>
  <subsection name="Contents of CATALINA_BASE">
    <p>
      Before you start using CATALINA_BASE, first consider and create the
      directory tree used by CATALINA_BASE. Note that if you do not create
      all the recommended directories, Tomcat creates the directories
      automatically. If it fails to create the necessary directory, for example
      due to permission issues, Tomcat will either fail to start, or may not
      function correctly.
    </p>
    <p>
      Consider the following list of directories:
      <ul>
        <li>
          <p>
            The <code>bin</code> directory with the <code>setenv.sh</code>,
            <code>setenv.bat</code>, and <code>tomcat-juli.jar</code> files.
          </p>
          <p>
            <i>Recommended:</i> No.
          </p>
          <p>
            <i>Order of lookup:</i> CATALINA_BASE is checked first; fallback is provided
            to CATALINA_HOME.
          </p>
        </li>
        <li>
          <p>
            The <code>lib</code> directory with further resources to be added on
            classpath.
          </p>
          <p>
            <i>Recommended:</i> Yes, if your application depends on external libraries.
          </p>
          <p>
            <i>Order of lookup:</i> CATALINA_BASE is checked first; CATALINA_HOME is
            loaded second.
          </p>
        </li>
        <li>
          <p>
            The <code>logs</code> directory for instance-specific log files.
          </p>
          <p>
            <i>Recommended:</i> Yes.
          </p>
        </li>
        <li>
          <p>
            The <code>webapps</code> directory for automatically loaded web
            applications.
          </p>
          <p>
            <i>Recommended:</i> Yes, if you want to deploy applications.
          </p>
          <p>
            <i>Order of lookup:</i> CATALINA_BASE only.
          </p>
        </li>
        <li>
          <p>
            The <code>work</code> directory that contains temporary working
            directories for the deployed web applications.
          </p>
          <p>
            <i>Recommended:</i> Yes.
          </p>
        </li>
        <li>
          <p>
            The <code>temp</code> directory used by the JVM for temporary files.
          </p>
          <p>
            <i>Recommended:</i> Yes.
          </p>
        </li>
      </ul>
    </p>
    <p>
      We recommend you not to change the <code>tomcat-juli.jar</code> file.
      However, in case you require your own logging implementation, you can
      replace the <code>tomcat-juli.jar</code> file in a CATALINA_BASE location
      for the specific Tomcat instance.
    </p>
    <p>
      We also recommend you copy all configuration files from the
      <code>CATALINA_HOME/conf</code> directory into the
      <code>CATALINA_BASE/conf/</code> directory. In case a configuration file
      is missing in CATALINA_BASE, there is no fallback to CATALINA_HOME.
      Consequently, this may cause failure.
    </p>
    <p>
      At minimum, CATALINA_BASE must contain:
      <ul>
        <li>conf/server.xml</li>
        <li>conf/web.xml</li>
      </ul>
      That includes the <code>conf</code> directory. Otherwise, Tomcat fails
      to start, or fails to function properly.
    </p>
    <p>
      For advanced configuration information, see the
      <a href="https://tomcat.apache.org/tomcat-9.0-doc/RUNNING.txt">
        RUNNING.txt
      </a> file.
    </p>
  </subsection>
  <subsection name="How to Use CATALINA_BASE">
    <p>
      The CATALINA_BASE property is an environment variable. You can set it
      before you execute the Tomcat start script, for example:
      <ul>
        <li>On Unix: <code>CATALINA_BASE=/tmp/tomcat_base1 bin/catalina.sh start</code></li>
        <li>On Windows: <code>CATALINA_BASE=C:\tomcat_base1 bin/catalina.bat start</code></li>
      </ul>
    </p>
  </subsection>
</section>


<section name="Configuring Tomcat">

<p>This section will acquaint you with the basic information used during
the configuration of the container.</p>

<p>All of the information in the configuration files is read at startup,
meaning that any change to the files necessitates a restart of the container.
</p>

</section>


<section name="Where to Go for Help">

<p>While we've done our best to ensure that these documents are clearly
written and easy to understand, we may have missed something.  Provided
below are various web sites and mailing lists in case you get stuck.</p>

<p>Keep in mind that some of the issues and solutions vary between the
major versions of Tomcat.  As you search around the web, there will be
some documentation that is not relevant to Tomcat <version-major/>, but
only to earlier versions.</p>

<ul>
<li>Current document - most documents will list potential hangups. Be sure
    to fully read the relevant documentation as it will save you much time
    and effort. There's nothing like scouring the web only to find out that
    the answer was right in front of you all along!</li>
<li><a href="https://cwiki.apache.org/confluence/display/TOMCAT/FAQ">Tomcat FAQ</a></li>
<li><a href="https://cwiki.apache.org/confluence/display/TOMCAT/">Tomcat WIKI</a></li>
<li>Tomcat mailing list archives - numerous sites archive the Tomcat mailing
    lists. Since the links change over time, clicking here will search
    <a href="https://www.google.com/search?q=tomcat+mailing+list+archives">Google</a>.
    </li>
<li>The TOMCAT-USER mailing list, which you can subscribe to
    <a href="https://tomcat.apache.org/lists.html">here</a>. If you don't
    get a reply, then there's a good chance that your question was probably
    answered in the list archives or one of the FAQs.  Although questions
    about web application development in general are sometimes asked and
    answered, please focus your questions on Tomcat-specific issues.</li>
<li>The TOMCAT-DEV mailing list, which you can subscribe to
    <a href="https://tomcat.apache.org/lists.html">here</a>.  This list is
    <strong>reserved</strong> for discussions about the development of Tomcat
    itself.  Questions about Tomcat configuration, and the problems you run
    into while developing and running applications, will normally be more
    appropriate on the TOMCAT-USER list instead.</li>
</ul>

<p>And, if you think something should be in the docs, by all means let us know
on the TOMCAT-DEV list.</p>

</section>

</body>

</document>
