blob: 6a0483961ad3923d62e9b10026df1fe4475f928c [file]
<!DOCTYPE html SYSTEM "about:legacy-compat">
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link href="res/css/tomcat.css" rel="stylesheet" type="text/css"><link href="res/css/fonts/fonts.css" rel="stylesheet" type="text/css"><title>Apache Tomcat&reg; - Migration Guide - Tomcat 9.0.x</title><meta name="author" content="Apache Tomcat Project"><script src="https://www.apachecon.com/event-images/snippet.js"></script></head><body><div id="wrapper"><header id="header"><div class="clearfix"><div class="menu-toggler pull-left" tabindex="1"><div class="hamburger"></div></div><a href="http://tomcat.apache.org/"><img class="tomcat-logo pull-left noPrint" alt="Tomcat Home" src="res/images/tomcat.png"></a><h1 class="pull-left">Apache Tomcat<sup>&reg;</sup></h1><div class="asf-logos pull-right"><a href="https://www.apache.org/foundation/contributing.html" target="_blank" class="pull-left"><img src="https://www.apache.org/images/SupportApache-small.png" class="support-asf" alt="Support Apache"></a><a href="http://www.apache.org/" target="_blank" class="pull-left"><img src="res/images/asf_logo_wide.svg" class="asf-logo" alt="The Apache Software Foundation"></a></div></div></header><main id="middle"><div><div id="mainLeft"><div id="nav-wrapper"><form action="https://www.google.com/search" method="get"><div class="searchbox"><input value="tomcat.apache.org" name="sitesearch" type="hidden"><input aria-label="Search text" placeholder="Search&hellip;" required="required" name="q" id="query" type="search"><button>GO</button></div></form><div class="asfevents"><a class="acevent" data-format="square" data-width="150"></a></div><nav><div><h2>Apache Tomcat</h2><ul><li><a href="./index.html">Home</a></li><li><a href="./taglibs.html">Taglibs</a></li><li><a href="./maven-plugin.html">Maven Plugin</a></li></ul></div><div><h2>Download</h2><ul><li><a href="./whichversion.html">Which version?</a></li><li><a href="https://tomcat.apache.org/download-11.cgi">Tomcat 11</a></li><li><a href="https://tomcat.apache.org/download-10.cgi">Tomcat 10</a></li><li><a href="https://tomcat.apache.org/download-90.cgi">Tomcat 9</a></li><li><a href="https://tomcat.apache.org/download-migration.cgi">Tomcat Migration Tool for Jakarta EE</a></li><li><a href="https://tomcat.apache.org/download-connectors.cgi">Tomcat Connectors</a></li><li><a href="https://tomcat.apache.org/download-native.cgi">Tomcat Native</a></li><li><a href="https://tomcat.apache.org/download-taglibs.cgi">Taglibs</a></li><li><a href="https://archive.apache.org/dist/tomcat/">Archives</a></li></ul></div><div><h2>Documentation</h2><ul><li><a href="./tomcat-11.0-doc/index.html">Tomcat 11.0</a></li><li><a href="./tomcat-10.1-doc/index.html">Tomcat 10.1</a></li><li><a href="./tomcat-9.0-doc/index.html">Tomcat 9.0</a></li><li><a href="./upgrading.html">Upgrading</a></li><li><a href="./connectors-doc/index.html">Tomcat Connectors</a></li><li><a href="./native-doc/index.html">Tomcat Native 2</a></li><li><a href="./native-1.3-doc/index.html">Tomcat Native 1.3</a></li><li><a href="https://cwiki.apache.org/confluence/display/TOMCAT">Wiki</a></li><li><a href="./migration.html">Migration Guide</a></li><li><a href="./presentations.html">Presentations</a></li><li><a href="https://cwiki.apache.org/confluence/x/Bi8lBg">Specifications</a></li></ul></div><div><h2>Problems?</h2><ul><li><a href="./security.html">Security Reports</a></li><li><a href="./findhelp.html">Find help</a></li><li><a href="https://cwiki.apache.org/confluence/display/TOMCAT/FAQ">FAQ</a></li><li><a href="./lists.html">Mailing Lists</a></li><li><a href="./bugreport.html">Bug Database</a></li></ul></div><div><h2>Get Involved</h2><ul><li><a href="./getinvolved.html">Overview</a></li><li><a href="./source.html">Source code</a></li><li><a href="./ci.html">Buildbot</a></li><li><a href="./tools.html">Tools</a></li></ul></div><div><h2>Media</h2><ul><li><a href="https://www.youtube.com/c/ApacheTomcatOfficial">YouTube</a></li></ul></div><div><h2>Misc</h2><ul><li><a href="./whoweare.html">Who We Are</a></li><li><a href="https://www.redbubble.com/people/comdev/works/30885254-apache-tomcat">Swag</a></li><li><a href="./heritage.html">Heritage</a></li><li><a href="http://www.apache.org">Apache Home</a></li><li><a href="./resources.html">Resources</a></li><li><a href="./contact.html">Contact</a></li><li><a href="./legal.html">Legal</a></li><li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy</a></li><li><a href="https://www.apache.org/foundation/contributing.html">Support Apache</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li><li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li><li><a href="http://www.apache.org/licenses/">License</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2 style="display: none;">Content</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
<ul><li><a href="#General">General</a></li><li><a href="#Migrating_from_8.0.x_or_8.5.x_to_9.0.x">Migrating from 8.0.x or 8.5.x to 9.0.x</a><ol><li><a href="#Java_8_required">Java 8 required</a></li><li><a href="#Specification_APIs">Specification APIs</a></li><li><a href="#Servlet_4.0_API">Servlet 4.0 API</a></li><li><a href="#JavaServer_Pages_2.3">JavaServer Pages 2.3</a></li><li><a href="#Expression_Language_3.0">Expression Language 3.0</a></li><li><a href="#WebSocket_1.1">WebSocket 1.1</a></li><li><a href="#BIO_connector_removed">BIO connector removed</a></li><li><a href="#HTTP_connector_changes">HTTP connector changes</a></li><li><a href="#Comet_support_removed">Comet support removed</a></li><li><a href="#HTTP/2_support_added">HTTP/2 support added</a></li><li><a href="#TLS_virtual_hosting_and_multiple_certificate_support_added">TLS virtual hosting and multiple certificate support added</a></li><li><a href="#Internal_APIs">Internal APIs</a></li><li><a href="#JSR-77_implementation_removed">JSR-77 implementation removed</a></li><li><a href="#Clustering">Clustering</a></li><li><a href="#InstanceListener_removed">InstanceListener removed</a></li><li><a href="#SessionManager">SessionManager</a></li><li><a href="#Cookies">Cookies</a></li><li><a href="#Web_applications">Web applications</a></li><li><a href="#Engine_and_Host_configurations">Engine and Host configurations</a></li><li><a href="#Context_configurations">Context configurations</a></li><li><a href="#Logging">Logging</a></li></ol></li><li><a href="#Upgrading_9.0.x">Upgrading 9.0.x</a><ol><li><a href="#Tomcat_9.0.x_noteable_changes">Tomcat 9.0.x noteable changes</a></li><li><a href="#Tomcat_9.0.x_configuration_file_differences">Tomcat 9.0.x configuration file differences</a></li></ol></li></ul>
</div><h3 id="General">General</h3><div class="text">
<p>Please read the general <a href="migration.html">Migration Guide page</a>
first, for common considerations that apply to migration or upgrade between
versions of Apache Tomcat<sup>&reg;</sup>.</p>
</div><h3 id="Migrating_from_8.0.x_or_8.5.x_to_9.0.x">Migrating from 8.0.x or 8.5.x to 9.0.x</h3><div class="text">
<p>This section lists all the known changes between 8.0.x / 8.5.x and 9.0.x
which may cause backwards compatibility problems when upgrading. Some of
these changes and new features are already present in Apache Tomcat 8.5.x.</p>
<div class="subsection"><h4 id="Java_8_required">Java 8 required</h4><div class="text">
<p>Apache Tomcat 9.0.x requires Java 8 or later. Apache Tomcat 8.0.x and 8.5.x
required Java 7.</p>
</div></div>
<div class="subsection"><h4 id="Specification_APIs">Specification APIs</h4><div class="text">
<p>Apache Tomcat 9 supports the Java Servlet 4.0, JavaServer Pages 2.3,
Java Unified Expression Language 3.0 and Java API for WebSocket 1.0
<a href="https://cwiki.apache.org/confluence/display/TOMCAT/Specifications">specifications</a>.
The changes between versions of specifications may be found in the
<em>Changes</em> appendix in each of specification documents.
</p>
</div></div>
<div class="subsection"><h4 id="Servlet_4.0_API">Servlet 4.0 API</h4><div class="text">
<p>In JSP pages that use wildcard import syntax the new classes added in
Servlet API may conflict with ones in web applications.
For example, if package <code>"a"</code> contains class
<code>PushBuilder</code>, the following JSP page will cease to compile in
Tomcat 9:</p>
<div class="codeBox"><pre><code>&lt;%@page import="a.*"%&gt;
&lt;% PushBuilder pushBuilder = new PushBuilder(); %&gt;</code></pre></div>
<p>This happens because the implicit import of
<code>javax.servlet.http.*</code> and the explicit import of
<code>a.*</code> will provide conflicting definitions of class
<code>PushBuilder</code> that was added in Servlet 4.0. The solution is to
use the explicit import, <code>import="a.PushBuilder"</code>.</p>
</div></div>
<div class="subsection"><h4 id="JavaServer_Pages_2.3">JavaServer Pages 2.3</h4><div class="text">
<p>This is unchanged from Tomcat 8.x.</p>
</div></div>
<div class="subsection"><h4 id="Expression_Language_3.0">Expression Language 3.0</h4><div class="text">
<p>This is unchanged from Tomcat 8.x.</p>
</div></div>
<div class="subsection"><h4 id="WebSocket_1.1">WebSocket 1.1</h4><div class="text">
<p>This is unchanged from Tomcat 8.x.</p>
</div></div>
<div class="subsection"><h4 id="BIO_connector_removed">BIO connector removed</h4><div class="text">
<p><em>The following change is present in 8.5.0 onwards.</em></p>
<p>The Java blocking IO implementation (BIO) for both HTTP and AJP has been
removed. Users are recommended to switch to the Java non-blocking IO
implementation (NIO).</p>
</div></div>
<div class="subsection"><h4 id="HTTP_connector_changes">HTTP connector changes</h4><div class="text">
<p>
HTTP reason phrases have been <a href="https://bz.apache.org/bugzilla/show_bug.cgi?id=60362#c60">removed</a>
entirely. Some non-RFC-compliant clients are known to fail when the
reason phrase is missing. Such failures are a problem with the client
and not with Tomcat.
</p>
</div></div>
<div class="subsection"><h4 id="Comet_support_removed">Comet support removed</h4><div class="text">
<p><em>The following change is present in 8.5.0 onwards.</em></p>
<p>Comet support has been removed without a direct replacement. Applications
using Comet are recommended to migrate to WebSockets.</p>
</div></div>
<div class="subsection"><h4 id="HTTP/2_support_added">HTTP/2 support added</h4><div class="text">
<p><em>The following feature is available since 8.5.0 onwards.</em></p>
<p>HTTP/2 is supported for h2 (over TLS, negotiated via ALPN) and h2c (clear
text, negotiated via HTTP/1.1 upgrade). HTTP/2 needs to be explicitly
enabled for a connector. To enable it, insert
<div class="codeBox"><pre><code>&lt;UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" /&gt;</code></pre></div>
inside the connector for which you wish to enable HTTP/2. Note that to
enable HTTP/2 for a secure NIO or NIO2 connector, those connectors must be
using the OpenSSL engine for TLS.</p>
</div></div>
<div class="subsection"><h4 id="TLS_virtual_hosting_and_multiple_certificate_support_added">TLS virtual hosting and multiple certificate support added</h4><div class="text">
<p><em>The following feature is available since 8.5.0 onwards.</em></p>
<p>Tomcat 9 supports multiple TLS virtual hosts for a single connector with
each virtual host able to support multiple certificates. Virtual host
definitions are nested inside the Connector element with the default
specified using the <strong>defaultSSLHostConfigName</strong> attribute on the
Connector if more than one virtual host is specified. Certificate
definitions are nested inside the virtual host.</p>
<p>The following example shows how to use this to configure a single
APR/native connector for multiple TLS virtual hosts with each host having
both an RSA and EC certificate.
<div class="codeBox"><pre><code>
&lt;Connector port="8443"
protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150"
SSLEnabled="true"
defaultSSLHostConfigName="openoffice.apache.org" &gt;
&lt;SSLHostConfig hostName="openoffice.apache.org" &gt;
&lt;Certificate certificateKeyFile="conf/openoffice.apache.org-rsa-key.pem"
certificateFile="conf/openoffice.apache.org-rsa-cert.pem"
type="RSA" /&gt;
&lt;Certificate certificateKeyFile="conf/openoffice.apache.org-ec-key.pem"
certificateFile="conf/openoffice.apache.org-ec-cert.pem"
type="EC" /&gt;
&lt;/SSLHostConfig&gt;
&lt;SSLHostConfig hostName="www.openoffice.org" &gt;
&lt;Certificate certificateKeyFile="conf/www.openoffice.org-rsa-key.pem"
certificateFile="conf/www.openoffice.org-rsa-cert.pem"
type="RSA" /&gt;
&lt;Certificate certificateKeyFile="conf/www.openoffice.org-ec-key.pem"
certificateFile="conf/www.openoffice.org-ec-cert.pem"
type="EC" /&gt;
&lt;/SSLHostConfig&gt;
&lt;/Connector&gt;
</code></pre></div></p>
</div></div>
<div class="subsection"><h4 id="Internal_APIs">Internal APIs</h4><div class="text">
<p>Whilst the Tomcat 9 internal API is broadly compatible with Tomcat 8
there have been many changes at the detail level and they are not binary
compatible. Developers of custom components that interact with Tomcat's
internals should review the JavaDoc for the relevant API.</p>
<p>Of particular note are:</p>
<ul>
<li>Significant refactoring has taken place throughout the connectors to
reduce duplicate code and to align behaviour across
implementations. (<em>This change is present in 8.5.x.</em>)</li>
<li>The deprecated <code>digest</code> attribute has been removed from the
<code>Realm</code>. (<em>This change is present in 8.5.x.</em>)</li>
</ul>
</div></div>
<div class="subsection"><h4 id="JSR-77_implementation_removed">JSR-77 implementation removed</h4><div class="text">
<p><em>The following change is present in 8.5.0 onwards.</em></p>
<p>The JSR-77 implementation is incomplete and has been removed in 8.5.x and 9.0.x.
Specifically, the following methods that exposed to JMX have been removed.
</p>
<ul>
<li><code>StandardContext.getServlets()</code></li>
<li><code>StandardContext.isStateManageable()</code></li>
<li><code>StandardContext.getDeploymentDescriptor()</code></li>
<li><code>StandardWrapper.isStateManageable()</code></li>
</ul>
</div></div>
<div class="subsection"><h4 id="Clustering">Clustering</h4><div class="text">
<p><em>The following change is present in 8.5.0 onwards.</em></p>
<p><code>MessageDispatch15Interceptor</code> had been used to add the Java 5
features to MessageDispatchInterceptor.
<code>MessageDispatch15Interceptor</code> has been removed in Tomcat 8.5.x and 9.0.x
by merging the Java 5 features to <code>MessageDispatchInterceptor</code>.
</p>
</div></div>
<div class="subsection"><h4 id="InstanceListener_removed">InstanceListener removed</h4><div class="text">
<p><em>The following change is present in 8.5.0 onwards.</em></p>
<p>The support of InstanceListener has been removed in 8.5.x and 9.0.x.
Specifically, the following classes have been removed.
</p>
<ul>
<li><code>org.apache.catalina.InstanceListener</code></li>
<li><code>org.apache.catalina.InstanceEvent</code></li>
<li><code>org.apache.catalina.util.InstanceSupport</code></li>
</ul>
</div></div>
<div class="subsection"><h4 id="SessionManager">SessionManager</h4><div class="text">
<p><em>The following change is present in 8.5.0 onwards.</em></p>
<p>The following session manager attributes have been completely removed in
8.5.x and 9.0.x.</p>
<ul>
<li><code>distributable</code></li>
<li><code>maxInactiveInterval</code></li>
<li><code>sessionIdLength</code></li>
</ul>
<p>The replacements are as follows:</p>
<ul>
<li>The <code>distributable</code> attribute has been deprecated in 8.0
and specified value is ignored. This should be configured via the
Context. The value is inherited based on the presence or absence of
the <code>&lt;distributable /&gt;</code> element in
<code>/WEB-INF/web.xml.</code></li>
<li>The <code>maxInactiveInterval</code> attribute has been deprecated in
8.0. If the value is specified, a warning log is issued. This should
be configured via the Context. The value is inherited based on the
value of the <code>&lt;session-timeout&gt;</code> element in
<code>/WEB-INF/web.xml</code>.</li>
<li>The <code>sessionIdLength</code> attribute of <code>Manager</code> has
been replaced by <code>sessionIdLength</code> attribute of
<code>SessionIdGenerator</code>.</li>
</ul>
</div></div>
<div class="subsection"><h4 id="Cookies">Cookies</h4><div class="text">
<p>The default <code>CookieProcessor</code> is now the
<code>Rfc6265CookieProcessor</code>. The <code>CookieProcessor</code> is
configurable per <code>Context</code> and the
<code>LegacyCookieProcessor</code> may be used to obtain the 8.0.x
behaviour.</p>
</div></div>
<div class="subsection"><h4 id="Web_applications">Web applications</h4><div class="text">
<p>The Manager and HostManager web applications are configured by default
with a <code>RemoteAddrValve</code> that limits access to those
applications to connections from localhost.</p>
</div></div>
<div class="subsection"><h4 id="Engine_and_Host_configurations">Engine and Host configurations</h4><div class="text">
<p>The behaviour for <code>startStopThreads</code> has changed when the
effective value is 1. In this case, children will be started on the current
thread rather than via an <code>ExecutorService</code> configured with a
single thread.</p>
</div></div>
<div class="subsection"><h4 id="Context_configurations">Context configurations</h4><div class="text">
<p>The <code>clearReferencesStatic</code> attribute has been removed in
8.5.x and 9.0.x.</p>
</div></div>
<div class="subsection"><h4 id="Logging">Logging</h4><div class="text">
<p>By default the log files will be kept 90 days and then removed from the
file system.</p>
</div></div>
</div><h3 id="Upgrading_9.0.x">Upgrading 9.0.x</h3><div class="text">
<p>When upgrading instances of Apache Tomcat from one version of Tomcat 9 to
another, particularly when using separate locations for $CATALINA_HOME and
$CATALINA_BASE, it is necessary to ensure that any changes in the
configuration files such as new attributes and changes to defaults are applied
as part of the upgrade. To assist with the identification of these changes,
the form below may be used to view the differences between the configuration
files in different versions of Tomcat 9.</p>
<div class="subsection"><h4 id="Tomcat_9.0.x_noteable_changes">Tomcat 9.0.x noteable changes</h4><div class="text">
<p>The Tomcat developers aim for each patch release to be fully backwards
compatible with the previous release. Occasionally, it is necessary to
break backwards compatibility in order to fix a bug. In most cases, these
changes will go unnoticed. This section lists changes that are not fully
backwards compatible and might cause breakage when upgrading.</p>
<ul>
<li>
In 9.0.96, a change was made to the way pooled JSP tags were released,
resulting in a binary incompatiblity between some JSP files compiled
with earlier versions of Apache Tomcat 9. This incompatibility will be
corrected in 9.0.97, so JSPs compiled <i>before</i> 9.0.96 should again
run without recompilation in 9.0.97 and later.
</li>
<li>
In 9.0.74 onwards, the default value for the Connector attribute
<code>maxParameterCount</code> has been reduced from 10,000 to 1,000.
</li>
<li><p>In 9.0.31 onwards, the default listen <strong>address</strong> of
the AJP Connector was changed to the loopback address rather than all
addresses.</p>
<p>Reference: <a href="tomcat-9.0-doc/config/ajp.html">AJP
connector</a>.</p>
</li>
<li><p>In 9.0.31 onwards, the <strong>requiredSecret</strong> attribute
of the AJP Connector was deprecated and replaced by the
<strong>secret</strong> attribute.</p>
<p>Reference: <a href="tomcat-9.0-doc/config/ajp.html">AJP
connector</a>.</p>
</li>
<li><p>In 9.0.31 onwards, the <strong>secretRequired</strong> attribute
was added to the AJP Connector. If set to <code>true</code>, the
default, the AJP Connector will not start unless a
<strong>secret</strong> has been specified.</p>
<p>Reference: <a href="tomcat-9.0-doc/config/ajp.html">AJP
connector</a>.</p>
</li>
<li><p>In 9.0.31 onwards, the
<strong>allowedRequestAttributesPattern</strong> attribute was added to
the AJP Connector. Requests with unrecognised attributes will now be
blocked with a 403.</p>
<p>Reference: <a href="tomcat-9.0-doc/config/ajp.html">AJP
connector</a>.</p>
</li>
<li><p>In 9.0.44 onwards, the semantics of the
<code>HostConfig.check(String)</code> method have changed. Rather than
marking the application as serviced before calling the method, the
method will mark the application as serviced before checking
resources and then un-mark the application as being serviced after the
checks are complete. If the application is marked as serviced when the
method is called, the method will be a NO-OP.</p>
</li>
<li><p>In 9.0.48 onwards, the NIO poller was simplified and the block
poller and selector configuration has been removed. This will not
cause a startup error if they are present in the configuration, but
may produce a warning and will have no effect.</p>
</li>
<li><p>In 9.0.51 onwards, Tomcat no longer adds an "Expires" HTTP
response header when adding "Cache-Control: private" due to a
CONFIDENTIAL transport-guarantee. This will likely cause a change
in caching behavior for applications that do not explicitly set
their own headers but rely on Tomcat's previous behavior. If you
wish to disable caching, you will need to configure it explicitly
in your application. See <a href="https://bz.apache.org/bugzilla/show_bug.cgi?id=65513">BZ 65513</a>
for more information.</p>
</li>
<li><p>In 9.0.53 onwards, as a result of the updated fork of Commons
FileUpload now using <code>java.nio.file.Files</code>, applications
using multi-part uploads need to ensure that the JVM is configured with
sufficient direct memory to store all in progress multi-part
uploads.</p>
</li>
<li><p>In 9.0.56 onwards, the system property
<code>org.apache.juli.AsyncLoggerPollInterval</code> is no longer
used.</p>
</li>
<li>
In 9.0.109, a release packaging error caused some support classes
for FileStore to be missing from the release. You should avoid 9.0.109
if you use the FileStore session mechanism.
</li>
<li>
In 9.0.114 onwards, the minimum Tomcat Native version is 1.3.4 for
Tomcat Native 1.3.x and 2.0.12 for Tomcat Native 2.0.x.
</li>
<li>
Tomcat 9.0.119 introduces a <b>breaking change</b> for users of the
<code>EncryptInterceptor</code> in their clustering configuration.
Migration from prior-to-Tomcat-9.0.119 to after-Tomcat-9.0.119
will require that <i>all</i> cluster nodes are stopped and restarted
to perform the migration. There is an additional, required, piece of
data that is being introduced into the cluster data stream for
<code>EncryptInterceptor</code> and nodes running any older versions
will fail to send or receive cluster messages.
</li>
</ul>
</div></div>
<div class="subsection"><h4 id="Tomcat_9.0.x_configuration_file_differences">Tomcat 9.0.x configuration file differences</h4><div class="text">
<p>Select a configuration file, old version and new version from the boxes
below and then click "View differences" to see the differences.
The differences will be shown in a new tab/window.</p>
<p><b>Note:</b> If there are no differences you will see an error page.</p>
<form action="https://gitbox.apache.org/filediff" method="get" target="_blank">
<input type="hidden" name="repo" value="tomcat.git">
<p><label>Configuration file:
<select name="file">
<option value="conf" selected>All configuration files</option>
<option value="conf/catalina.policy">catalina.policy</option>
<option value="conf/catalina.properties">catalina.properties</option>
<option value="conf/context.xml">context.xml</option>
<option value="conf/logging.properties">logging.properties</option>
<option value="conf/server.xml">server.xml</option>
<option value="conf/tomcat-users.xml">tomcat-users.xml</option>
<option value="conf/web.xml">web.xml</option>
</select></label>
</p>
<p><label>Old version:
<select name="origin">
<option value="9.0.0-M1">9.0.0-M1</option>
<option value="9.0.0-M3">9.0.0-M3</option>
<option value="9.0.0-M4">9.0.0-M4</option>
<option value="9.0.0-M6">9.0.0-M6</option>
<option value="9.0.0-M8">9.0.0-M8</option>
<option value="9.0.0-M9">9.0.0-M9</option>
<option value="9.0.0-M10">9.0.0-M10</option>
<option value="9.0.0-M11">9.0.0-M11</option>
<option value="9.0.0-M13">9.0.0-M13</option>
<option value="9.0.0-M15">9.0.0-M15</option>
<option value="9.0.0-M17">9.0.0-M17</option>
<option value="9.0.0-M18">9.0.0-M18</option>
<option value="9.0.0-M19">9.0.0-M19</option>
<option value="9.0.0-M20">9.0.0-M20</option>
<option value="9.0.0-M21">9.0.0-M21</option>
<option value="9.0.0-M22">9.0.0-M22</option>
<option value="9.0.0-M26">9.0.0-M26</option>
<option value="9.0.1">9.0.1</option>
<option value="9.0.2">9.0.2</option>
<option value="9.0.4">9.0.4</option>
<option value="9.0.5">9.0.5</option>
<option value="9.0.6">9.0.6</option>
<option value="9.0.7">9.0.7</option>
<option value="9.0.8">9.0.8</option>
<option value="9.0.10">9.0.10</option>
<option value="9.0.11">9.0.11</option>
<option value="9.0.12">9.0.12</option>
<option value="9.0.13">9.0.13</option>
<option value="9.0.14">9.0.14</option>
<option value="9.0.16">9.0.16</option>
<option value="9.0.17">9.0.17</option>
<option value="9.0.19">9.0.19</option>
<option value="9.0.20">9.0.20</option>
<option value="9.0.21">9.0.21</option>
<option value="9.0.22">9.0.22</option>
<option value="9.0.24">9.0.24</option>
<option value="9.0.26">9.0.26</option>
<option value="9.0.27">9.0.27</option>
<option value="9.0.28">9.0.28</option>
<option value="9.0.30">9.0.30</option>
<option value="9.0.31">9.0.31</option>
<option value="9.0.33">9.0.33</option>
<option value="9.0.34">9.0.34</option>
<option value="9.0.35">9.0.35</option>
<option value="9.0.36">9.0.36</option>
<option value="9.0.37">9.0.37</option>
<option value="9.0.38">9.0.38</option>
<option value="9.0.39">9.0.39</option>
<option value="9.0.40">9.0.40</option>
<option value="9.0.41">9.0.41</option>
<option value="9.0.43">9.0.43</option>
<option value="9.0.44">9.0.44</option>
<option value="9.0.45">9.0.45</option>
<option value="9.0.46">9.0.46</option>
<option value="9.0.48">9.0.48</option>
<option value="9.0.50">9.0.50</option>
<option value="9.0.52">9.0.52</option>
<option value="9.0.53">9.0.53</option>
<option value="9.0.54">9.0.54</option>
<option value="9.0.55">9.0.55</option>
<option value="9.0.56">9.0.56</option>
<option value="9.0.58">9.0.58</option>
<option value="9.0.59">9.0.59</option>
<option value="9.0.60">9.0.60</option>
<option value="9.0.62">9.0.62</option>
<option value="9.0.63">9.0.63</option>
<option value="9.0.64">9.0.64</option>
<option value="9.0.65">9.0.65</option>
<option value="9.0.67">9.0.67</option>
<option value="9.0.68">9.0.68</option>
<option value="9.0.69">9.0.69</option>
<option value="9.0.70">9.0.70</option>
<option value="9.0.71">9.0.71</option>
<option value="9.0.72">9.0.72</option>
<option value="9.0.73">9.0.73</option>
<option value="9.0.74">9.0.74</option>
<option value="9.0.75">9.0.75</option>
<option value="9.0.76">9.0.76</option>
<option value="9.0.78">9.0.78</option>
<option value="9.0.79">9.0.79</option>
<option value="9.0.80">9.0.80</option>
<option value="9.0.81">9.0.81</option>
<option value="9.0.82">9.0.82</option>
<option value="9.0.83">9.0.83</option>
<option value="9.0.84">9.0.84</option>
<option value="9.0.85">9.0.85</option>
<option value="9.0.86">9.0.86</option>
<option value="9.0.87">9.0.87</option>
<option value="9.0.88">9.0.88</option>
<option value="9.0.89">9.0.89</option>
<option value="9.0.90">9.0.90</option>
<option value="9.0.91">9.0.91</option>
<option value="9.0.93">9.0.93</option>
<option value="9.0.94">9.0.94</option>
<option value="9.0.95">9.0.95</option>
<option value="9.0.96">9.0.96</option>
<option value="9.0.97">9.0.97</option>
<option value="9.0.98">9.0.98</option>
<option value="9.0.99">9.0.99</option>
<option value="9.0.100">9.0.100</option>
<option value="9.0.102">9.0.102</option>
<option value="9.0.104">9.0.104</option>
<option value="9.0.105">9.0.105</option>
<option value="9.0.106">9.0.106</option>
<option value="9.0.107">9.0.107</option>
<option value="9.0.108">9.0.108</option>
<option value="9.0.109">9.0.109</option>
<option value="9.0.110">9.0.110</option>
<option value="9.0.111">9.0.111</option>
<option value="9.0.112">9.0.112</option>
<option value="9.0.113">9.0.113</option>
<option value="9.0.115">9.0.115</option>
<option value="9.0.116">9.0.116</option>
<option value="9.0.117">9.0.117</option>
<option value="9.0.118">9.0.118</option>
<option value="9.0.119">9.0.119</option>
<option value="9.0.120" selected>9.0.120</option>
</select>,</label> <label>new version:
<select name="target">
<option value="9.0.0-M1">9.0.0-M1</option>
<option value="9.0.0-M3">9.0.0-M3</option>
<option value="9.0.0-M4">9.0.0-M4</option>
<option value="9.0.0-M6">9.0.0-M6</option>
<option value="9.0.0-M8">9.0.0-M8</option>
<option value="9.0.0-M9">9.0.0-M9</option>
<option value="9.0.0-M10">9.0.0-M10</option>
<option value="9.0.0-M11">9.0.0-M11</option>
<option value="9.0.0-M13">9.0.0-M13</option>
<option value="9.0.0-M15">9.0.0-M15</option>
<option value="9.0.0-M17">9.0.0-M17</option>
<option value="9.0.0-M18">9.0.0-M18</option>
<option value="9.0.0-M19">9.0.0-M19</option>
<option value="9.0.0-M20">9.0.0-M20</option>
<option value="9.0.0-M21">9.0.0-M21</option>
<option value="9.0.0-M22">9.0.0-M22</option>
<option value="9.0.0-M26">9.0.0-M26</option>
<option value="9.0.1">9.0.1</option>
<option value="9.0.2">9.0.2</option>
<option value="9.0.4">9.0.4</option>
<option value="9.0.5">9.0.5</option>
<option value="9.0.6">9.0.6</option>
<option value="9.0.7">9.0.7</option>
<option value="9.0.8">9.0.8</option>
<option value="9.0.10">9.0.10</option>
<option value="9.0.11">9.0.11</option>
<option value="9.0.12">9.0.12</option>
<option value="9.0.13">9.0.13</option>
<option value="9.0.14">9.0.14</option>
<option value="9.0.16">9.0.16</option>
<option value="9.0.17">9.0.17</option>
<option value="9.0.19">9.0.19</option>
<option value="9.0.20">9.0.20</option>
<option value="9.0.21">9.0.21</option>
<option value="9.0.22">9.0.22</option>
<option value="9.0.24">9.0.24</option>
<option value="9.0.26">9.0.26</option>
<option value="9.0.27">9.0.27</option>
<option value="9.0.29">9.0.29</option>
<option value="9.0.30">9.0.30</option>
<option value="9.0.31">9.0.31</option>
<option value="9.0.33">9.0.33</option>
<option value="9.0.34">9.0.34</option>
<option value="9.0.35">9.0.35</option>
<option value="9.0.36">9.0.36</option>
<option value="9.0.37">9.0.37</option>
<option value="9.0.38">9.0.38</option>
<option value="9.0.39">9.0.39</option>
<option value="9.0.40">9.0.40</option>
<option value="9.0.41">9.0.41</option>
<option value="9.0.43">9.0.43</option>
<option value="9.0.44">9.0.44</option>
<option value="9.0.45">9.0.45</option>
<option value="9.0.46">9.0.46</option>
<option value="9.0.48">9.0.48</option>
<option value="9.0.50">9.0.50</option>
<option value="9.0.52">9.0.52</option>
<option value="9.0.53">9.0.53</option>
<option value="9.0.54">9.0.54</option>
<option value="9.0.55">9.0.55</option>
<option value="9.0.56">9.0.56</option>
<option value="9.0.58">9.0.58</option>
<option value="9.0.59">9.0.59</option>
<option value="9.0.60">9.0.60</option>
<option value="9.0.62">9.0.62</option>
<option value="9.0.63">9.0.63</option>
<option value="9.0.64">9.0.64</option>
<option value="9.0.65">9.0.65</option>
<option value="9.0.67">9.0.67</option>
<option value="9.0.68">9.0.68</option>
<option value="9.0.69">9.0.69</option>
<option value="9.0.70">9.0.70</option>
<option value="9.0.71">9.0.71</option>
<option value="9.0.72">9.0.72</option>
<option value="9.0.73">9.0.73</option>
<option value="9.0.74">9.0.74</option>
<option value="9.0.75">9.0.75</option>
<option value="9.0.76">9.0.76</option>
<option value="9.0.78">9.0.78</option>
<option value="9.0.79">9.0.79</option>
<option value="9.0.80">9.0.80</option>
<option value="9.0.81">9.0.81</option>
<option value="9.0.82">9.0.82</option>
<option value="9.0.83">9.0.83</option>
<option value="9.0.84">9.0.84</option>
<option value="9.0.85">9.0.85</option>
<option value="9.0.86">9.0.86</option>
<option value="9.0.87">9.0.87</option>
<option value="9.0.88">9.0.88</option>
<option value="9.0.89">9.0.89</option>
<option value="9.0.90">9.0.90</option>
<option value="9.0.91">9.0.91</option>
<option value="9.0.93">9.0.93</option>
<option value="9.0.94">9.0.94</option>
<option value="9.0.95">9.0.95</option>
<option value="9.0.96">9.0.96</option>
<option value="9.0.97">9.0.97</option>
<option value="9.0.98">9.0.98</option>
<option value="9.0.99">9.0.99</option>
<option value="9.0.100">9.0.100</option>
<option value="9.0.102">9.0.102</option>
<option value="9.0.104">9.0.104</option>
<option value="9.0.105">9.0.105</option>
<option value="9.0.106">9.0.106</option>
<option value="9.0.107">9.0.107</option>
<option value="9.0.108">9.0.108</option>
<option value="9.0.109">9.0.109</option>
<option value="9.0.110">9.0.110</option>
<option value="9.0.111">9.0.111</option>
<option value="9.0.112">9.0.112</option>
<option value="9.0.113">9.0.113</option>
<option value="9.0.115">9.0.115</option>
<option value="9.0.116">9.0.116</option>
<option value="9.0.117">9.0.117</option>
<option value="9.0.118">9.0.118</option>
<option value="9.0.119">9.0.119</option>
<option value="9.0.120">9.0.120</option>
<option value="9.0.121" selected>9.0.121</option>
<option value="HEAD">trunk (unreleased)</option>
</select></label>
</p>
<p>
<button>View Differences</button>
</p>
</form>
<p>You can also use a Git command similar to the following from within a
working copy:</p>
<div class="codeBox"><pre><code>git diff 9.0.0 9.0.12 -- conf/</code></pre></div>
</div></div>
</div></div></div></div></main><footer id="footer">
Copyright &copy; 1999-2026, The Apache Software Foundation
<br>
Apache Tomcat, Tomcat, Apache, the Apache Tomcat logo and the Apache logo
are either registered trademarks or trademarks of the Apache Software
Foundation.
</footer></div><script src="res/js/tomcat.js"></script></body></html>