You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2023/06/09 07:47:37 UTC

svn commit: r1910321 [1/3] - in /tomcat/site/trunk/docs/tomcat-9.0-doc: annotationapi/jquery/ api/jquery/ api/org/apache/catalina/core/ api/org/apache/catalina/filters/ api/org/apache/catalina/util/ api/org/apache/catalina/valves/ api/org/apache/tomcat...

Author: remm
Date: Fri Jun  9 07:47:37 2023
New Revision: 1910321

URL: http://svn.apache.org/viewvc?rev=1910321&view=rev
Log:
Docs update for 9.0.76 part 2

Added:
    tomcat/site/trunk/docs/tomcat-9.0-doc/annotationapi/jquery/jquery-3.6.1.min.js
    tomcat/site/trunk/docs/tomcat-9.0-doc/api/jquery/jquery-3.6.1.min.js
    tomcat/site/trunk/docs/tomcat-9.0-doc/api/org/apache/catalina/core/StandardVirtualThreadExecutor.html
    tomcat/site/trunk/docs/tomcat-9.0-doc/api/org/apache/catalina/filters/RateLimitFilter.html
    tomcat/site/trunk/docs/tomcat-9.0-doc/api/org/apache/catalina/util/NetMaskSet.html
    tomcat/site/trunk/docs/tomcat-9.0-doc/api/org/apache/catalina/util/TimeBucketCounter.html
    tomcat/site/trunk/docs/tomcat-9.0-doc/api/org/apache/catalina/valves/JsonAccessLogValve.CharElement.html
    tomcat/site/trunk/docs/tomcat-9.0-doc/api/org/apache/tomcat/util/compat/Jre21Compat.html
    tomcat/site/trunk/docs/tomcat-9.0-doc/api/org/apache/tomcat/util/http/parser/Priority.html
    tomcat/site/trunk/docs/tomcat-9.0-doc/api/org/apache/tomcat/util/http/parser/StructuredField.html
    tomcat/site/trunk/docs/tomcat-9.0-doc/api/org/apache/tomcat/util/threads/VirtualThreadExecutor.html
    tomcat/site/trunk/docs/tomcat-9.0-doc/elapi/jquery/jquery-3.6.1.min.js
    tomcat/site/trunk/docs/tomcat-9.0-doc/jaspicapi/jquery/jquery-3.6.1.min.js
    tomcat/site/trunk/docs/tomcat-9.0-doc/jspapi/jquery/jquery-3.6.1.min.js
    tomcat/site/trunk/docs/tomcat-9.0-doc/servletapi/jquery/jquery-3.6.1.min.js
    tomcat/site/trunk/docs/tomcat-9.0-doc/websocketapi/jquery/jquery-3.6.1.min.js
Removed:
    tomcat/site/trunk/docs/tomcat-9.0-doc/annotationapi/jquery/jquery-3.6.0.min.js
    tomcat/site/trunk/docs/tomcat-9.0-doc/api/jquery/jquery-3.6.0.min.js
    tomcat/site/trunk/docs/tomcat-9.0-doc/elapi/jquery/jquery-3.6.0.min.js
    tomcat/site/trunk/docs/tomcat-9.0-doc/jaspicapi/jquery/jquery-3.6.0.min.js
    tomcat/site/trunk/docs/tomcat-9.0-doc/jspapi/jquery/jquery-3.6.0.min.js
    tomcat/site/trunk/docs/tomcat-9.0-doc/servletapi/jquery/jquery-3.6.0.min.js
    tomcat/site/trunk/docs/tomcat-9.0-doc/websocketapi/jquery/jquery-3.6.0.min.js

Added: tomcat/site/trunk/docs/tomcat-9.0-doc/annotationapi/jquery/jquery-3.6.1.min.js
URL: http://svn.apache.org/viewvc/tomcat/site/trunk/docs/tomcat-9.0-doc/annotationapi/jquery/jquery-3.6.1.min.js?rev=1910321&view=auto
==============================================================================
--- tomcat/site/trunk/docs/tomcat-9.0-doc/annotationapi/jquery/jquery-3.6.1.min.js (added)
+++ tomcat/site/trunk/docs/tomcat-9.0-doc/annotationapi/jquery/jquery-3.6.1.min.js Fri Jun  9 07:47:37 2023
@@ -0,0 +1,2 @@
+/*! jQuery v3.6.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */

[... 2 lines stripped ...]
Added: tomcat/site/trunk/docs/tomcat-9.0-doc/api/jquery/jquery-3.6.1.min.js
URL: http://svn.apache.org/viewvc/tomcat/site/trunk/docs/tomcat-9.0-doc/api/jquery/jquery-3.6.1.min.js?rev=1910321&view=auto
==============================================================================
--- tomcat/site/trunk/docs/tomcat-9.0-doc/api/jquery/jquery-3.6.1.min.js (added)
+++ tomcat/site/trunk/docs/tomcat-9.0-doc/api/jquery/jquery-3.6.1.min.js Fri Jun  9 07:47:37 2023
@@ -0,0 +1,2 @@
+/*! jQuery v3.6.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */

[... 2 lines stripped ...]
Added: tomcat/site/trunk/docs/tomcat-9.0-doc/api/org/apache/catalina/core/StandardVirtualThreadExecutor.html
URL: http://svn.apache.org/viewvc/tomcat/site/trunk/docs/tomcat-9.0-doc/api/org/apache/catalina/core/StandardVirtualThreadExecutor.html?rev=1910321&view=auto
==============================================================================
--- tomcat/site/trunk/docs/tomcat-9.0-doc/api/org/apache/catalina/core/StandardVirtualThreadExecutor.html (added)
+++ tomcat/site/trunk/docs/tomcat-9.0-doc/api/org/apache/catalina/core/StandardVirtualThreadExecutor.html Fri Jun  9 07:47:37 2023
@@ -0,0 +1,628 @@
+<!DOCTYPE HTML>
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<title>StandardVirtualThreadExecutor (Apache Tomcat 9.0.76 API Documentation)</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<link rel="stylesheet" type="text/css" href="../../../../jquery/jquery-ui.min.css" title="Style">
+<link rel="stylesheet" type="text/css" href="../../../../jquery-ui.overrides.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+<script type="text/javascript" src="../../../../jquery/jszip/dist/jszip.min.js"></script>
+<script type="text/javascript" src="../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
+<!--[if IE]>
+<script type="text/javascript" src="../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
+<![endif]-->
+<script type="text/javascript" src="../../../../jquery/jquery-3.6.1.min.js"></script>
+<script type="text/javascript" src="../../../../jquery/jquery-ui.min.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="StandardVirtualThreadExecutor (Apache Tomcat 9.0.76 API Documentation)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+var pathtoroot = "../../../../";
+var useModuleDirectories = true;
+loadScripts(document, 'script');</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<header role="banner">
+<nav role="navigation">
+<div class="fixedNav">
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a id="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a id="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../index.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage"><b>Apache Tomcat 9.0.76</b></div>
+</div>
+<div class="subNav">
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses.html">All&nbsp;Classes</a></li>
+</ul>
+<ul class="navListSearch">
+<li><label for="search">SEARCH:</label>
+<input type="text" id="search" value="search" disabled="disabled">
+<input type="reset" id="reset" value="reset" disabled="disabled">
+</li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a id="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+</div>
+<div class="navPadding">&nbsp;</div>
+<script type="text/javascript"><!--
+$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
+//-->
+</script>
+</nav>
+</header>
+<!-- ======== START OF CLASS DATA ======== -->
+<main role="main">
+<div class="header">
+<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.apache.catalina.core</a></div>
+<h2 title="Class StandardVirtualThreadExecutor" class="title">Class StandardVirtualThreadExecutor</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li>java.lang.Object</li>
+<li>
+<ul class="inheritance">
+<li><a href="../util/LifecycleBase.html" title="class in org.apache.catalina.util">org.apache.catalina.util.LifecycleBase</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../util/LifecycleMBeanBase.html" title="class in org.apache.catalina.util">org.apache.catalina.util.LifecycleMBeanBase</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.catalina.core.StandardVirtualThreadExecutor</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><code>java.util.concurrent.Executor</code>, <code>javax.management.MBeanRegistration</code>, <code><a href="../Executor.html" title="interface in org.apache.catalina">Executor</a></code>, <code><a href="../JmxEnabled.html" title="interface in org.apache.catalina">JmxEnabled</a></code>, <code><a href="../Lifecycle.html" title="interface in org.apache.catalina">Lifecycle</a></code></dd>
+</dl>
+<hr>
+<pre>public class <span class="typeNameLabel">StandardVirtualThreadExecutor</span>
+extends <a href="../util/LifecycleMBeanBase.html" title="class in org.apache.catalina.util">LifecycleMBeanBase</a>
+implements <a href="../Executor.html" title="interface in org.apache.catalina">Executor</a></pre>
+<div class="block">An executor that uses a new virtual thread for each task.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<section>
+<ul class="blockList">
+<li class="blockList"><a id="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a id="nested.classes.inherited.from.class.org.apache.catalina.Lifecycle">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from interface&nbsp;org.apache.catalina.<a href="../Lifecycle.html" title="interface in org.apache.catalina">Lifecycle</a></h3>
+<code><a href="../Lifecycle.SingleUse.html" title="interface in org.apache.catalina">Lifecycle.SingleUse</a></code></li>
+</ul>
+</li>
+</ul>
+</section>
+<!-- =========== FIELD SUMMARY =========== -->
+<section>
+<ul class="blockList">
+<li class="blockList"><a id="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a id="fields.inherited.from.class.org.apache.catalina.util.LifecycleMBeanBase">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;org.apache.catalina.util.<a href="../util/LifecycleMBeanBase.html" title="class in org.apache.catalina.util">LifecycleMBeanBase</a></h3>
+<code><a href="../util/LifecycleMBeanBase.html#mserver">mserver</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a id="fields.inherited.from.class.org.apache.catalina.Lifecycle">
+<!--   -->
+</a>
+<h3>Fields inherited from interface&nbsp;org.apache.catalina.<a href="../Lifecycle.html" title="interface in org.apache.catalina">Lifecycle</a></h3>
+<code><a href="../Lifecycle.html#AFTER_DESTROY_EVENT">AFTER_DESTROY_EVENT</a>, <a href="../Lifecycle.html#AFTER_INIT_EVENT">AFTER_INIT_EVENT</a>, <a href="../Lifecycle.html#AFTER_START_EVENT">AFTER_START_EVENT</a>, <a href="../Lifecycle.html#AFTER_STOP_EVENT">AFTER_STOP_EVENT</a>, <a href="../Lifecycle.html#BEFORE_DESTROY_EVENT">BEFORE_DESTROY_EVENT</a>, <a href="../Lifecycle.html#BEFORE_INIT_EVENT">BEFORE_INIT_EVENT</a>, <a href="../Lifecycle.html#BEFORE_START_EVENT">BEFORE_START_EVENT</a>, <a href="../Lifecycle.html#BEFORE_STOP_EVENT">BEFORE_STOP_EVENT</a>, <a href="../Lifecycle.html#CONFIGURE_START_EVENT">CONFIGURE_START_EVENT</a>, <a href="../Lifecycle.html#CONFIGURE_STOP_EVENT">CONFIGURE_STOP_EVENT</a>, <a href="../Lifecycle.html#PERIODIC_EVENT">PERIODIC_EVENT</a>, <a href="../Lifecycle.html#START_EVENT">START_EVENT</a>, <a href="../Lifecycle.html#STOP_EVENT">STOP_EVENT</a></code></li>
+</ul>
+</li>
+</ul>
+</section>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<section>
+<ul class="blockList">
+<li class="blockList"><a id="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Constructor</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tr class="altColor">
+<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E()">StandardVirtualThreadExecutor</a></span>()</code></th>
+<td class="colLast">&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+</section>
+<!-- ========== METHOD SUMMARY =========== -->
+<section>
+<ul class="blockList">
+<li class="blockList"><a id="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colSecond" scope="col">Method</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#execute(java.lang.Runnable)">execute</a></span>&#8203;(java.lang.Runnable&nbsp;command)</code></th>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#execute(java.lang.Runnable,long,java.util.concurrent.TimeUnit)">execute</a></span>&#8203;(java.lang.Runnable&nbsp;command,
+       long&nbsp;timeout,
+       java.util.concurrent.TimeUnit&nbsp;unit)</code></th>
+<td class="colLast">
+<div class="block">Executes the given command at some time in the future.</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>protected java.lang.String</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getDomainInternal()">getDomainInternal</a></span>()</code></th>
+<td class="colLast">
+<div class="block">Method implemented by sub-classes to identify the domain in which MBeans
+ should be registered.</div>
+</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>java.lang.String</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getName()">getName</a></span>()</code></th>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>java.lang.String</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getNamePrefix()">getNamePrefix</a></span>()</code></th>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>protected java.lang.String</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getObjectNameKeyProperties()">getObjectNameKeyProperties</a></span>()</code></th>
+<td class="colLast">
+<div class="block">Allow sub-classes to specify the key properties component of the
+ <code>ObjectName</code> that will be used to register this component.</div>
+</td>
+</tr>
+<tr id="i6" class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#initInternal()">initInternal</a></span>()</code></th>
+<td class="colLast">
+<div class="block">Sub-classes wishing to perform additional initialization should override
+ this method, ensuring that super.initInternal() is the first call in the
+ overriding method.</div>
+</td>
+</tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setName(java.lang.String)">setName</a></span>&#8203;(java.lang.String&nbsp;name)</code></th>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr id="i8" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setNamePrefix(java.lang.String)">setNamePrefix</a></span>&#8203;(java.lang.String&nbsp;namePrefix)</code></th>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr id="i9" class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#startInternal()">startInternal</a></span>()</code></th>
+<td class="colLast">
+<div class="block">Sub-classes must ensure that the state is changed to
+ <a href="../LifecycleState.html#STARTING"><code>LifecycleState.STARTING</code></a> during the execution of this method.</div>
+</td>
+</tr>
+<tr id="i10" class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#stopInternal()">stopInternal</a></span>()</code></th>
+<td class="colLast">
+<div class="block">Sub-classes must ensure that the state is changed to
+ <a href="../LifecycleState.html#STOPPING"><code>LifecycleState.STOPPING</code></a> during the execution of this method.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a id="methods.inherited.from.class.org.apache.catalina.util.LifecycleMBeanBase">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.catalina.util.<a href="../util/LifecycleMBeanBase.html" title="class in org.apache.catalina.util">LifecycleMBeanBase</a></h3>
+<code><a href="../util/LifecycleMBeanBase.html#destroyInternal()">destroyInternal</a>, <a href="../util/LifecycleMBeanBase.html#getDomain()">getDomain</a>, <a href="../util/LifecycleMBeanBase.html#getObjectName()">getObjectName</a>, <a href="../util/LifecycleMBeanBase.html#postDeregister()">postDeregister</a>, <a href="../util/LifecycleMBeanBase.html#postRegister(java.lang.Boolean)">postRegister</a>, <a href="../util/LifecycleMBeanBase.html#preDeregister()">preDeregister</a>, <a href="../util/LifecycleMBeanBase.html#preRegister(javax.management.MBeanServer,javax.management.ObjectName)">preRegister</a>, <a href="../util/LifecycleMBeanBase.html#register(java.lang.Object,java.lang.String)">register</a>, <a href="../util/LifecycleMBeanBase.html#setDomain(java.lang.String)">setDomain</a>, <a href="../util/LifecycleMBeanBase.html#unregister(java.lang.String)">unregister</a>, <a href="../util/LifecycleMBeanBase.html#unregister(javax.management.ObjectName)">unregister</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a id="methods.inherited.from.class.org.apache.catalina.util.LifecycleBase">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.catalina.util.<a href="../util/LifecycleBase.html" title="class in org.apache.catalina.util">LifecycleBase</a></h3>
+<code><a href="../util/LifecycleBase.html#addLifecycleListener(org.apache.catalina.LifecycleListener)">addLifecycleListener</a>, <a href="../util/LifecycleBase.html#destroy()">destroy</a>, <a href="../util/LifecycleBase.html#findLifecycleListeners()">findLifecycleListeners</a>, <a href="../util/LifecycleBase.html#fireLifecycleEvent(java.lang.String,java.lang.Object)">fireLifecycleEvent</a>, <a href="../util/LifecycleBase.html#getState()">getState</a>, <a href="../util/LifecycleBase.html#getStateName()">getStateName</a>, <a href="../util/LifecycleBase.html#getThrowOnFailure()">getThrowOnFailure</a>, <a href="../util/LifecycleBase.html#init()">init</a>, <a href="../util/LifecycleBase.html#removeLifecycleListener(org.apache.catalina.LifecycleListener)">removeLifecycleListener</a>, <a href="../util/LifecycleBase.html#setState(org.apache.catalina.LifecycleState)">setState</a>, <a href="../util/LifecycleBase.html#setState(org.apache.catalina.LifecycleState,java.lang.Object)">setState</a>,
  <a href="../util/LifecycleBase.html#setThrowOnFailure(boolean)">setThrowOnFailure</a>, <a href="../util/LifecycleBase.html#start()">start</a>, <a href="../util/LifecycleBase.html#stop()">stop</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
+<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a id="methods.inherited.from.class.org.apache.catalina.Lifecycle">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.catalina.<a href="../Lifecycle.html" title="interface in org.apache.catalina">Lifecycle</a></h3>
+<code><a href="../Lifecycle.html#addLifecycleListener(org.apache.catalina.LifecycleListener)">addLifecycleListener</a>, <a href="../Lifecycle.html#destroy()">destroy</a>, <a href="../Lifecycle.html#findLifecycleListeners()">findLifecycleListeners</a>, <a href="../Lifecycle.html#getState()">getState</a>, <a href="../Lifecycle.html#getStateName()">getStateName</a>, <a href="../Lifecycle.html#init()">init</a>, <a href="../Lifecycle.html#removeLifecycleListener(org.apache.catalina.LifecycleListener)">removeLifecycleListener</a>, <a href="../Lifecycle.html#start()">start</a>, <a href="../Lifecycle.html#stop()">stop</a></code></li>
+</ul>
+</li>
+</ul>
+</section>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<section>
+<ul class="blockList">
+<li class="blockList"><a id="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a id="&lt;init&gt;()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>StandardVirtualThreadExecutor</h4>
+<pre>public&nbsp;StandardVirtualThreadExecutor()</pre>
+</li>
+</ul>
+</li>
+</ul>
+</section>
+<!-- ============ METHOD DETAIL ========== -->
+<section>
+<ul class="blockList">
+<li class="blockList"><a id="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a id="setName(java.lang.String)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setName</h4>
+<pre class="methodSignature">public&nbsp;void&nbsp;setName&#8203;(java.lang.String&nbsp;name)</pre>
+</li>
+</ul>
+<a id="getName()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getName</h4>
+<pre class="methodSignature">public&nbsp;java.lang.String&nbsp;getName()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../Executor.html#getName()">getName</a></code>&nbsp;in interface&nbsp;<code><a href="../Executor.html" title="interface in org.apache.catalina">Executor</a></code></dd>
+</dl>
+</li>
+</ul>
+<a id="getNamePrefix()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getNamePrefix</h4>
+<pre class="methodSignature">public&nbsp;java.lang.String&nbsp;getNamePrefix()</pre>
+</li>
+</ul>
+<a id="setNamePrefix(java.lang.String)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setNamePrefix</h4>
+<pre class="methodSignature">public&nbsp;void&nbsp;setNamePrefix&#8203;(java.lang.String&nbsp;namePrefix)</pre>
+</li>
+</ul>
+<a id="execute(java.lang.Runnable)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>execute</h4>
+<pre class="methodSignature">public&nbsp;void&nbsp;execute&#8203;(java.lang.Runnable&nbsp;command)</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code>execute</code>&nbsp;in interface&nbsp;<code>java.util.concurrent.Executor</code></dd>
+</dl>
+</li>
+</ul>
+<a id="execute(java.lang.Runnable,long,java.util.concurrent.TimeUnit)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>execute</h4>
+<pre class="methodSignature">public&nbsp;void&nbsp;execute&#8203;(java.lang.Runnable&nbsp;command,
+                    long&nbsp;timeout,
+                    java.util.concurrent.TimeUnit&nbsp;unit)</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Executor.html#execute(java.lang.Runnable,long,java.util.concurrent.TimeUnit)">Executor</a></code></span></div>
+<div class="block">Executes the given command at some time in the future.  The command
+ may execute in a new thread, in a pooled thread, or in the calling
+ thread, at the discretion of the <code>Executor</code> implementation.
+ If no threads are available, it will be added to the work queue.
+ If the work queue is full, the system will wait for the specified
+ time until it throws a RejectedExecutionException</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../Executor.html#execute(java.lang.Runnable,long,java.util.concurrent.TimeUnit)">execute</a></code>&nbsp;in interface&nbsp;<code><a href="../Executor.html" title="interface in org.apache.catalina">Executor</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>command</code> - the runnable task</dd>
+<dd><code>timeout</code> - the length of time to wait for the task to complete</dd>
+<dd><code>unit</code> - the units in which timeout is expressed</dd>
+</dl>
+</li>
+</ul>
+<a id="initInternal()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>initInternal</h4>
+<pre class="methodSignature">protected&nbsp;void&nbsp;initInternal()
+                     throws <a href="../LifecycleException.html" title="class in org.apache.catalina">LifecycleException</a></pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../util/LifecycleMBeanBase.html#initInternal()">LifecycleMBeanBase</a></code></span></div>
+<div class="block">Sub-classes wishing to perform additional initialization should override
+ this method, ensuring that super.initInternal() is the first call in the
+ overriding method.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../util/LifecycleMBeanBase.html#initInternal()">initInternal</a></code>&nbsp;in class&nbsp;<code><a href="../util/LifecycleMBeanBase.html" title="class in org.apache.catalina.util">LifecycleMBeanBase</a></code></dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="../LifecycleException.html" title="class in org.apache.catalina">LifecycleException</a></code> - If the initialisation fails</dd>
+</dl>
+</li>
+</ul>
+<a id="startInternal()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>startInternal</h4>
+<pre class="methodSignature">protected&nbsp;void&nbsp;startInternal()
+                      throws <a href="../LifecycleException.html" title="class in org.apache.catalina">LifecycleException</a></pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../util/LifecycleBase.html#startInternal()">LifecycleBase</a></code></span></div>
+<div class="block">Sub-classes must ensure that the state is changed to
+ <a href="../LifecycleState.html#STARTING"><code>LifecycleState.STARTING</code></a> during the execution of this method.
+ Changing state will trigger the <a href="../Lifecycle.html#START_EVENT"><code>Lifecycle.START_EVENT</code></a> event.
+
+ If a component fails to start it may either throw a
+ <a href="../LifecycleException.html" title="class in org.apache.catalina"><code>LifecycleException</code></a> which will cause it's parent to fail to start
+ or it can place itself in the error state in which case <a href="../util/LifecycleBase.html#stop()"><code>LifecycleBase.stop()</code></a>
+ will be called on the failed component but the parent component will
+ continue to start normally.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../util/LifecycleBase.html#startInternal()">startInternal</a></code>&nbsp;in class&nbsp;<code><a href="../util/LifecycleBase.html" title="class in org.apache.catalina.util">LifecycleBase</a></code></dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="../LifecycleException.html" title="class in org.apache.catalina">LifecycleException</a></code> - Start error occurred</dd>
+</dl>
+</li>
+</ul>
+<a id="stopInternal()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>stopInternal</h4>
+<pre class="methodSignature">protected&nbsp;void&nbsp;stopInternal()
+                     throws <a href="../LifecycleException.html" title="class in org.apache.catalina">LifecycleException</a></pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../util/LifecycleBase.html#stopInternal()">LifecycleBase</a></code></span></div>
+<div class="block">Sub-classes must ensure that the state is changed to
+ <a href="../LifecycleState.html#STOPPING"><code>LifecycleState.STOPPING</code></a> during the execution of this method.
+ Changing state will trigger the <a href="../Lifecycle.html#STOP_EVENT"><code>Lifecycle.STOP_EVENT</code></a> event.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../util/LifecycleBase.html#stopInternal()">stopInternal</a></code>&nbsp;in class&nbsp;<code><a href="../util/LifecycleBase.html" title="class in org.apache.catalina.util">LifecycleBase</a></code></dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="../LifecycleException.html" title="class in org.apache.catalina">LifecycleException</a></code> - Stop error occurred</dd>
+</dl>
+</li>
+</ul>
+<a id="getDomainInternal()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getDomainInternal</h4>
+<pre class="methodSignature">protected&nbsp;java.lang.String&nbsp;getDomainInternal()</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../util/LifecycleMBeanBase.html#getDomainInternal()">LifecycleMBeanBase</a></code></span></div>
+<div class="block">Method implemented by sub-classes to identify the domain in which MBeans
+ should be registered.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../util/LifecycleMBeanBase.html#getDomainInternal()">getDomainInternal</a></code>&nbsp;in class&nbsp;<code><a href="../util/LifecycleMBeanBase.html" title="class in org.apache.catalina.util">LifecycleMBeanBase</a></code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>The name of the domain to use to register MBeans.</dd>
+</dl>
+</li>
+</ul>
+<a id="getObjectNameKeyProperties()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getObjectNameKeyProperties</h4>
+<pre class="methodSignature">protected&nbsp;java.lang.String&nbsp;getObjectNameKeyProperties()</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../util/LifecycleMBeanBase.html#getObjectNameKeyProperties()">LifecycleMBeanBase</a></code></span></div>
+<div class="block">Allow sub-classes to specify the key properties component of the
+ <code>ObjectName</code> that will be used to register this component.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../util/LifecycleMBeanBase.html#getObjectNameKeyProperties()">getObjectNameKeyProperties</a></code>&nbsp;in class&nbsp;<code><a href="../util/LifecycleMBeanBase.html" title="class in org.apache.catalina.util">LifecycleMBeanBase</a></code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>The string representation of the key properties component of the
+          desired <code>ObjectName</code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</section>
+</li>
+</ul>
+</div>
+</div>
+</main>
+<!-- ========= END OF CLASS DATA ========= -->
+<footer role="contentinfo">
+<nav role="navigation">
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a id="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a id="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../index.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage"><b>Apache Tomcat 9.0.76</b></div>
+</div>
+<div class="subNav">
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a id="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</nav>
+<p class="legalCopy"><small>Copyright &#169; 2000-2023 Apache Software Foundation. All Rights Reserved.</small></p>
+</footer>
+</body>
+</html>

Added: tomcat/site/trunk/docs/tomcat-9.0-doc/api/org/apache/catalina/filters/RateLimitFilter.html
URL: http://svn.apache.org/viewvc/tomcat/site/trunk/docs/tomcat-9.0-doc/api/org/apache/catalina/filters/RateLimitFilter.html?rev=1910321&view=auto
==============================================================================
--- tomcat/site/trunk/docs/tomcat-9.0-doc/api/org/apache/catalina/filters/RateLimitFilter.html (added)
+++ tomcat/site/trunk/docs/tomcat-9.0-doc/api/org/apache/catalina/filters/RateLimitFilter.html Fri Jun  9 07:47:37 2023
@@ -0,0 +1,743 @@
+<!DOCTYPE HTML>
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<title>RateLimitFilter (Apache Tomcat 9.0.76 API Documentation)</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<link rel="stylesheet" type="text/css" href="../../../../jquery/jquery-ui.min.css" title="Style">
+<link rel="stylesheet" type="text/css" href="../../../../jquery-ui.overrides.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+<script type="text/javascript" src="../../../../jquery/jszip/dist/jszip.min.js"></script>
+<script type="text/javascript" src="../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
+<!--[if IE]>
+<script type="text/javascript" src="../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
+<![endif]-->
+<script type="text/javascript" src="../../../../jquery/jquery-3.6.1.min.js"></script>
+<script type="text/javascript" src="../../../../jquery/jquery-ui.min.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="RateLimitFilter (Apache Tomcat 9.0.76 API Documentation)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+var pathtoroot = "../../../../";
+var useModuleDirectories = true;
+loadScripts(document, 'script');</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<header role="banner">
+<nav role="navigation">
+<div class="fixedNav">
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a id="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a id="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../index.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage"><b>Apache Tomcat 9.0.76</b></div>
+</div>
+<div class="subNav">
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses.html">All&nbsp;Classes</a></li>
+</ul>
+<ul class="navListSearch">
+<li><label for="search">SEARCH:</label>
+<input type="text" id="search" value="search" disabled="disabled">
+<input type="reset" id="reset" value="reset" disabled="disabled">
+</li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a id="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+</div>
+<div class="navPadding">&nbsp;</div>
+<script type="text/javascript"><!--
+$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
+//-->
+</script>
+</nav>
+</header>
+<!-- ======== START OF CLASS DATA ======== -->
+<main role="main">
+<div class="header">
+<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.apache.catalina.filters</a></div>
+<h2 title="Class RateLimitFilter" class="title">Class RateLimitFilter</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li>java.lang.Object</li>
+<li>
+<ul class="inheritance">
+<li><a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/GenericFilter.html?is-external=true" title="class or interface in javax.servlet" class="externalLink">javax.servlet.GenericFilter</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.catalina.filters.RateLimitFilter</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><code>java.io.Serializable</code>, <code><a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/Filter.html?is-external=true" title="class or interface in javax.servlet" class="externalLink">Filter</a></code>, <code><a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/FilterConfig.html?is-external=true" title="class or interface in javax.servlet" class="externalLink">FilterConfig</a></code></dd>
+</dl>
+<hr>
+<pre>public class <span class="typeNameLabel">RateLimitFilter</span>
+extends <a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/GenericFilter.html?is-external=true" title="class or interface in javax.servlet" class="externalLink">GenericFilter</a></pre>
+<div class="block"><p>
+ Servlet filter that can help mitigate Denial of Service (DoS) and Brute Force attacks by limiting the number of a
+ requests that are allowed from a single IP address within a time window (also referred to as a time bucket), e.g. 300
+ Requests per 60 seconds.
+ </p>
+ <p>
+ The filter works by incrementing a counter in a time bucket for each IP address, and if the counter exceeds the
+ allowed limit then further requests from that IP are dropped with a &quot;429 Too many requests&quot; response until
+ the bucket time ends and a new bucket starts.
+ </p>
+ <p>
+ The filter is optimized for efficiency and low overhead, so it converts some configured values to more efficient
+ values. For example, a configuration of a 60 seconds time bucket is converted to 65.536 seconds. That allows for very
+ fast bucket calculation using bit shift arithmetic. In order to remain true to the user intent, the configured number
+ of requests is then multiplied by the same ratio, so a configuration of 100 Requests per 60 seconds, has the real
+ values of 109 Requests per 65 seconds.
+ </p>
+ <p>
+ It is common to set up different restrictions for different URIs. For example, a login page or authentication script
+ is typically expected to get far less requests than the rest of the application, so you can add a filter definition
+ that would allow only 5 requests per 15 seconds and map those URIs to it.
+ </p>
+ <p>
+ You can set <code>enforce</code> to <code>false</code> to disable the termination of requests that exceed the allowed
+ limit. Then your application code can inspect the Request Attribute
+ <code>org.apache.catalina.filters.RateLimitFilter.Count</code> and decide how to handle the request based on other
+ information that it has, e.g. allow more requests to certain users based on roles, etc.
+ </p>
+ <p>
+ <strong>WARNING:</strong> if Tomcat is behind a reverse proxy then you must make sure that the Rate Limit Filter sees
+ the client IP address, so if for example you are using the <a href="#Remote_IP_Filter">Remote IP Filter</a>, then the
+ filter mapping for the Rate Limit Filter must come <em>after</em> the mapping of the Remote IP Filter to ensure that
+ each request has its IP address resolved before the Rate Limit Filter is applied. Failure to do so will count
+ requests from different IPs in the same bucket and will result in a self inflicted DoS attack.
+ </p></div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../serialized-form.html#org.apache.catalina.filters.RateLimitFilter">Serialized Form</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<section>
+<ul class="blockList">
+<li class="blockList"><a id="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colSecond" scope="col">Field</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static int</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#DEFAULT_BUCKET_DURATION">DEFAULT_BUCKET_DURATION</a></span></code></th>
+<td class="colLast">
+<div class="block">default duration in seconds</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static int</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#DEFAULT_BUCKET_REQUESTS">DEFAULT_BUCKET_REQUESTS</a></span></code></th>
+<td class="colLast">
+<div class="block">default number of requests per duration</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static boolean</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#DEFAULT_ENFORCE">DEFAULT_ENFORCE</a></span></code></th>
+<td class="colLast">
+<div class="block">default value for enforce</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static int</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#DEFAULT_STATUS_CODE">DEFAULT_STATUS_CODE</a></span></code></th>
+<td class="colLast">
+<div class="block">default status code to return if requests per duration exceeded</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static java.lang.String</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#DEFAULT_STATUS_MESSAGE">DEFAULT_STATUS_MESSAGE</a></span></code></th>
+<td class="colLast">
+<div class="block">default status message to return if requests per duration exceeded</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static java.lang.String</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#PARAM_BUCKET_DURATION">PARAM_BUCKET_DURATION</a></span></code></th>
+<td class="colLast">
+<div class="block">init-param to set the bucket duration in seconds</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static java.lang.String</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#PARAM_BUCKET_REQUESTS">PARAM_BUCKET_REQUESTS</a></span></code></th>
+<td class="colLast">
+<div class="block">init-param to set the bucket number of requests</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static java.lang.String</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#PARAM_ENFORCE">PARAM_ENFORCE</a></span></code></th>
+<td class="colLast">
+<div class="block">init-param to set the enforce flag</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static java.lang.String</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#PARAM_STATUS_CODE">PARAM_STATUS_CODE</a></span></code></th>
+<td class="colLast">
+<div class="block">init-param to set a custom status code if requests per duration exceeded</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static java.lang.String</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#PARAM_STATUS_MESSAGE">PARAM_STATUS_MESSAGE</a></span></code></th>
+<td class="colLast">
+<div class="block">init-param to set a custom status message if requests per duration exceeded</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static java.lang.String</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#RATE_LIMIT_ATTRIBUTE_COUNT">RATE_LIMIT_ATTRIBUTE_COUNT</a></span></code></th>
+<td class="colLast">
+<div class="block">request attribute that will contain the number of requests per duration</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</section>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<section>
+<ul class="blockList">
+<li class="blockList"><a id="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Constructor</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tr class="altColor">
+<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E()">RateLimitFilter</a></span>()</code></th>
+<td class="colLast">&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+</section>
+<!-- ========== METHOD SUMMARY =========== -->
+<section>
+<ul class="blockList">
+<li class="blockList"><a id="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colSecond" scope="col">Method</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#destroy()">destroy</a></span>()</code></th>
+<td class="colLast">
+<div class="block">Called by the web container to indicate to a filter that it is being taken out of service.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#doFilter(javax.servlet.ServletRequest,javax.servlet.ServletResponse,javax.servlet.FilterChain)">doFilter</a></span>&#8203;(<a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/ServletRequest.html?is-external=true" title="class or interface in javax.servlet" class="externalLink">ServletRequest</a>&nbsp;request,
+        <a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/ServletResponse.html?is-external=true" title="class or interface in javax.servlet" class="externalLink">ServletResponse</a>&nbsp;response,
+        <a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/FilterChain.html?is-external=true" title="class or interface in javax.servlet" class="externalLink">FilterChain</a>&nbsp;chain)</code></th>
+<td class="colLast">
+<div class="block">The <code>doFilter</code> method of the Filter is called by the container each time a request/response pair is
+ passed through the chain due to a client request for a resource at the end of the chain.</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>int</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getActualDurationInSeconds()">getActualDurationInSeconds</a></span>()</code></th>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getActualRequests()">getActualRequests</a></span>()</code></th>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#init()">init</a></span>()</code></th>
+<td class="colLast">
+<div class="block">Convenience method for sub-classes to save them having to call <code>super.init(config)</code>.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a id="methods.inherited.from.class.javax.servlet.GenericFilter">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;javax.servlet.<a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/GenericFilter.html?is-external=true" title="class or interface in javax.servlet" class="externalLink">GenericFilter</a></h3>
+<code><a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/GenericFilter.html?is-external=true#getFilterConfig()" title="class or interface in javax.servlet" class="externalLink">getFilterConfig</a>, <a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/GenericFilter.html?is-external=true#getFilterName()" title="class or interface in javax.servlet" class="externalLink">getFilterName</a>, <a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/GenericFilter.html?is-external=true#getInitParameter(java.lang.String)" title="class or interface in javax.servlet" class="externalLink">getInitParameter</a>, <a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/GenericFilter.html?is-external=true#getInitParameterNames()" title="class or interface in javax.servlet" class="externalLink">getInitParameterNames</a>, <a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/GenericFilter.html?is-external=true#getServletContext()"
  title="class or interface in javax.servlet" class="externalLink">getServletContext</a>, <a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/GenericFilter.html?is-external=true#init(javax.servlet.FilterConfig)" title="class or interface in javax.servlet" class="externalLink">init</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
+<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
+</ul>
+</li>
+</ul>
+</section>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<section>
+<ul class="blockList">
+<li class="blockList"><a id="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a id="DEFAULT_BUCKET_DURATION">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>DEFAULT_BUCKET_DURATION</h4>
+<pre>public static final&nbsp;int DEFAULT_BUCKET_DURATION</pre>
+<div class="block">default duration in seconds</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#org.apache.catalina.filters.RateLimitFilter.DEFAULT_BUCKET_DURATION">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a id="DEFAULT_BUCKET_REQUESTS">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>DEFAULT_BUCKET_REQUESTS</h4>
+<pre>public static final&nbsp;int DEFAULT_BUCKET_REQUESTS</pre>
+<div class="block">default number of requests per duration</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#org.apache.catalina.filters.RateLimitFilter.DEFAULT_BUCKET_REQUESTS">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a id="DEFAULT_ENFORCE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>DEFAULT_ENFORCE</h4>
+<pre>public static final&nbsp;boolean DEFAULT_ENFORCE</pre>
+<div class="block">default value for enforce</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#org.apache.catalina.filters.RateLimitFilter.DEFAULT_ENFORCE">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a id="DEFAULT_STATUS_CODE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>DEFAULT_STATUS_CODE</h4>
+<pre>public static final&nbsp;int DEFAULT_STATUS_CODE</pre>
+<div class="block">default status code to return if requests per duration exceeded</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#org.apache.catalina.filters.RateLimitFilter.DEFAULT_STATUS_CODE">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a id="DEFAULT_STATUS_MESSAGE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>DEFAULT_STATUS_MESSAGE</h4>
+<pre>public static final&nbsp;java.lang.String DEFAULT_STATUS_MESSAGE</pre>
+<div class="block">default status message to return if requests per duration exceeded</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#org.apache.catalina.filters.RateLimitFilter.DEFAULT_STATUS_MESSAGE">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a id="RATE_LIMIT_ATTRIBUTE_COUNT">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>RATE_LIMIT_ATTRIBUTE_COUNT</h4>
+<pre>public static final&nbsp;java.lang.String RATE_LIMIT_ATTRIBUTE_COUNT</pre>
+<div class="block">request attribute that will contain the number of requests per duration</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#org.apache.catalina.filters.RateLimitFilter.RATE_LIMIT_ATTRIBUTE_COUNT">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a id="PARAM_BUCKET_DURATION">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>PARAM_BUCKET_DURATION</h4>
+<pre>public static final&nbsp;java.lang.String PARAM_BUCKET_DURATION</pre>
+<div class="block">init-param to set the bucket duration in seconds</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#org.apache.catalina.filters.RateLimitFilter.PARAM_BUCKET_DURATION">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a id="PARAM_BUCKET_REQUESTS">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>PARAM_BUCKET_REQUESTS</h4>
+<pre>public static final&nbsp;java.lang.String PARAM_BUCKET_REQUESTS</pre>
+<div class="block">init-param to set the bucket number of requests</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#org.apache.catalina.filters.RateLimitFilter.PARAM_BUCKET_REQUESTS">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a id="PARAM_ENFORCE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>PARAM_ENFORCE</h4>
+<pre>public static final&nbsp;java.lang.String PARAM_ENFORCE</pre>
+<div class="block">init-param to set the enforce flag</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#org.apache.catalina.filters.RateLimitFilter.PARAM_ENFORCE">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a id="PARAM_STATUS_CODE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>PARAM_STATUS_CODE</h4>
+<pre>public static final&nbsp;java.lang.String PARAM_STATUS_CODE</pre>
+<div class="block">init-param to set a custom status code if requests per duration exceeded</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#org.apache.catalina.filters.RateLimitFilter.PARAM_STATUS_CODE">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a id="PARAM_STATUS_MESSAGE">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>PARAM_STATUS_MESSAGE</h4>
+<pre>public static final&nbsp;java.lang.String PARAM_STATUS_MESSAGE</pre>
+<div class="block">init-param to set a custom status message if requests per duration exceeded</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#org.apache.catalina.filters.RateLimitFilter.PARAM_STATUS_MESSAGE">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</section>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<section>
+<ul class="blockList">
+<li class="blockList"><a id="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a id="&lt;init&gt;()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>RateLimitFilter</h4>
+<pre>public&nbsp;RateLimitFilter()</pre>
+</li>
+</ul>
+</li>
+</ul>
+</section>
+<!-- ============ METHOD DETAIL ========== -->
+<section>
+<ul class="blockList">
+<li class="blockList"><a id="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a id="getActualRequests()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getActualRequests</h4>
+<pre class="methodSignature">public&nbsp;int&nbsp;getActualRequests()</pre>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the actual maximum allowed requests per time bucket</dd>
+</dl>
+</li>
+</ul>
+<a id="getActualDurationInSeconds()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getActualDurationInSeconds</h4>
+<pre class="methodSignature">public&nbsp;int&nbsp;getActualDurationInSeconds()</pre>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the actual duration of a time bucket in milliseconds</dd>
+</dl>
+</li>
+</ul>
+<a id="init()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>init</h4>
+<pre class="methodSignature">public&nbsp;void&nbsp;init()
+          throws <a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/ServletException.html?is-external=true" title="class or interface in javax.servlet" class="externalLink">ServletException</a></pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/GenericFilter.html?is-external=true#init()" title="class or interface in javax.servlet" class="externalLink">javax.servlet.GenericFilter</a></code></span></div>
+<div class="block">Convenience method for sub-classes to save them having to call <code>super.init(config)</code>. This is a NO-OP
+ by default.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/GenericFilter.html?is-external=true#init()" title="class or interface in javax.servlet" class="externalLink">init</a></code>&nbsp;in class&nbsp;<code><a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/GenericFilter.html?is-external=true" title="class or interface in javax.servlet" class="externalLink">GenericFilter</a></code></dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/ServletException.html?is-external=true" title="class or interface in javax.servlet" class="externalLink">ServletException</a></code> - If an exception occurs that interrupts the Filter's normal operation</dd>
+</dl>
+</li>
+</ul>
+<a id="doFilter(javax.servlet.ServletRequest,javax.servlet.ServletResponse,javax.servlet.FilterChain)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>doFilter</h4>
+<pre class="methodSignature">public&nbsp;void&nbsp;doFilter&#8203;(<a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/ServletRequest.html?is-external=true" title="class or interface in javax.servlet" class="externalLink">ServletRequest</a>&nbsp;request,
+                     <a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/ServletResponse.html?is-external=true" title="class or interface in javax.servlet" class="externalLink">ServletResponse</a>&nbsp;response,
+                     <a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/FilterChain.html?is-external=true" title="class or interface in javax.servlet" class="externalLink">FilterChain</a>&nbsp;chain)
+              throws java.io.IOException,
+                     <a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/ServletException.html?is-external=true" title="class or interface in javax.servlet" class="externalLink">ServletException</a></pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/Filter.html?is-external=true#doFilter(javax.servlet.ServletRequest,javax.servlet.ServletResponse,javax.servlet.FilterChain)" title="class or interface in javax.servlet" class="externalLink">javax.servlet.Filter</a></code></span></div>
+<div class="block">The <code>doFilter</code> method of the Filter is called by the container each time a request/response pair is
+ passed through the chain due to a client request for a resource at the end of the chain. The FilterChain passed
+ in to this method allows the Filter to pass on the request and response to the next entity in the chain.
+ <p>
+ A typical implementation of this method would follow the following pattern:- <br>
+ 1. Examine the request<br>
+ 2. Optionally wrap the request object with a custom implementation to filter content or headers for input
+ filtering <br>
+ 3. Optionally wrap the response object with a custom implementation to filter content or headers for output
+ filtering <br>
+ 4. a) <strong>Either</strong> invoke the next entity in the chain using the FilterChain object
+ (<code>chain.doFilter()</code>), <br>
+ 4. b) <strong>or</strong> not pass on the request/response pair to the next entity in the filter chain to block
+ the request processing<br>
+ 5. Directly set headers on the response after invocation of the next entity in the filter chain.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>request</code> - The request to process</dd>
+<dd><code>response</code> - The response associated with the request</dd>
+<dd><code>chain</code> - Provides access to the next filter in the chain for this filter to pass the request and response
+                     to for further processing</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code>java.io.IOException</code> - if an I/O error occurs during this filter's processing of the request</dd>
+<dd><code><a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/ServletException.html?is-external=true" title="class or interface in javax.servlet" class="externalLink">ServletException</a></code> - if the processing fails for any other reason</dd>
+</dl>
+</li>
+</ul>
+<a id="destroy()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>destroy</h4>
+<pre class="methodSignature">public&nbsp;void&nbsp;destroy()</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="https://javaee.github.io/javaee-spec/javadocs/javax/servlet/Filter.html?is-external=true#destroy()" title="class or interface in javax.servlet" class="externalLink">javax.servlet.Filter</a></code></span></div>
+<div class="block">Called by the web container to indicate to a filter that it is being taken out of service. This method is only
+ called once all threads within the filter's doFilter method have exited or after a timeout period has passed.
+ After the web container calls this method, it will not call the doFilter method again on this instance of the
+ filter. <br>
+ <br>
+ This method gives the filter an opportunity to clean up any resources that are being held (for example, memory,
+ file handles, threads) and make sure that any persistent state is synchronized with the filter's current state in
+ memory. The default implementation is a NO-OP.</div>
+</li>
+</ul>
+</li>
+</ul>
+</section>
+</li>
+</ul>
+</div>
+</div>
+</main>
+<!-- ========= END OF CLASS DATA ========= -->
+<footer role="contentinfo">
+<nav role="navigation">
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a id="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a id="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../index.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage"><b>Apache Tomcat 9.0.76</b></div>
+</div>
+<div class="subNav">
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a id="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</nav>
+<p class="legalCopy"><small>Copyright &#169; 2000-2023 Apache Software Foundation. All Rights Reserved.</small></p>
+</footer>
+</body>
+</html>

Added: tomcat/site/trunk/docs/tomcat-9.0-doc/api/org/apache/catalina/util/NetMaskSet.html
URL: http://svn.apache.org/viewvc/tomcat/site/trunk/docs/tomcat-9.0-doc/api/org/apache/catalina/util/NetMaskSet.html?rev=1910321&view=auto
==============================================================================
--- tomcat/site/trunk/docs/tomcat-9.0-doc/api/org/apache/catalina/util/NetMaskSet.html (added)
+++ tomcat/site/trunk/docs/tomcat-9.0-doc/api/org/apache/catalina/util/NetMaskSet.html Fri Jun  9 07:47:37 2023
@@ -0,0 +1,478 @@
+<!DOCTYPE HTML>
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<title>NetMaskSet (Apache Tomcat 9.0.76 API Documentation)</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<link rel="stylesheet" type="text/css" href="../../../../jquery/jquery-ui.min.css" title="Style">
+<link rel="stylesheet" type="text/css" href="../../../../jquery-ui.overrides.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+<script type="text/javascript" src="../../../../jquery/jszip/dist/jszip.min.js"></script>
+<script type="text/javascript" src="../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
+<!--[if IE]>
+<script type="text/javascript" src="../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
+<![endif]-->
+<script type="text/javascript" src="../../../../jquery/jquery-3.6.1.min.js"></script>
+<script type="text/javascript" src="../../../../jquery/jquery-ui.min.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="NetMaskSet (Apache Tomcat 9.0.76 API Documentation)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+var pathtoroot = "../../../../";
+var useModuleDirectories = true;
+loadScripts(document, 'script');</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<header role="banner">
+<nav role="navigation">
+<div class="fixedNav">
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a id="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a id="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../index.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage"><b>Apache Tomcat 9.0.76</b></div>
+</div>
+<div class="subNav">
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses.html">All&nbsp;Classes</a></li>
+</ul>
+<ul class="navListSearch">
+<li><label for="search">SEARCH:</label>
+<input type="text" id="search" value="search" disabled="disabled">
+<input type="reset" id="reset" value="reset" disabled="disabled">
+</li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a id="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+</div>
+<div class="navPadding">&nbsp;</div>
+<script type="text/javascript"><!--
+$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
+//-->
+</script>
+</nav>
+</header>
+<!-- ======== START OF CLASS DATA ======== -->
+<main role="main">
+<div class="header">
+<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.apache.catalina.util</a></div>
+<h2 title="Class NetMaskSet" class="title">Class NetMaskSet</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li>java.lang.Object</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.catalina.util.NetMaskSet</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<pre>public class <span class="typeNameLabel">NetMaskSet</span>
+extends java.lang.Object</pre>
+<div class="block">This class maintains a Set of NetMask objects and allows to check if a given IP address is matched by any of the
+ NetMasks, making it easy to create Allow and Deny lists of CIDR networks and hosts.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<section>
+<ul class="blockList">
+<li class="blockList"><a id="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Constructor</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tr class="altColor">
+<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E()">NetMaskSet</a></span>()</code></th>
+<td class="colLast">&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+</section>
+<!-- ========== METHOD SUMMARY =========== -->
+<section>
+<ul class="blockList">
+<li class="blockList"><a id="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colSecond" scope="col">Method</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#add(java.lang.String)">add</a></span>&#8203;(java.lang.String&nbsp;input)</code></th>
+<td class="colLast">
+<div class="block">Creates a NetMask object from the input string and adds it to the set.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#add(org.apache.catalina.util.NetMask)">add</a></span>&#8203;(<a href="NetMask.html" title="class in org.apache.catalina.util">NetMask</a>&nbsp;netmask)</code></th>
+<td class="colLast">
+<div class="block">Adds a NetMask object to the set if the set does not contain it</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>java.util.List&lt;java.lang.String&gt;</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addAll(java.lang.String)">addAll</a></span>&#8203;(java.lang.String&nbsp;input)</code></th>
+<td class="colLast">
+<div class="block">Adds a <a href="NetMask.html" title="class in org.apache.catalina.util"><code>NetMask</code></a> list from a string input containing a comma-separated list of (hopefully valid)
+ <a href="NetMask.html" title="class in org.apache.catalina.util"><code>NetMask</code></a>s.</div>
+</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#clear()">clear</a></span>()</code></th>
+<td class="colLast">
+<div class="block">removes all entries from the set</div>
+</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#contains(java.lang.String)">contains</a></span>&#8203;(java.lang.String&nbsp;ipAddress)</code></th>
+<td class="colLast">
+<div class="block">Tests if the provided IP address matches any of the <a href="NetMask.html" title="class in org.apache.catalina.util"><code>NetMask</code></a>s in the set.</div>
+</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#contains(java.net.InetAddress)">contains</a></span>&#8203;(java.net.InetAddress&nbsp;inetAddress)</code></th>
+<td class="colLast">
+<div class="block">Tests if the provided InetAddress matches any of the <a href="NetMask.html" title="class in org.apache.catalina.util"><code>NetMask</code></a>s in the set.</div>
+</td>
+</tr>
+<tr id="i6" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isEmpty()">isEmpty</a></span>()</code></th>
+<td class="colLast">
+<div class="block">Tests if the set is empty.</div>
+</td>
+</tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>java.lang.String</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#toString()">toString</a></span>()</code></th>
+<td class="colLast">
+<div class="block">Provides a string representation of this NetMaskSet.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
+<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait</code></li>
+</ul>
+</li>
+</ul>
+</section>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<section>
+<ul class="blockList">
+<li class="blockList"><a id="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a id="&lt;init&gt;()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>NetMaskSet</h4>
+<pre>public&nbsp;NetMaskSet()</pre>
+</li>
+</ul>
+</li>
+</ul>
+</section>
+<!-- ============ METHOD DETAIL ========== -->
+<section>
+<ul class="blockList">
+<li class="blockList"><a id="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a id="contains(java.net.InetAddress)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>contains</h4>
+<pre class="methodSignature">public&nbsp;boolean&nbsp;contains&#8203;(java.net.InetAddress&nbsp;inetAddress)</pre>
+<div class="block">Tests if the provided InetAddress matches any of the <a href="NetMask.html" title="class in org.apache.catalina.util"><code>NetMask</code></a>s in the set.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>inetAddress</code> - An InetAddress to check</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd><code>true</code> if the passed inetAddress is matched by any of the <a href="NetMask.html" title="class in org.apache.catalina.util"><code>NetMask</code></a>s in the set</dd>
+</dl>
+</li>
+</ul>
+<a id="contains(java.lang.String)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>contains</h4>
+<pre class="methodSignature">public&nbsp;boolean&nbsp;contains&#8203;(java.lang.String&nbsp;ipAddress)
+                 throws java.net.UnknownHostException</pre>
+<div class="block">Tests if the provided IP address matches any of the <a href="NetMask.html" title="class in org.apache.catalina.util"><code>NetMask</code></a>s in the set.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>ipAddress</code> - an IP address to check</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd><code>true</code> if the passed IP address is matched by any of the <a href="NetMask.html" title="class in org.apache.catalina.util"><code>NetMask</code></a>s in the set</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code>java.net.UnknownHostException</code> - if the passed input is not a valid IP address</dd>
+</dl>
+</li>
+</ul>
+<a id="add(org.apache.catalina.util.NetMask)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>add</h4>
+<pre class="methodSignature">public&nbsp;boolean&nbsp;add&#8203;(<a href="NetMask.html" title="class in org.apache.catalina.util">NetMask</a>&nbsp;netmask)</pre>
+<div class="block">Adds a NetMask object to the set if the set does not contain it</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>netmask</code> - The NetMask to add</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the object was added</dd>
+</dl>
+</li>
+</ul>
+<a id="add(java.lang.String)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>add</h4>
+<pre class="methodSignature">public&nbsp;boolean&nbsp;add&#8203;(java.lang.String&nbsp;input)</pre>
+<div class="block">Creates a NetMask object from the input string and adds it to the set.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>input</code> - The string from which to construct the NetMask</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the object was added</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code>java.lang.IllegalArgumentException</code> - if the input is not a valid CIDR format.</dd>
+</dl>
+</li>
+</ul>
+<a id="clear()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>clear</h4>
+<pre class="methodSignature">public&nbsp;void&nbsp;clear()</pre>
+<div class="block">removes all entries from the set</div>
+</li>
+</ul>
+<a id="isEmpty()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isEmpty</h4>
+<pre class="methodSignature">public&nbsp;boolean&nbsp;isEmpty()</pre>
+<div class="block">Tests if the set is empty.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd><code>true</code> if the set is empty, otherwise <code>false</code></dd>
+</dl>
+</li>
+</ul>
+<a id="addAll(java.lang.String)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>addAll</h4>
+<pre class="methodSignature">public&nbsp;java.util.List&lt;java.lang.String&gt;&nbsp;addAll&#8203;(java.lang.String&nbsp;input)</pre>
+<div class="block">Adds a <a href="NetMask.html" title="class in org.apache.catalina.util"><code>NetMask</code></a> list from a string input containing a comma-separated list of (hopefully valid)
+ <a href="NetMask.html" title="class in org.apache.catalina.util"><code>NetMask</code></a>s.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>input</code> - The input string</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>a list of processing error messages (empty when no errors)</dd>
+</dl>
+</li>
+</ul>
+<a id="toString()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>toString</h4>
+<pre class="methodSignature">public&nbsp;java.lang.String&nbsp;toString()</pre>
+<div class="block">Provides a string representation of this NetMaskSet. The format of the String is not guaranteed to remain fixed.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code>toString</code>&nbsp;in class&nbsp;<code>java.lang.Object</code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>a comma separated list of the <code>NetMask</code>s in this set</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</section>
+</li>
+</ul>
+</div>
+</div>
+</main>
+<!-- ========= END OF CLASS DATA ========= -->
+<footer role="contentinfo">
+<nav role="navigation">
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a id="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a id="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../index.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+<div class="aboutLanguage"><b>Apache Tomcat 9.0.76</b></div>
+</div>
+<div class="subNav">
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a id="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</nav>
+<p class="legalCopy"><small>Copyright &#169; 2000-2023 Apache Software Foundation. All Rights Reserved.</small></p>
+</footer>
+</body>
+</html>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org