<!--
  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 html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8" />
<title>Apache Tomcat @VERSION@</title>
<style type="text/css">
body { font-family: Arial, Helvetica, sans-serif; font-size: 11pt; }
dd { margin-top: 0.2em; margin-bottom: 0.5em; }
</style>
</head>
<body>

<h1 style="font-size: 1.3em;">Apache Tomcat @VERSION@</h1>
<p>Useful references:</p>
<ul>
<li><a href="../RELEASE-NOTES">Release notes</a>, with important information
about known issues</li>
<li><a href="https://tomcat.apache.org/tomcat-@VERSION_MAJOR_MINOR@-doc/changelog.html">Changelog</a></li>
</ul>

<p><b>NOTE: The tar files in this distribution use GNU tar extensions,
and must be untarred with a GNU compatible version of tar. The version
of <code>tar</code> on Solaris and Mac OS X will not work with
these files.</b></p>

<p style="color: red;">Tomcat @VERSION_MAJOR_MINOR@ requires Java SE 7 or later. Read the
RELEASE-NOTES and the RUNNING.txt file in the distribution for more details.
</p>

<h2 style="font-size: 1.1em;">Packaging Details (or "What Should I Download?")</h2>
<dl>
<dt><b>bin/</b></dt>
<dd><dl>
  <dt>apache-tomcat-[version].zip or .tar.gz</dt>
    <dd>Base distribution. These distributions do not include the Windows
    service wrapper nor the compiled APR/native library for Windows.</dd>
  <dt>apache-tomcat-[version].exe</dt>
    <dd>32-bit/64-bit Windows installer for Tomcat. &#xa0; Please note that while this
    distribution includes the vast majority of the base distribution, some of the
    command-line scripts for launching Tomcat are not included.  This distribution
    is intended for those users planning to launch Tomcat through the Windows
    shortcuts or services.</dd>
  <dt>apache-tomcat-[version]-windows-x86.zip</dt>
    <dd>32-bit Windows specific distribution that includes the Windows service
    wrapper and the compiled APR/native library for use with 32-bit JVMs on both
    32 and 64 bit Windows platforms.</dd>
  <dt>apache-tomcat-[version]-windows-x64.zip</dt>
    <dd>64-bit Windows specific distribution that includes the Windows service
    wrapper and the compiled APR/native library for use with 64-bit JVMs on
    x64 Windows platforms.</dd>
  <dt>apache-tomcat-[version]-deployer.zip or .tar.gz</dt>
    <dd>The standalone
    <a href="https://tomcat.apache.org/tomcat-@VERSION_MAJOR_MINOR@-doc/deployer-howto.html">
    Tomcat Web Application Deployer</a>.</dd>
  <dt>apache-tomcat-[version]-fulldocs.tar.gz</dt>
    <dd>The Tomcat documentation bundle, including complete javadocs.</dd>
</dl></dd>
<dt><b>bin/extras/</b></dt>
<dd><dl>
  <dt>tomcat-juli-adapters.jar &amp; tomcat-juli.jar</dt>
    <dd>Full commons-logging implementation. See the <a
    href="http://tomcat.apache.org/tomcat-@VERSION_MAJOR_MINOR@-doc/logging.html">
    logging documentation</a> for more information.</dd>
  <dt>catalina-ws.jar</dt>
    <dd>Web Services support (JSR 109). See the <a
    href="https://tomcat.apache.org/tomcat-@VERSION_MAJOR_MINOR@-doc/extras.html">
    extras documentation</a> for more information.</dd>
  <dt>catalina-jmx-remote.jar</dt>
    <dd>JMX Remote Lifecycle Listener. See the <a
    href="https://tomcat.apache.org/tomcat-@VERSION_MAJOR_MINOR@-doc/config/listeners.html">
    listeners documentation</a> for details.</dd>
</dl></dd>
<dt><b>src/</b></dt>
<dd><dl>
  <dt>apache-tomcat-[version].zip or .tar.gz</dt>
    <dd>The source code. See
    <a href="https://tomcat.apache.org/tomcat-@VERSION_MAJOR_MINOR@-doc/building.html">building instructions</a>.</dd>
</dl></dd>
</dl>

<p>Thank you for using <a href="https://tomcat.apache.org/">Tomcat</a>!.
</p>
<p><b>The Apache Tomcat Project</b> <br /><a
href="https://tomcat.apache.org/">https://tomcat.apache.org/</a></p>
</body></html>
