<?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>
        <author email="rslifka@sfu.ca">Robert Slifka</author>
        <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://wiki.apache.org/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 CATALIA_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://wiki.apache.org/tomcat/FAQ">Tomcat FAQ</a></li>
<li><a href="https://wiki.apache.org/tomcat/">Tomcat WIKI</a></li>
<li>Tomcat FAQ at <a href="http://www.jguru.com/faq/home.jsp?topic=Tomcat">jGuru</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>
