<?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="craigmcc@apache.org">Craig R. McClanahan</author>
    <author email="remm@apache.org">Remy Maucherat</author>
    <author email="yoavs@apache.org">Yoav Shapira</author>
    <title>Documentation Index</title>
  </properties>

<body>

<section name="Introduction">

<p>This is the top-level entry point of the documentation bundle for the
<strong>Apache Tomcat</strong> Servlet/JSP container.  Apache Tomcat version
<version-major-minor/> implements the Servlet 3.1 and JavaServer Pages 2.3
<a href="https://wiki.apache.org/tomcat/Specifications">specifications</a> from the
<a href="https://www.jcp.org">Java Community Process</a>, and includes many
additional features that make it a useful platform for developing and deploying
web applications and web services.</p>

<p>Select one of the links from the navigation menu (to the left) to drill
down to the more detailed documentation that is available.  Each available
manual is described in more detail below.</p>

</section>


<section name="Apache Tomcat User Guide">

<p>The following documents will assist you in downloading and installing
Apache Tomcat, and using many of the Apache Tomcat features.</p>

<ol>
<li><a href="introduction.html"><strong>Introduction</strong></a> - A
    brief, high level, overview of Apache Tomcat.</li>
<li><a href="setup.html"><strong>Setup</strong></a> - How to install and run
    Apache Tomcat on a variety of platforms.</li>
<li><a href="appdev/index.html"><strong>First web application</strong></a>
    - An introduction to the concepts of a <em>web application</em> as defined
    in the Servlet Specification.  Covers basic organization of your web application
    source tree, the structure of a web application archive, and an
    introduction to the web application deployment descriptor
    (<code>/WEB-INF/web.xml</code>).</li>
<li><a href="deployer-howto.html"><strong>Deployer</strong></a> -
    Operating the Apache Tomcat Deployer to deploy, precompile, and validate web
    applications.</li>
<li><a href="manager-howto.html"><strong>Manager</strong></a> -
    Operating the <strong>Manager</strong> web app to deploy, undeploy, and
    redeploy applications while Apache Tomcat is running.</li>
<li><a href="host-manager-howto.html"><strong>Host Manager</strong></a> -
    Operating the <strong>Host Manager</strong> web app to add and remove
    virtual hosts while Apache Tomcat is running.</li>
<li><a href="realm-howto.html"><strong>Realms and Access Control</strong></a>
    - Description of how to configure <em>Realms</em> (databases of users,
    passwords, and their associated roles) for use in web applications that
    utilize <em>Container Managed Security</em>.</li>
<li><a href="security-manager-howto.html"><strong>Security Manager</strong></a>
    - Configuring and using a Java Security Manager to
    support fine-grained control over the behavior of your web applications.
    </li>
<li><a href="jndi-resources-howto.html"><strong>JNDI Resources</strong></a>
    - Configuring standard and custom resources in the JNDI naming context
    that is provided to each web application.</li>
<li><a href="jndi-datasource-examples-howto.html">
    <strong>JDBC DataSource</strong></a>
    - Configuring a JNDI DataSource with a DB connection pool.
    Examples for many popular databases.</li>
<li><a href="class-loader-howto.html"><strong>Classloading</strong></a>
    - Information about class loading in Apache Tomcat, including where to place
    your application classes so that they are visible.</li>
<li><a href="jasper-howto.html"><strong>JSPs</strong></a>
    - Information about Jasper configuration, as well as the JSP compiler
    usage.</li>
<li><a href="ssl-howto.html"><strong>SSL/TLS</strong></a> -
    Installing and configuring SSL/TLS support so that your Apache Tomcat will
    serve requests using the <code>https</code> protocol.</li>
<li><a href="ssi-howto.html"><strong>SSI</strong></a> -
    Using Server Side Includes in Apache Tomcat.</li>
<li><a href="cgi-howto.html"><strong>CGI</strong></a> -
    Using CGIs with Apache Tomcat.</li>
<li><a href="proxy-howto.html"><strong>Proxy Support</strong></a> -
    Configuring Apache Tomcat to run behind a proxy server (or a web server
    functioning as a proxy server).</li>
<li><a href="mbeans-descriptors-howto.html"><strong>MBeans Descriptors</strong></a> -
    Configuring MBean descriptors files for custom components.</li>
<li><a href="default-servlet.html"><strong>Default Servlet</strong></a> -
    Configuring the default servlet and customizing directory listings.</li>
<li><a href="cluster-howto.html"><strong>Apache Tomcat Clustering</strong></a> -
    Enable session replication in a Apache Tomcat environment.</li>
<li><a href="balancer-howto.html"><strong>Balancer</strong></a> -
    Configuring, using, and extending the load balancer application.</li>
<li><a href="connectors.html"><strong>Connectors</strong></a> -
    Connectors available in Apache Tomcat, and native web server integration.</li>
<li><a href="monitoring.html"><strong>Monitoring and Management</strong></a> -
    Enabling JMX Remote support, and using tools to monitor and manage Apache Tomcat.</li>
<li><a href="logging.html"><strong>Logging</strong></a> -
    Configuring logging in Apache Tomcat.</li>
<li><a href="apr.html"><strong>Apache Portable Runtime</strong></a> -
    Using APR to provide superior performance, scalability and better
    integration with native server technologies.</li>
<li><a href="virtual-hosting-howto.html"><strong>Virtual Hosting</strong></a> -
    Configuring virtual hosting in Apache Tomcat.</li>
<li><a href="aio.html"><strong>Advanced IO</strong></a> -
    Extensions available over regular, blocking IO.</li>
<li><a href="extras.html"><strong>Additional Components</strong></a> -
    Obtaining additional, optional components.</li>
<li><a href="maven-jars.html"><strong>Using Tomcat libraries with Maven</strong></a> -
    Obtaining Tomcat jars through Maven.</li>
<li><a href="security-howto.html"><strong>Security Considerations</strong></a> -
    Options to consider when securing an Apache Tomcat installation.</li>
<li><a href="windows-service-howto.html"><strong>Windows Service</strong></a> -
    Running Tomcat as a service on Microsoft Windows.</li>
<li><a href="windows-auth-howto.html"><strong>Windows Authentication</strong></a> -
    Configuring Tomcat to use integrated Windows authentication.</li>
<li><a href="jdbc-pool.html"><strong>High Concurrency JDBC Pool</strong></a> -
    Configuring Tomcat to use an alternative JDBC pool.</li>
<li><a href="web-socket-howto.html"><strong>WebSocket support</strong></a> -
    Developing WebSocket applications for Apache Tomcat.</li>
<li><a href="rewrite.html"><strong>URL rewrite</strong></a> -
    Using the regexp based rewrite valve for conditional URL and host rewrite.</li>

</ol>

</section>


<section name="Reference">

<p>The following documents are aimed at <em>System Administrators</em> who
are responsible for installing, configuring, and operating an Apache Tomcat server.
</p>
<ul>
<li><a href="RELEASE-NOTES.txt"><strong>Release notes</strong></a>
    - Known issues in this Apache Tomcat release.
    </li>
<li><a href="config/index.html"><strong>Apache Tomcat Server Configuration Reference</strong></a>
    - Reference manual that documents all available elements and attributes
      that may be placed into the Apache Tomcat <code>conf/server.xml</code> file.
    </li>
<li><a href="https://tomcat.apache.org/connectors-doc/index.html"><strong>JK Documentation</strong></a>
    - Complete documentation and HOWTOs on the JK native webserver connector,
      used to interface Apache Tomcat with servers like Apache HTTPd, IIS
      and others.</li>
<li>Servlet 3.1
    <a href="http://jcp.org/aboutJava/communityprocess/final/jsr340/index.html">
    <strong>Specification</strong></a> and
    <a href="http://docs.oracle.com/javaee/7/api/javax/servlet/package-summary.html">
    <strong>Javadoc</strong></a>
    </li>
<li>JSP 2.3
    <a href="https://jcp.org/aboutJava/communityprocess/mrel/jsr245/index2.html">
    <strong>Specification</strong></a> and
    <a href="http://docs.oracle.com/javaee/7/api/javax/servlet/jsp/package-summary.html">
    <strong>Javadoc</strong></a>
    </li>
<li>EL 3.0
    <a href="https://jcp.org/aboutJava/communityprocess/final/jsr341/index.html">
    <strong>Specification</strong></a> and
    <a href="http://docs.oracle.com/javaee/7/api/javax/el/package-summary.html">
    <strong>Javadoc</strong></a>
    </li>
<li>WebSocket 1.1
    <a href="https://jcp.org/aboutJava/communityprocess/mrel/jsr356/index.html">
    <strong>Specification</strong></a> and
    <a href="http://docs.oracle.com/javaee/7/api/javax/websocket/package-summary.html">
    <strong>Javadoc</strong></a>
    </li>
</ul>

</section>


<section name="Apache Tomcat Developers">

<p>The following documents are for Java developers who wish to contribute to
the development of the <em>Apache Tomcat</em> project.</p>
<ul>
<li><a href="building.html"><strong>Building from Source</strong></a> -
    Details the steps necessary to download Apache Tomcat source code (and the
    other packages that it depends on), and build a binary distribution from
    those sources.
    </li>
<li><a href="changelog.html"><strong>Changelog</strong></a> - Details the
    changes made to Apache Tomcat.
    </li>
<li><a href="https://wiki.apache.org/tomcat/TomcatVersions"><strong>Status</strong></a> -
    Apache Tomcat development status.
    </li>
<li><a href="developers.html"><strong>Developers</strong></a> - List of active
    Apache Tomcat contributors.
    </li>
<li><a href="funcspecs/index.html"><strong>Functional Specifications</strong></a>
    - Requirements specifications for features of the <em>Catalina</em> servlet
    container portion of Apache Tomcat.</li>
<li><a href="api/index.html"><strong>Javadocs</strong></a>
    - Javadoc API documentation for Apache Tomcat's internals.</li>
<li><a href="architecture/index.html"><strong>Apache Tomcat Architecture</strong></a>
    - Documentation of the Apache Tomcat Server Architecture.</li>
</ul>

</section>


</body>
</document>
