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

  &project;

  <properties>
    <author email="yoavs@apache.org">Yoav Shapira</author>
    <title>Table of Contents</title>
  </properties>

<body>


<section name="Preface">

<p>This section of the Tomcat documentation attempts to explain
the architecture and design of the Tomcat server.  It includes significant
contributions from several tomcat developers:
</p>
<ul>
<li>Yoav Shapira
    (<a href="mailto:yoavs@apache.org">yoavs@apache.org</a>)</li>
<li>Jeanfrancois Arcand
    (<a href="mailto:jfarcand@apache.org">jfarcand@apache.org</a>)</li>
<li>Filip Hanik
    (<a href="mailto:fhanik@apache.org">fhanik@apache.org</a>)</li>
</ul>

</section>


<section name="Table of Contents">

<p>The information presented is divided into the following sections:</p>
<ul>
<li><a href="overview.html"><strong>Overview</strong></a> -
    An overview of the Tomcat server architecture with key terms
    and concepts.</li>
<li><a href="startup.html"><strong>Server Startup</strong></a> -
    A detailed description, with sequence diagrams, of how the Tomcat
    server starts up.</li>
<li><a href="requestProcess.html"><strong>Request Process Flow</strong></a> -
    A detailed description of how Tomcat handles a request.</li>
</ul>

</section>


</body>
</document>
