Add default tomcat service
|
@ -3,8 +3,8 @@
|
||||||
test.dockerapp/tomcat/certificates/
|
test.dockerapp/tomcat/certificates/
|
||||||
|
|
||||||
test.dockerapp/tomcat/webapps/
|
test.dockerapp/tomcat/webapps/
|
||||||
!test.dockerapp/tomcat/webapps/manager/
|
!test.dockerapp/tomcat/webapps/manager
|
||||||
!test.dockerapp/tomcat/webapps/host-manager/
|
!test.dockerapp/tomcat/webapps/host-manager
|
||||||
!test.dockerapp/tomcat/webapps/examples/
|
!test.dockerapp/tomcat/webapps/examples
|
||||||
!test.dockerapp/tomcat/webapps/docs/
|
!test.dockerapp/tomcat/webapps/docs
|
||||||
!test.dockerapp/tomcat/webapps/ROOT/
|
!test.dockerapp/tomcat/webapps/ROOT
|
||||||
|
|
|
@ -0,0 +1,172 @@
|
||||||
|
================================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
|
||||||
|
Apache Tomcat Version 8.0.53
|
||||||
|
Release Notes
|
||||||
|
|
||||||
|
|
||||||
|
=========
|
||||||
|
CONTENTS:
|
||||||
|
=========
|
||||||
|
|
||||||
|
* Dependency Changes
|
||||||
|
* API Stability
|
||||||
|
* Bundled APIs
|
||||||
|
* Web application reloading and static fields in shared libraries
|
||||||
|
* Security manager URLs
|
||||||
|
* Symlinking static resources
|
||||||
|
* Viewing the Tomcat Change Log
|
||||||
|
* Cryptographic software notice
|
||||||
|
* When all else fails
|
||||||
|
|
||||||
|
|
||||||
|
===================
|
||||||
|
Dependency Changes:
|
||||||
|
===================
|
||||||
|
Tomcat 8.0 is designed to run on Java SE 7 and later.
|
||||||
|
|
||||||
|
|
||||||
|
==============
|
||||||
|
API Stability:
|
||||||
|
==============
|
||||||
|
|
||||||
|
The public interfaces for the following classes are fixed and will not be
|
||||||
|
changed at all during the remaining lifetime of the 8.x series:
|
||||||
|
- All classes in the javax namespace
|
||||||
|
|
||||||
|
The public interfaces for the following classes may be added to in order to
|
||||||
|
resolve bugs and/or add new features. No existing interface method will be
|
||||||
|
removed or changed although it may be deprecated.
|
||||||
|
- org.apache.catalina.* (excluding sub-packages)
|
||||||
|
|
||||||
|
Note: As Tomcat 8 matures, the above list will be added to. The list is not
|
||||||
|
considered complete at this time.
|
||||||
|
|
||||||
|
The remaining classes are considered part of the Tomcat internals and may change
|
||||||
|
without notice between point releases.
|
||||||
|
|
||||||
|
|
||||||
|
=============
|
||||||
|
Bundled APIs:
|
||||||
|
=============
|
||||||
|
A standard installation of Tomcat 8.0 makes all of the following APIs available
|
||||||
|
for use by web applications (by placing them in "lib"):
|
||||||
|
* annotations-api.jar (Annotations package)
|
||||||
|
* catalina.jar (Tomcat Catalina implementation)
|
||||||
|
* catalina-ant.jar (Tomcat Catalina Ant tasks)
|
||||||
|
* catalina-ha.jar (High availability package)
|
||||||
|
* catalina-storeconfig.jar (Generation of XML configuration from current state)
|
||||||
|
* catalina-tribes.jar (Group communication)
|
||||||
|
* ecj-4.6.3.jar (Eclipse JDT Java compiler)
|
||||||
|
* el-api.jar (EL 3.0 API)
|
||||||
|
* jasper.jar (Jasper 2 Compiler and Runtime)
|
||||||
|
* jasper-el.jar (Jasper 2 EL implementation)
|
||||||
|
* jsp-api.jar (JSP 2.3 API)
|
||||||
|
* servlet-api.jar (Servlet 3.1 API)
|
||||||
|
* tomcat-api.jar (Interfaces shared by Catalina and Jasper)
|
||||||
|
* tomcat-coyote.jar (Tomcat connectors and utility classes)
|
||||||
|
* tomcat-dbcp.jar (package renamed database connection pool based on Commons DBCP)
|
||||||
|
* tomcat-jdbc.jar (Tomcat's database connection pooling solution)
|
||||||
|
* tomcat-jni.jar (Interface to the native component of the APR/native connector)
|
||||||
|
* tomcat-util.jar (Various utilities)
|
||||||
|
* tomcat-websocket.jar (WebSocket 1.1 implementation)
|
||||||
|
* websocket-api.jar (WebSocket 1.1 API)
|
||||||
|
|
||||||
|
You can make additional APIs available to all of your web applications by
|
||||||
|
putting unpacked classes into a "classes" directory (not created by default),
|
||||||
|
or by placing them in JAR files in the "lib" directory.
|
||||||
|
|
||||||
|
To override the XML parser implementation or interfaces, use the endorsed
|
||||||
|
mechanism of the JVM. The default configuration defines JARs located in
|
||||||
|
"endorsed" as endorsed. This mechanism is no longer supported with Java 9.
|
||||||
|
|
||||||
|
|
||||||
|
================================================================
|
||||||
|
Web application reloading and static fields in shared libraries:
|
||||||
|
================================================================
|
||||||
|
Some shared libraries (many are part of the JDK) keep references to objects
|
||||||
|
instantiated by the web application. To avoid class loading related problems
|
||||||
|
(ClassCastExceptions, messages indicating that the classloader
|
||||||
|
is stopped, etc.), the shared libraries state should be reinitialized.
|
||||||
|
|
||||||
|
Something which might help is to avoid putting classes which would be
|
||||||
|
referenced by a shared static field in the web application classloader,
|
||||||
|
and putting them in the shared classloader instead (JARs should be put in the
|
||||||
|
"lib" folder, and classes should be put in the "classes" folder).
|
||||||
|
|
||||||
|
|
||||||
|
======================
|
||||||
|
Security manager URLs:
|
||||||
|
======================
|
||||||
|
In order to grant security permissions to JARs located inside the
|
||||||
|
web application repository, use URLs of of the following format
|
||||||
|
in your policy file:
|
||||||
|
|
||||||
|
file:${catalina.base}/webapps/examples/WEB-INF/lib/driver.jar
|
||||||
|
|
||||||
|
|
||||||
|
============================
|
||||||
|
Symlinking static resources:
|
||||||
|
============================
|
||||||
|
By default, Unix symlinks will not work when used in a web application to link
|
||||||
|
resources located outside the web application root directory.
|
||||||
|
|
||||||
|
This behavior is optional, and the "allowLinking" flag may be used to disable
|
||||||
|
the check.
|
||||||
|
|
||||||
|
|
||||||
|
==============================
|
||||||
|
Viewing the Tomcat Change Log:
|
||||||
|
==============================
|
||||||
|
The full change log is available from https://tomcat.apache.org and is also
|
||||||
|
included in the documentation web application.
|
||||||
|
|
||||||
|
|
||||||
|
=============================
|
||||||
|
Cryptographic software notice
|
||||||
|
=============================
|
||||||
|
This distribution includes cryptographic software. The country in
|
||||||
|
which you currently reside may have restrictions on the import,
|
||||||
|
possession, use, and/or re-export to another country, of
|
||||||
|
encryption software. BEFORE using any encryption software, please
|
||||||
|
check your country's laws, regulations and policies concerning the
|
||||||
|
import, possession, or use, and re-export of encryption software, to
|
||||||
|
see if this is permitted. See <http://www.wassenaar.org/> for more
|
||||||
|
information.
|
||||||
|
|
||||||
|
The U.S. Government Department of Commerce, Bureau of Industry and
|
||||||
|
Security (BIS), has classified this software as Export Commodity
|
||||||
|
Control Number (ECCN) 5D002.C.1, which includes information security
|
||||||
|
software using or performing cryptographic functions with asymmetric
|
||||||
|
algorithms. The form and manner of this Apache Software Foundation
|
||||||
|
distribution makes it eligible for export under the License Exception
|
||||||
|
ENC Technology Software Unrestricted (TSU) exception (see the BIS
|
||||||
|
Export Administration Regulations, Section 740.13) for both object
|
||||||
|
code and source code.
|
||||||
|
|
||||||
|
The following provides more details on the included cryptographic
|
||||||
|
software:
|
||||||
|
- Tomcat includes code designed to work with JSSE
|
||||||
|
- Tomcat includes code designed to work with OpenSSL
|
||||||
|
|
||||||
|
|
||||||
|
====================
|
||||||
|
When all else fails:
|
||||||
|
====================
|
||||||
|
See the FAQ
|
||||||
|
https://tomcat.apache.org/faq/
|
|
@ -0,0 +1,30 @@
|
||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
|
||||||
|
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
|
||||||
|
version="3.1"
|
||||||
|
metadata-complete="true">
|
||||||
|
|
||||||
|
<display-name>Welcome to Tomcat</display-name>
|
||||||
|
<description>
|
||||||
|
Welcome to Tomcat
|
||||||
|
</description>
|
||||||
|
|
||||||
|
</web-app>
|
|
@ -0,0 +1,295 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" id="Apache_Logo_Horizontal" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
x="0px" y="0px" viewBox="0 0 9835 1713.9" enable-background="new 0 0 9835 1713.9" xml:space="preserve">
|
||||||
|
<path fill="#6D6E71" d="M1069.6,296.4v92.2h-11.8v-92.2h-33.7V285h79.4v11.4H1069.6z"/>
|
||||||
|
<path fill="#6D6E71" d="M1234.8,388.5V343h-62.4v45.6h-11.8V285h11.8v46.8h62.4V285h11.8v103.6H1234.8z"/>
|
||||||
|
<path fill="#6D6E71" d="M1329.2,296.4v34h52.2v11.4h-52.2v35.5h60.4v11.3h-72.2V285h70.3v11.4H1329.2z"/>
|
||||||
|
<path fill="#D22128" d="M933.7,1098.5l247.5-591.6h47.5l247.5,591.6h-62.5l-76.7-185h-265.8l-75.8,185H933.7z M1205.4,575.2
|
||||||
|
l-121.7,292.5h240L1205.4,575.2z"/>
|
||||||
|
<path fill="#D22128" d="M1540.1,1098.5V506.9h245c101.7,0,175,94.2,175,185.8c0,96.7-68.3,187.5-170,187.5h-192.5v218.3H1540.1z
|
||||||
|
M1597.6,828.5h189.1c70,0,115-64.2,115-135.8c0-74.2-55-134.2-120-134.2h-184.1V828.5z"/>
|
||||||
|
<path fill="#D22128" d="M1927.7,1098.5l247.5-591.6h47.5l247.5,591.6h-62.5l-76.7-185h-265.8l-75.8,185H1927.7z M2199.3,575.2
|
||||||
|
l-121.7,292.5h240L2199.3,575.2z"/>
|
||||||
|
<path fill="#D22128" d="M2750.1,503.6c105,0,181.6,53.3,218.3,129.2l-46.7,28.3c-37.5-78.3-110.8-105-175-105
|
||||||
|
c-141.7,0-219.1,126.7-219.1,245.8c0,130.8,95.8,249.1,221.6,249.1c66.7,0,145-33.3,182.5-110l48.3,25
|
||||||
|
c-38.3,88.3-143.3,137.5-234.1,137.5c-162.5,0-276.6-155-276.6-305C2469.3,656,2571.7,503.6,2750.1,503.6z"/>
|
||||||
|
<path fill="#D22128" d="M3528,506.9v591.6h-58.3V821.9h-350.8v276.6h-57.5V506.9h57.5v263.3h350.8V506.9H3528z"/>
|
||||||
|
<path fill="#D22128" d="M4059.1,1046.8v51.7h-397.5V506.9h390v51.7h-332.5v213.3h290V821h-290v225.8H4059.1z"/>
|
||||||
|
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-4229.6655" y1="-4143.6401" x2="-3987.5886" y2="-3860.573" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 6189.0356 -1936.8361)">
|
||||||
|
<stop offset="0" style="stop-color:#F69923"/>
|
||||||
|
<stop offset="0.3123" style="stop-color:#F79A23"/>
|
||||||
|
<stop offset="0.8383" style="stop-color:#E97826"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_1_)" d="M729.5,8.1C702.6,24,657.9,68.9,604.6,134l49,92.5c34.4-49.2,69.3-93.4,104.5-131.2
|
||||||
|
c2.7-3,4.1-4.4,4.1-4.4c-1.4,1.5-2.7,3-4.1,4.4c-11.4,12.6-46,52.9-98.2,133.1c50.2-2.5,127.5-12.8,190.4-23.5
|
||||||
|
c18.7-105-18.4-153-18.4-153S784.8-24.6,729.5,8.1z"/>
|
||||||
|
<path fill="none" d="M646.5,535.5c0.4-0.1,0.7-0.1,1.1-0.2l-7.1,0.8c-0.4,0.2-0.8,0.4-1.2,0.6C641.7,536.3,644.1,535.9,646.5,535.5z
|
||||||
|
"/>
|
||||||
|
<path fill="none" d="M596.5,701.1c-4,0.9-8.1,1.6-12.3,2.2C588.4,702.7,592.5,702,596.5,701.1z"/>
|
||||||
|
<path fill="none" d="M256.7,1072.7c0.5-1.4,1-2.8,1.6-4.1c10.8-28.5,21.5-56.1,32-83.1c11.9-30.2,23.6-59.5,35.2-87.9
|
||||||
|
c12.2-29.9,24.3-58.8,36.1-86.8c12.5-29.3,24.7-57.5,36.8-84.7c9.8-22.1,19.5-43.5,29-64.2c3.2-6.9,6.3-13.7,9.5-20.5
|
||||||
|
c6.2-13.4,12.4-26.6,18.5-39.4c5.6-11.9,11.2-23.5,16.8-34.9c1.8-3.8,3.7-7.6,5.5-11.3c0.3-0.6,0.6-1.2,0.9-1.8l-6,0.7l-4.8-9.4
|
||||||
|
c-0.5,0.9-0.9,1.8-1.4,2.7c-8.6,17.1-17.1,34.3-25.6,51.7c-4.9,10-9.7,20.1-14.6,30.3c-13.4,28.1-26.5,56.5-39.5,85
|
||||||
|
c-13.1,28.8-25.9,57.8-38.5,86.9c-12.4,28.5-24.5,57.1-36.3,85.5c-11.8,28.4-23.4,56.8-34.7,84.9c-11.8,29.4-23.3,58.5-34.4,87.3
|
||||||
|
c-2.5,6.5-5,13-7.5,19.4c-8.9,23.2-17.6,46.2-26.1,68.8l7.5,14.9l6.7-0.7c0.2-0.7,0.5-1.4,0.7-2
|
||||||
|
C235.2,1129.9,246,1100.9,256.7,1072.7z"/>
|
||||||
|
<path fill="none" d="M581.2,703.8L581.2,703.8C581.2,703.8,581.2,703.8,581.2,703.8C581.2,703.8,581.2,703.8,581.2,703.8z"/>
|
||||||
|
<path fill="#BE202E" d="M564.9,784.6c-6.3,1.1-12.7,2.2-19.3,3.4c0,0-0.1,0-0.1,0.1c3.3-0.5,6.6-1,9.9-1.6
|
||||||
|
C558.6,785.9,561.8,785.3,564.9,784.6z"/>
|
||||||
|
<path opacity="0.35" fill="#BE202E" d="M564.9,784.6c-6.3,1.1-12.7,2.2-19.3,3.4c0,0-0.1,0-0.1,0.1c3.3-0.5,6.6-1,9.9-1.6
|
||||||
|
C558.6,785.9,561.8,785.3,564.9,784.6z"/>
|
||||||
|
<path fill="#BE202E" d="M581.3,703.7C581.3,703.8,581.3,703.8,581.3,703.7c-0.1,0-0.1,0.1-0.1,0.1c1-0.1,2.1-0.3,3.1-0.5
|
||||||
|
c4.2-0.6,8.3-1.3,12.3-2.2C591.6,702,586.5,702.9,581.3,703.7L581.3,703.7L581.3,703.7z"/>
|
||||||
|
<path opacity="0.35" fill="#BE202E" d="M581.3,703.7C581.3,703.8,581.3,703.8,581.3,703.7c-0.1,0-0.1,0.1-0.1,0.1
|
||||||
|
c1-0.1,2.1-0.3,3.1-0.5c4.2-0.6,8.3-1.3,12.3-2.2C591.6,702,586.5,702.9,581.3,703.7L581.3,703.7L581.3,703.7z"/>
|
||||||
|
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="-6021.2769" y1="-4174.8843" x2="-4294.1865" y2="-4174.8843" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 6189.0356 -1936.8361)">
|
||||||
|
<stop offset="0.3233" style="stop-color:#9E2064"/>
|
||||||
|
<stop offset="0.6302" style="stop-color:#C92037"/>
|
||||||
|
<stop offset="0.7514" style="stop-color:#CD2335"/>
|
||||||
|
<stop offset="1" style="stop-color:#E97826"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_2_)" d="M509.2,465.4c14.9-27.8,30-55,45.2-81.5c15.8-27.5,31.8-54.2,48-79.9c1-1.5,1.9-3.1,2.9-4.6
|
||||||
|
c16-25.3,32.1-49.6,48.4-72.9l-49-92.5c-3.7,4.5-7.4,9.1-11.1,13.7c-14.1,17.6-28.8,36.5-43.8,56.6c-17,22.6-34.4,46.8-52.1,72.2
|
||||||
|
c-16.3,23.4-32.9,48-49.5,73.4c-14.1,21.6-28.3,43.9-42.4,66.7c-0.5,0.8-1,1.7-1.6,2.6l63.7,125.9
|
||||||
|
C481.4,518.1,495.2,491.5,509.2,465.4z"/>
|
||||||
|
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="-5812.7939" y1="-4001.6594" x2="-4783.6157" y2="-4001.6594" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 6189.0356 -1936.8361)">
|
||||||
|
<stop offset="0" style="stop-color:#282662"/>
|
||||||
|
<stop offset="9.548390e-02" style="stop-color:#662E8D"/>
|
||||||
|
<stop offset="0.7882" style="stop-color:#9F2064"/>
|
||||||
|
<stop offset="0.9487" style="stop-color:#CD2032"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_3_)" d="M218.8,1174.8c-8.4,23.2-16.9,46.8-25.4,70.9c-0.1,0.4-0.2,0.7-0.4,1.1c-1.2,3.4-2.4,6.8-3.6,10.2
|
||||||
|
c-5.7,16.3-10.7,30.9-22.1,64.2c18.8,8.6,33.9,31.1,48.1,56.7c-1.5-26.5-12.5-51.4-33.3-70.7c92.6,4.2,172.4-19.2,213.6-86.9
|
||||||
|
c3.7-6,7.1-12.4,10.1-19.1c-18.8,23.8-42,33.8-85.7,31.4c-0.1,0-0.2,0.1-0.3,0.1c0.1,0,0.2-0.1,0.3-0.1
|
||||||
|
c64.4-28.8,96.7-56.5,125.3-102.3c6.8-10.9,13.3-22.7,20.1-35.9c-56.3,57.8-121.6,74.3-190.3,61.8l-51.6,5.7
|
||||||
|
C222,1166.1,220.4,1170.4,218.8,1174.8z"/>
|
||||||
|
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="-5924.2744" y1="-4190.9775" x2="-4197.1841" y2="-4190.9775" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 6189.0356 -1936.8361)">
|
||||||
|
<stop offset="0.3233" style="stop-color:#9E2064"/>
|
||||||
|
<stop offset="0.6302" style="stop-color:#C92037"/>
|
||||||
|
<stop offset="0.7514" style="stop-color:#CD2335"/>
|
||||||
|
<stop offset="1" style="stop-color:#E97826"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_4_)" d="M242.9,1059.3c11.1-28.8,22.6-57.9,34.4-87.3c11.3-28.1,22.9-56.5,34.7-84.9
|
||||||
|
c11.8-28.5,24-57,36.3-85.5c12.6-29,25.4-58,38.5-86.9c12.9-28.5,26.1-56.9,39.5-85c4.8-10.1,9.7-20.2,14.6-30.3
|
||||||
|
c8.4-17.4,17-34.6,25.6-51.7c0.5-0.9,0.9-1.8,1.4-2.7l-63.7-125.9c-1,1.7-2.1,3.4-3.1,5.1c-14.9,24.3-29.6,49.1-44.1,74.4
|
||||||
|
c-14.7,25.6-29.1,51.7-43.1,78.1c-11.9,22.3-23.5,44.8-34.7,67.5c-2.3,4.6-4.5,9.2-6.7,13.7c-13.9,28.6-26.4,56.2-37.8,82.8
|
||||||
|
c-12.9,30.1-24.2,58.8-34.1,86.1c-6.5,17.9-12.5,35.2-17.9,51.9c-4.5,14.2-8.7,28.4-12.7,42.6c-9.5,33.4-17.7,66.7-24.5,99.8
|
||||||
|
l64,126.4c8.5-22.6,17.1-45.6,26.1-68.8C237.9,1072.3,240.4,1065.8,242.9,1059.3z"/>
|
||||||
|
<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="-5798.3159" y1="-4167.6108" x2="-4890.6782" y2="-4167.6108" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 6189.0356 -1936.8361)">
|
||||||
|
<stop offset="0" style="stop-color:#282662"/>
|
||||||
|
<stop offset="9.548390e-02" style="stop-color:#662E8D"/>
|
||||||
|
<stop offset="0.7882" style="stop-color:#9F2064"/>
|
||||||
|
<stop offset="0.9487" style="stop-color:#CD2032"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_5_)" d="M144.4,1025.6c-8,40.5-13.8,80.8-16.6,120.8c-0.1,1.4-0.2,2.8-0.3,4.2c-20-32-73.5-63.3-73.4-63
|
||||||
|
c38.3,55.5,67.4,110.7,71.7,164.8c-20.5,4.2-48.6-1.9-81.1-13.8c33.9,31.1,59.3,39.7,69.2,42c-31.1,1.9-63.5,23.3-96.1,47.9
|
||||||
|
c47.7-19.5,86.3-27.2,113.9-20.9c-43.8,124-87.7,260.9-131.6,406.2c13.5-4,21.5-13,26-25.3c7.8-26.3,59.8-199,141.2-425.9
|
||||||
|
c2.3-6.5,4.6-12.9,7-19.5c0.7-1.8,1.3-3.6,2-5.4c8.6-23.8,17.5-48.1,26.7-72.9c2.1-5.6,4.2-11.3,6.3-17c0-0.1,0.1-0.2,0.1-0.3
|
||||||
|
l-64-126.4C145,1022.6,144.7,1024.1,144.4,1025.6z"/>
|
||||||
|
<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="-5924.2744" y1="-4012.23" x2="-4197.1841" y2="-4012.23" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 6189.0356 -1936.8361)">
|
||||||
|
<stop offset="0.3233" style="stop-color:#9E2064"/>
|
||||||
|
<stop offset="0.6302" style="stop-color:#C92037"/>
|
||||||
|
<stop offset="0.7514" style="stop-color:#CD2335"/>
|
||||||
|
<stop offset="1" style="stop-color:#E97826"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_6_)" d="M477.7,555.7c-1.8,3.7-3.7,7.5-5.5,11.3c-5.5,11.4-11.1,23-16.8,34.9c-6.1,12.8-12.3,26-18.5,39.4
|
||||||
|
c-3.1,6.8-6.3,13.6-9.5,20.5c-9.5,20.7-19.2,42.1-29,64.2c-12.1,27.2-24.3,55.4-36.8,84.7c-11.9,27.9-23.9,56.8-36.1,86.8
|
||||||
|
c-11.6,28.4-23.3,57.7-35.2,87.9c-10.6,27-21.3,54.6-32,83.1c-0.5,1.4-1,2.8-1.6,4.1c-10.7,28.3-21.5,57.3-32.4,87
|
||||||
|
c-0.2,0.7-0.5,1.4-0.7,2l51.6-5.7c-1-0.2-2-0.3-3.1-0.5c61.6-7.7,143.6-53.7,196.5-110.6c24.4-26.2,46.5-57.1,67-93.3
|
||||||
|
c15.2-26.9,29.6-56.8,43.2-89.8c11.9-28.9,23.3-60.1,34.4-94c-14.2,7.5-30.4,12.9-48.3,16.7c-3.1,0.7-6.3,1.3-9.6,1.9
|
||||||
|
c-3.2,0.6-6.5,1.1-9.9,1.6l0,0l0,0c0,0,0.1,0,0.1-0.1c57.5-22.1,93.7-64.8,120.1-117.1c-15.1,10.3-39.7,23.8-69.2,30.3
|
||||||
|
c-4,0.9-8.1,1.6-12.3,2.2c-1,0.1-2.1,0.3-3.1,0.5l0,0l0,0c0,0,0.1,0,0.1,0c0,0,0,0,0.1,0l0,0c19.9-8.3,36.8-17.7,51.4-28.7
|
||||||
|
c3.1-2.4,6.2-4.8,9.1-7.3c4.5-3.8,8.7-7.9,12.7-12.2c2.6-2.7,5.1-5.5,7.5-8.4c5.7-6.8,11.1-14.2,16.1-22.1c1.5-2.4,3-4.9,4.5-7.5
|
||||||
|
c1.9-3.7,3.7-7.3,5.5-10.8c8-16.1,14.5-30.5,19.6-43.2c2.6-6.3,4.8-12.2,6.7-17.6c0.8-2.2,1.5-4.3,2.2-6.3c2-6.1,3.7-11.5,5-16.2
|
||||||
|
c2-7.1,3.1-12.7,3.8-16.8l0,0l0,0c-1.9,1.5-4.2,3.1-6.7,4.6c-17.3,10.4-47.1,19.8-71.1,24.2l47.3-5.2l-47.3,5.2
|
||||||
|
c-0.4,0.1-0.7,0.1-1.1,0.2c-2.4,0.4-4.8,0.8-7.2,1.2c0.4-0.2,0.8-0.4,1.2-0.6l-161.9,17.7C478.3,554.5,478,555.1,477.7,555.7z"/>
|
||||||
|
<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="-6031.4116" y1="-4021.106" x2="-4304.3213" y2="-4021.106" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 6189.0356 -1936.8361)">
|
||||||
|
<stop offset="0.3233" style="stop-color:#9E2064"/>
|
||||||
|
<stop offset="0.6302" style="stop-color:#C92037"/>
|
||||||
|
<stop offset="0.7514" style="stop-color:#CD2335"/>
|
||||||
|
<stop offset="1" style="stop-color:#E97826"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_7_)" d="M660,228.4c-14.4,22.1-30.1,47.2-47.1,75.6c-0.9,1.5-1.8,3-2.7,4.5c-14.6,24.6-30.1,51.6-46.4,81.2
|
||||||
|
c-14.1,25.5-28.8,52.9-44,82.4c-13.3,25.7-27,52.9-41.1,81.7l161.9-17.7c47.2-21.7,68.3-41.3,88.7-69.7c5.4-7.8,10.9-16,16.3-24.5
|
||||||
|
c16.6-26,32.9-54.6,47.5-83c14.1-27.4,26.5-54.7,36-79.2c6.1-15.6,10.9-30.1,14.3-42.8c2.9-11.2,5.3-21.9,7.1-32.1
|
||||||
|
C787.5,215.6,710.2,225.9,660,228.4z"/>
|
||||||
|
<path fill="#BE202E" d="M555.4,786.4c-3.2,0.6-6.5,1.1-9.9,1.6l0,0C548.8,787.5,552.1,787,555.4,786.4z"/>
|
||||||
|
<path opacity="0.35" fill="#BE202E" d="M555.4,786.4c-3.2,0.6-6.5,1.1-9.9,1.6l0,0C548.8,787.5,552.1,787,555.4,786.4z"/>
|
||||||
|
<linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="-5924.2744" y1="-3959.0669" x2="-4197.1841" y2="-3959.0669" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 6189.0356 -1936.8361)">
|
||||||
|
<stop offset="0.3233" style="stop-color:#9E2064"/>
|
||||||
|
<stop offset="0.6302" style="stop-color:#C92037"/>
|
||||||
|
<stop offset="0.7514" style="stop-color:#CD2335"/>
|
||||||
|
<stop offset="1" style="stop-color:#E97826"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_8_)" d="M555.4,786.4c-3.2,0.6-6.5,1.1-9.9,1.6l0,0C548.8,787.5,552.1,787,555.4,786.4z"/>
|
||||||
|
<path fill="#BE202E" d="M581.2,703.8c1-0.1,2.1-0.3,3.1-0.5C583.2,703.5,582.2,703.7,581.2,703.8L581.2,703.8z"/>
|
||||||
|
<path opacity="0.35" fill="#BE202E" d="M581.2,703.8c1-0.1,2.1-0.3,3.1-0.5C583.2,703.5,582.2,703.7,581.2,703.8L581.2,703.8z"/>
|
||||||
|
<linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="-5924.2744" y1="-3965.1499" x2="-4197.1841" y2="-3965.1499" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 6189.0356 -1936.8361)">
|
||||||
|
<stop offset="0.3233" style="stop-color:#9E2064"/>
|
||||||
|
<stop offset="0.6302" style="stop-color:#C92037"/>
|
||||||
|
<stop offset="0.7514" style="stop-color:#CD2335"/>
|
||||||
|
<stop offset="1" style="stop-color:#E97826"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_9_)" d="M581.2,703.8c1-0.1,2.1-0.3,3.1-0.5C583.2,703.5,582.2,703.7,581.2,703.8L581.2,703.8z"/>
|
||||||
|
<path fill="#BE202E" d="M581.3,703.8C581.3,703.8,581.3,703.8,581.3,703.8L581.3,703.8L581.3,703.8L581.3,703.8
|
||||||
|
C581.3,703.8,581.3,703.8,581.3,703.8z"/>
|
||||||
|
<path opacity="0.35" fill="#BE202E" d="M581.3,703.8C581.3,703.8,581.3,703.8,581.3,703.8L581.3,703.8L581.3,703.8L581.3,703.8
|
||||||
|
C581.3,703.8,581.3,703.8,581.3,703.8z"/>
|
||||||
|
<linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="-4954.02" y1="-3966.3701" x2="-4572.2764" y2="-3966.3701" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 6189.0356 -1936.8361)">
|
||||||
|
<stop offset="0.3233" style="stop-color:#9E2064"/>
|
||||||
|
<stop offset="0.6302" style="stop-color:#C92037"/>
|
||||||
|
<stop offset="0.7514" style="stop-color:#CD2335"/>
|
||||||
|
<stop offset="1" style="stop-color:#E97826"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_10_)" d="M581.3,703.8C581.3,703.8,581.3,703.8,581.3,703.8L581.3,703.8L581.3,703.8L581.3,703.8
|
||||||
|
C581.3,703.8,581.3,703.8,581.3,703.8z"/>
|
||||||
|
<path fill="#6D6E71" d="M4552.4,508.2c12,3.6,22.6,8.4,31.5,14.5l-10.5,23c-9.2-6.1-19-10.6-29.4-13.6c-10.4-3-20.3-4.5-29.7-4.5
|
||||||
|
c-13.8,0-24.9,2.5-33.2,7.5c-8.3,5-12.4,12-12.4,21.1c0,7.8,2.3,14.2,6.9,19.3c4.6,5.1,10.3,9,17.3,11.9c6.9,2.8,16.4,6.1,28.5,9.8
|
||||||
|
c14.6,4.7,26.4,9.1,35.3,13.1c8.9,4.1,16.5,10.1,22.9,18.1c6.3,8,9.5,18.5,9.5,31.5c0,11.9-3.2,22.2-9.6,31.1
|
||||||
|
c-6.4,8.9-15.5,15.7-27.3,20.6c-11.8,4.9-25.3,7.3-40.6,7.3c-15.3,0-30.2-3-44.7-8.9c-14.4-5.9-26.8-13.9-37.2-23.8l10.9-22
|
||||||
|
c9.8,9.6,21,17,33.8,22.3c12.8,5.3,25.3,7.9,37.4,7.9c15.5,0,27.8-3,36.8-9c9-6,13.4-14.1,13.4-24.3c0-8-2.3-14.5-7-19.7
|
||||||
|
c-4.7-5.2-10.5-9.2-17.4-12.1c-6.9-2.9-16.4-6.1-28.5-9.7c-14.4-4.3-26.2-8.4-35.2-12.4c-9-4-16.6-9.9-22.9-17.8
|
||||||
|
c-6.2-7.9-9.3-18.2-9.3-31.1c0-11.1,3.1-20.8,9.2-29.1c6.1-8.4,14.8-14.8,26.1-19.4c11.3-4.6,24.2-6.9,38.9-6.9
|
||||||
|
C4528.2,502.8,4540.3,504.6,4552.4,508.2z"/>
|
||||||
|
<path fill="#6D6E71" d="M4870.3,517.6c17.1,9.6,30.7,22.6,40.7,39.1c10,16.4,15,34.5,15,54.2c0,19.8-5,38-15,54.5
|
||||||
|
c-10,16.5-23.6,29.6-40.7,39.3c-17.1,9.7-35.9,14.5-56.2,14.5c-20.6,0-39.5-4.8-56.6-14.5c-17.1-9.7-30.7-22.8-40.7-39.3
|
||||||
|
c-10-16.5-15-34.7-15-54.5c0-19.8,5-38,15-54.5c10-16.5,23.6-29.5,40.7-39c17.1-9.5,36-14.3,56.6-14.3
|
||||||
|
C4834.4,503.1,4853.2,507.9,4870.3,517.6z M4770.5,537.8c-13.4,7.6-24,17.8-32,30.6c-8,12.9-12,27-12,42.4c0,15.5,4,29.8,12,42.7
|
||||||
|
c8,13,18.6,23.2,32,30.7c13.3,7.5,27.9,11.3,43.6,11.3c15.7,0,30.2-3.8,43.4-11.3c13.2-7.5,23.7-17.8,31.6-30.7
|
||||||
|
c7.9-12.9,11.8-27.2,11.8-42.7s-3.9-29.7-11.8-42.5c-7.9-12.8-18.4-23-31.7-30.6c-13.3-7.6-27.7-11.4-43.3-11.4
|
||||||
|
C4798.4,526.4,4783.8,530.2,4770.5,537.8z"/>
|
||||||
|
<path fill="#6D6E71" d="M5080.3,527.3v75.3h100.1v23.6h-100.1V718h-24.5V503.7h136.1v23.6H5080.3z"/>
|
||||||
|
<path fill="#6D6E71" d="M5390.7,527.3V718h-24.5V527.3h-69.6v-23.6h164.2v23.6H5390.7z"/>
|
||||||
|
<path fill="#6D6E71" d="M5777.5,718l-57.8-180.5L5661.1,718h-25l-71.7-214.3h26.3l58.9,185.9l58.1-185.6l24.5-0.3l58.7,185.9
|
||||||
|
l58.1-185.9h25.4L5802.6,718H5777.5z"/>
|
||||||
|
<path fill="#6D6E71" d="M5996.7,663.9l-23.9,54.1h-26l96.1-214.3h25.4l95.8,214.3h-26.6l-23.9-54.1H5996.7z M6054.9,531.7
|
||||||
|
l-47.7,108.6h96.1L6054.9,531.7z"/>
|
||||||
|
<path fill="#6D6E71" d="M6377,649.7c-6.1,0.4-10.9,0.6-14.3,0.6h-56.9V718h-24.5V503.7h81.4c26.7,0,47.4,6.3,62.2,18.8
|
||||||
|
c14.8,12.6,22.2,30.3,22.2,53.2c0,17.5-4.1,32.2-12.4,44c-8.3,11.8-20.1,20.3-35.6,25.5l50.1,72.8h-27.8L6377,649.7z M6407.7,614
|
||||||
|
c10.5-8.6,15.8-21.1,15.8-37.7c0-16.1-5.3-28.3-15.8-36.6c-10.5-8.3-25.5-12.4-45.1-12.4h-56.9v99.5h56.9
|
||||||
|
C6382.2,626.9,6397.2,622.6,6407.7,614z"/>
|
||||||
|
<path fill="#6D6E71" d="M6608.2,527.3v70.4h108v23.6h-108v73.4h124.9V718h-149.4V503.7H6729v23.6H6608.2z"/>
|
||||||
|
<path fill="#6D6E71" d="M7074.8,527.3v75.3h100.1v23.6h-100.1V718h-24.5V503.7h136.1v23.6H7074.8z"/>
|
||||||
|
<path fill="#6D6E71" d="M7457.7,517.6c17.1,9.6,30.7,22.6,40.7,39.1c10,16.4,15,34.5,15,54.2c0,19.8-5,38-15,54.5
|
||||||
|
c-10,16.5-23.6,29.6-40.7,39.3c-17.1,9.7-35.9,14.5-56.2,14.5c-20.6,0-39.5-4.8-56.6-14.5c-17.1-9.7-30.7-22.8-40.7-39.3
|
||||||
|
c-10-16.5-15-34.7-15-54.5c0-19.8,5-38,15-54.5c10-16.5,23.6-29.5,40.7-39c17.1-9.5,36-14.3,56.6-14.3
|
||||||
|
C7421.8,503.1,7440.5,507.9,7457.7,517.6z M7357.9,537.8c-13.4,7.6-24,17.8-32,30.6c-8,12.9-12,27-12,42.4c0,15.5,4,29.8,12,42.7
|
||||||
|
c8,13,18.6,23.2,32,30.7c13.3,7.5,27.9,11.3,43.6,11.3c15.7,0,30.2-3.8,43.4-11.3c13.2-7.5,23.7-17.8,31.6-30.7
|
||||||
|
c7.9-12.9,11.8-27.2,11.8-42.7s-3.9-29.7-11.8-42.5c-7.9-12.8-18.4-23-31.7-30.6c-13.3-7.6-27.7-11.4-43.3-11.4
|
||||||
|
C7385.7,526.4,7371.2,530.2,7357.9,537.8z"/>
|
||||||
|
<path fill="#6D6E71" d="M7794.8,695.5c-15.9,15.8-37.9,23.7-65.9,23.7c-28.2,0-50.3-7.9-66.3-23.7c-16-15.8-24-37.7-24-65.7V503.7
|
||||||
|
h24.5v126.1c0,20.6,5.9,36.7,17.6,48.3c11.8,11.6,27.8,17.4,48.1,17.4c20.4,0,36.4-5.7,48-17.3c11.6-11.5,17.3-27.7,17.3-48.5V503.7
|
||||||
|
h24.5v126.1C7818.7,657.8,7810.7,679.7,7794.8,695.5z"/>
|
||||||
|
<path fill="#6D6E71" d="M8115.1,718l-128.5-172v172h-24.5V503.7h25.4L8116,676V503.7h24.2V718H8115.1z"/>
|
||||||
|
<path fill="#6D6E71" d="M8429.3,517.9c16.7,9.4,29.9,22.3,39.6,38.6c9.7,16.3,14.6,34.4,14.6,54.5s-4.9,38.2-14.6,54.5
|
||||||
|
c-9.7,16.3-23,29.2-40,38.6c-16.9,9.4-35.8,14-56.5,14h-85.8V503.7h86.7C8394,503.7,8412.6,508.4,8429.3,517.9z M8311.2,694.7h62.5
|
||||||
|
c15.7,0,30.1-3.6,43-10.8c12.9-7.2,23.2-17.2,30.7-30c7.5-12.7,11.3-27,11.3-42.7c0-15.7-3.8-30-11.5-42.7
|
||||||
|
c-7.7-12.7-18-22.7-31.1-30.1c-13.1-7.4-27.5-11.1-43.3-11.1h-61.6V694.7z"/>
|
||||||
|
<path fill="#6D6E71" d="M8622.8,663.9l-23.9,54.1h-26l96.1-214.3h25.4l95.8,214.3h-26.6l-23.9-54.1H8622.8z M8681,531.7l-47.7,108.6
|
||||||
|
h96.1L8681,531.7z"/>
|
||||||
|
<path fill="#6D6E71" d="M8950.8,527.3V718h-24.5V527.3h-69.6v-23.6h164.2v23.6H8950.8z"/>
|
||||||
|
<path fill="#6D6E71" d="M9138.9,718V503.7h24.5V718H9138.9z"/>
|
||||||
|
<path fill="#6D6E71" d="M9462.2,517.6c17.1,9.6,30.7,22.6,40.7,39.1c10,16.4,15,34.5,15,54.2c0,19.8-5,38-15,54.5
|
||||||
|
c-10,16.5-23.6,29.6-40.7,39.3c-17.1,9.7-35.9,14.5-56.2,14.5c-20.6,0-39.5-4.8-56.6-14.5c-17.1-9.7-30.7-22.8-40.7-39.3
|
||||||
|
c-10-16.5-15-34.7-15-54.5c0-19.8,5-38,15-54.5c10-16.5,23.6-29.5,40.7-39c17.1-9.5,36-14.3,56.6-14.3
|
||||||
|
C9426.4,503.1,9445.1,507.9,9462.2,517.6z M9362.4,537.8c-13.4,7.6-24,17.8-32,30.6c-8,12.9-12,27-12,42.4c0,15.5,4,29.8,12,42.7
|
||||||
|
c8,13,18.6,23.2,32,30.7c13.3,7.5,27.9,11.3,43.6,11.3c15.7,0,30.2-3.8,43.4-11.3c13.2-7.5,23.7-17.8,31.6-30.7
|
||||||
|
c7.9-12.9,11.8-27.2,11.8-42.7s-3.9-29.7-11.8-42.5c-7.9-12.8-18.4-23-31.7-30.6c-13.3-7.6-27.7-11.4-43.3-11.4
|
||||||
|
C9390.3,526.4,9375.8,530.2,9362.4,537.8z"/>
|
||||||
|
<path fill="#6D6E71" d="M9800.8,718l-128.5-172v172h-24.5V503.7h25.4L9801.7,676V503.7h24.2V718H9800.8z"/>
|
||||||
|
<path fill="#6D6E71" d="M4204.9,500.9c9,9,13.5,19.9,13.5,32.6c0,12.7-4.5,23.6-13.5,32.7c-9,9.1-20,13.7-32.8,13.7
|
||||||
|
c-12.9,0-23.8-4.5-32.7-13.5c-8.9-9-13.4-19.9-13.4-32.6c0-12.7,4.5-23.6,13.5-32.7c9-9.1,19.9-13.7,32.7-13.7
|
||||||
|
C4185,487.4,4195.9,491.9,4204.9,500.9z M4201,562.4c7.9-8,11.8-17.6,11.8-28.8c0-11.2-3.9-20.7-11.7-28.6
|
||||||
|
c-7.8-7.9-17.4-11.9-28.7-11.9c-11.3,0-20.9,4-28.8,11.9c-7.8,8-11.8,17.6-11.8,28.8c0,11.2,3.9,20.8,11.6,28.7
|
||||||
|
c7.8,7.9,17.3,11.9,28.6,11.9S4193.1,570.4,4201,562.4z M4194.5,524.7c0,8.3-3.6,13.5-10.9,15.6l13.3,18h-10.7l-12-16.7h-11v16.7
|
||||||
|
h-8.7v-50h18.8c7.6,0,13,1.3,16.3,3.9C4192.9,514.8,4194.5,519,4194.5,524.7z M4183.4,531.7c1.7-1.4,2.6-3.8,2.6-7.1
|
||||||
|
c0-3.3-0.9-5.6-2.7-6.8c-1.8-1.3-4.9-1.9-9.5-1.9h-10.6v18h10.4C4178.4,533.9,4181.6,533.2,4183.4,531.7z"/>
|
||||||
|
<path fill="#6D6E71" d="M4540.6,918.2c21.1,0,37.7,6.1,49.6,18.4c11.9,12.3,17.9,29.2,17.9,50.8V1097h-26.3V994.4
|
||||||
|
c0-15.7-4.4-28-13.3-36.8s-21.2-13.2-36.9-13.2c-18.7,0.2-33.3,6.3-44,18.2c-10.7,11.9-16,27.5-16,46.9v87.4h-26.3V846.6h26.3V959
|
||||||
|
C4483.1,932.2,4506.2,918.6,4540.6,918.2z"/>
|
||||||
|
<path fill="#6D6E71" d="M4823.7,1063.6l7.4,21.3c-12.8,8.8-26.2,13.3-40.2,13.5c-13.7,0-24.7-4.2-32.9-12.7
|
||||||
|
c-8.2-8.4-12.3-21.1-12.3-38V946.2h-25.6v-21.3h25.6V878h26v46.9l56.3-0.3v21.6h-56.3v96.8c0,19.8,7.9,29.7,23.6,29.7
|
||||||
|
C4804.6,1072.7,4814,1069.6,4823.7,1063.6z"/>
|
||||||
|
<path fill="#6D6E71" d="M5027.8,1063.6l7.4,21.3c-12.8,8.8-26.2,13.3-40.2,13.5c-13.7,0-24.7-4.2-32.9-12.7
|
||||||
|
c-8.2-8.4-12.3-21.1-12.3-38V946.2h-25.6v-21.3h25.6V878h26v46.9l56.3-0.3v21.6h-56.3v96.8c0,19.8,7.9,29.7,23.6,29.7
|
||||||
|
C5008.7,1072.7,5018.1,1069.6,5027.8,1063.6z"/>
|
||||||
|
<path fill="#6D6E71" d="M5244.1,918.2c25.2,0,45.7,8.4,61.6,25.3c15.9,16.9,23.8,38.6,23.8,65.1c0,26.3-7.8,47.8-23.5,64.5
|
||||||
|
c-15.6,16.6-36,25-61.2,25c-32.2,0-55.2-13-69.2-39.1v103.6h-26.3V919.2h26.3v38.4C5189.5,931.3,5212.4,918.2,5244.1,918.2z
|
||||||
|
M5239.4,1074c18.4,0,33.6-6.2,45.5-18.6c11.9-12.3,17.9-28.2,17.9-47.6c0-19.1-6-34.9-17.9-47.4c-11.9-12.5-27.1-18.7-45.5-18.7
|
||||||
|
c-18.7,0-34,6.2-45.9,18.6c-11.9,12.4-17.9,28.2-17.9,47.6c0,19.3,6,35.2,17.9,47.6C5205.4,1067.8,5220.7,1074,5239.4,1074z"/>
|
||||||
|
<path fill="#6D6E71" d="M5449.9,964.4c4.5,0,8.3,1.7,11.5,5.1c3.2,3.4,4.7,7.5,4.7,12.5s-1.6,9.1-4.7,12.5c-3.2,3.4-7,5.1-11.5,5.1
|
||||||
|
c-4.7,0-8.7-1.7-11.8-5.1c-3.2-3.4-4.7-7.5-4.7-12.5s1.6-9.1,4.7-12.5C5441.2,966.1,5445.2,964.4,5449.9,964.4z M5449.9,1064.6
|
||||||
|
c4.5,0,8.3,1.7,11.5,5c3.2,3.4,4.7,7.5,4.7,12.5c0,4.9-1.6,9.1-4.7,12.5c-3.2,3.4-7,5.1-11.5,5.1c-4.7,0-8.7-1.7-11.8-5.1
|
||||||
|
c-3.2-3.4-4.7-7.5-4.7-12.5c0-4.9,1.6-9.1,4.7-12.5C5441.2,1066.3,5445.2,1064.6,5449.9,1064.6z"/>
|
||||||
|
<path fill="#6D6E71" d="M5574.1,1138.1h-22.9l105.3-317.8h23.3L5574.1,1138.1z"/>
|
||||||
|
<path fill="#6D6E71" d="M5753.6,1138.1h-22.9l105.3-317.8h23.3L5753.6,1138.1z"/>
|
||||||
|
<path fill="#6D6E71" d="M6140.5,1097h-27.3l-52.3-144.4l-52,144.4h-27.3l-66.5-177.8h27.7l52.6,150.5l51.6-150.5h27.7l52.3,150.5
|
||||||
|
l52-150.5h27.3L6140.5,1097z"/>
|
||||||
|
<path fill="#6D6E71" d="M6504.6,1097h-27.3L6425,952.6l-52,144.4h-27.3l-66.5-177.8h27.7l52.6,150.5l51.6-150.5h27.7l52.3,150.5
|
||||||
|
l52-150.5h27.3L6504.6,1097z"/>
|
||||||
|
<path fill="#6D6E71" d="M6868.6,1097h-27.3L6789,952.6l-52,144.4h-27.3l-66.5-177.8h27.7l52.6,150.5l51.6-150.5h27.7l52.3,150.5
|
||||||
|
l52-150.5h27.3L6868.6,1097z"/>
|
||||||
|
<path fill="#6D6E71" d="M7034.6,1064.6c4.5,0,8.3,1.7,11.5,5c3.2,3.4,4.7,7.5,4.7,12.5c0,4.9-1.6,9.1-4.7,12.5
|
||||||
|
c-3.2,3.4-7,5.1-11.5,5.1c-4.7,0-8.7-1.7-11.8-5.1c-3.2-3.4-4.7-7.5-4.7-12.5c0-4.9,1.6-9.1,4.7-12.5
|
||||||
|
C7026,1066.3,7029.9,1064.6,7034.6,1064.6z"/>
|
||||||
|
<path fill="#6D6E71" d="M7283,1097v-27.3c-14.2,19.1-35.9,28.7-65.1,28.7c-18,0-32.6-5.1-43.7-15.4c-11.1-10.2-16.7-23.2-16.7-39
|
||||||
|
c0-15.5,5.8-27.8,17.5-37c11.7-9.1,28-13.8,48.9-14h58.4v-10.5c0-13.3-4.1-23.5-12.1-30.7c-8.1-7.2-19.9-10.8-35.4-10.8
|
||||||
|
c-18,0-36.8,6.7-56.4,20.2l-11.1-19.2c12.6-8.3,24.2-14.4,34.9-18.2s23.2-5.7,37.6-5.7c21.8,0,38.6,5.4,50.4,16.2
|
||||||
|
c11.8,10.8,17.8,25.9,18.1,45.2l0.3,117.4H7283z M7222.9,1075.4c15.1,0,27.9-3.5,38.6-10.6c10.7-7.1,17.7-16.8,21.1-29.2v-21.3
|
||||||
|
h-55.3c-30.1,0-45.2,9.6-45.2,28.7c0,9.9,3.7,17.8,11.1,23.6C7200.6,1072.5,7210.5,1075.4,7222.9,1075.4z"/>
|
||||||
|
<path fill="#6D6E71" d="M7536.3,918.2c25.2,0,45.7,8.4,61.6,25.3c15.9,16.9,23.8,38.6,23.8,65.1c0,26.3-7.8,47.8-23.5,64.5
|
||||||
|
c-15.6,16.6-36,25-61.2,25c-32.2,0-55.2-13-69.2-39.1v103.6h-26.3V919.2h26.3v38.4C7481.8,931.3,7504.6,918.2,7536.3,918.2z
|
||||||
|
M7531.6,1074c18.4,0,33.6-6.2,45.5-18.6c11.9-12.3,17.9-28.2,17.9-47.6c0-19.1-6-34.9-17.9-47.4c-11.9-12.5-27.1-18.7-45.5-18.7
|
||||||
|
c-18.7,0-34,6.2-45.9,18.6c-11.9,12.4-17.9,28.2-17.9,47.6c0,19.3,6,35.2,17.9,47.6C7497.6,1067.8,7512.9,1074,7531.6,1074z"/>
|
||||||
|
<path fill="#6D6E71" d="M7850.8,1097v-27.3c-14.2,19.1-35.9,28.7-65.1,28.7c-18,0-32.6-5.1-43.7-15.4c-11.1-10.2-16.7-23.2-16.7-39
|
||||||
|
c0-15.5,5.8-27.8,17.5-37c11.7-9.1,28-13.8,48.9-14h58.4v-10.5c0-13.3-4.1-23.5-12.1-30.7c-8.1-7.2-19.9-10.8-35.4-10.8
|
||||||
|
c-18,0-36.8,6.7-56.4,20.2l-11.1-19.2c12.6-8.3,24.2-14.4,34.9-18.2c10.7-3.8,23.2-5.7,37.6-5.7c21.8,0,38.6,5.4,50.4,16.2
|
||||||
|
c11.8,10.8,17.8,25.9,18.1,45.2l0.3,117.4H7850.8z M7790.7,1075.4c15.1,0,27.9-3.5,38.6-10.6c10.7-7.1,17.7-16.8,21.1-29.2v-21.3
|
||||||
|
h-55.3c-30.2,0-45.2,9.6-45.2,28.7c0,9.9,3.7,17.8,11.1,23.6C7768.5,1072.5,7778.4,1075.4,7790.7,1075.4z"/>
|
||||||
|
<path fill="#6D6E71" d="M8077.8,918.5c28.6-0.2,51.4,8.5,68.5,26.3l-14.5,18.6c-14.4-13.7-32.1-20.6-53-20.6
|
||||||
|
c-18.4,0-33.6,6.1-45.4,18.2c-11.8,12.1-17.7,27.9-17.7,47.2s5.9,35.2,17.7,47.4c11.8,12.3,26.9,18.4,45.4,18.4
|
||||||
|
c23.8,0,42.2-7.6,55-22.9l15.2,16.2c-16.9,20.5-40.6,30.7-71.2,30.7c-25.9,0-47-8.3-63.4-25c-16.4-16.6-24.6-38.2-24.6-64.8
|
||||||
|
c0-26.3,8.3-47.9,24.8-64.6C8031.1,926.9,8052.2,918.5,8077.8,918.5z"/>
|
||||||
|
<path fill="#6D6E71" d="M8366.7,918.2c21.1,0,37.7,6.1,49.6,18.4c11.9,12.3,17.9,29.2,17.9,50.8V1097h-26.3V994.4
|
||||||
|
c0-15.7-4.4-28-13.3-36.8s-21.2-13.2-36.9-13.2c-18.7,0.2-33.3,6.3-44,18.2c-10.7,11.9-16,27.5-16,46.9v87.4h-26.3V846.6h26.3V959
|
||||||
|
C8309.2,932.2,8332.2,918.6,8366.7,918.2z"/>
|
||||||
|
<path fill="#6D6E71" d="M8635.6,918.5c28.1-0.2,49.3,8.7,63.6,26.6c14.3,18,20.8,42.4,19.4,73.2h-145.1c2.2,17.3,9.2,31.1,20.9,41.3
|
||||||
|
c11.7,10.2,26.2,15.4,43.5,15.4c22.5,0,40.8-7.4,55-22.3l14.5,15.5c-17.8,19.8-41.6,29.7-71.5,29.7c-26.1,0-47.4-8.3-63.8-25
|
||||||
|
c-16.4-16.6-24.6-38.2-24.6-64.8s8.2-48.1,24.6-64.8C8588.5,926.8,8609.7,918.5,8635.6,918.5z M8573.5,996.8H8695
|
||||||
|
c-0.9-17.1-6.7-30.7-17.4-40.7c-10.7-10-24.7-15-42-15c-16.9,0-30.9,5.1-42.2,15.2C8582.1,966.4,8575.5,979.9,8573.5,996.8z"/>
|
||||||
|
<path fill="#6D6E71" d="M8838,1064.6c4.5,0,8.3,1.7,11.5,5c3.1,3.4,4.7,7.5,4.7,12.5c0,4.9-1.6,9.1-4.7,12.5
|
||||||
|
c-3.2,3.4-7,5.1-11.5,5.1c-4.7,0-8.7-1.7-11.8-5.1c-3.2-3.4-4.7-7.5-4.7-12.5c0-4.9,1.6-9.1,4.7-12.5
|
||||||
|
C8829.3,1066.3,8833.3,1064.6,8838,1064.6z"/>
|
||||||
|
<path fill="#6D6E71" d="M8983.4,943.5c16.9-16.6,38.5-25,64.8-25c26.3,0,47.9,8.3,64.8,25c16.9,16.6,25.3,38.1,25.3,64.5
|
||||||
|
c0,26.5-8.5,48.2-25.3,64.9c-16.9,16.8-38.5,25.1-64.8,25.1c-26.3,0-47.9-8.4-64.8-25.1c-16.9-16.8-25.3-38.4-25.3-64.9
|
||||||
|
C8958.1,981.6,8966.5,960.1,8983.4,943.5z M9094.1,960.8c-11.9-12.3-27.2-18.4-45.9-18.4c-18.7,0-34,6.1-45.9,18.4
|
||||||
|
c-11.9,12.3-17.9,28.1-17.9,47.4c0,19.6,6,35.5,17.9,47.7c11.9,12.3,27.2,18.4,45.9,18.4c18.7,0,34-6.1,45.9-18.4
|
||||||
|
c11.9-12.3,17.9-28.2,17.9-47.7C9111.9,988.9,9106,973.1,9094.1,960.8z"/>
|
||||||
|
<path fill="#6D6E71" d="M9283.3,919.2v39.5c12.2-26.5,33.4-40,63.8-40.5v26.7c-18.4-0.2-33.3,4.9-44.5,15.3
|
||||||
|
c-11.3,10.5-17.6,24.6-19.2,42.3v94.5H9257V919.2H9283.3z"/>
|
||||||
|
<path fill="#6D6E71" d="M9610,919.2v159.2c0,25.9-8.2,46.5-24.5,61.7c-16.3,15.3-38,22.9-64.9,22.9c-26.3-0.2-50.6-8.8-72.9-25.7
|
||||||
|
l12.1-20.2c17.8,14.8,37.7,22.4,59.7,22.6c19.4,0,34.9-5.5,46.6-16.5c11.7-11,17.5-25.7,17.5-44.2v-27c-13,24.7-34.9,37.1-65.4,37.1
|
||||||
|
c-23.9,0-43.3-8-58.4-24c-15.1-16-22.6-36.7-22.6-62.1c0-24.7,7.4-45,22.3-60.9c14.8-15.9,34.2-23.9,58-24.1
|
||||||
|
c30.6,0,52.6,12.4,66.1,37.1v-36.1H9610z M9479.2,1049.2c11.4,11.8,25.9,17.7,43.7,17.7s32.3-5.9,43.7-17.7c11.3-11.8,17-26.8,17-45
|
||||||
|
c0-18.4-5.7-33.6-17-45.4c-11.4-11.8-25.9-17.7-43.7-17.7s-32.3,5.9-43.7,17.7c-11.3,11.8-17.1,26.9-17.4,45.4
|
||||||
|
C9462.1,1022.4,9467.9,1037.4,9479.2,1049.2z"/>
|
||||||
|
<path fill="#6D6E71" d="M9729.4,1138.1h-22.9l105.3-317.8h23.3L9729.4,1138.1z"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 713 B |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 21 KiB |
|
@ -0,0 +1,223 @@
|
||||||
|
<%--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
--%>
|
||||||
|
<%@ page session="false" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
|
||||||
|
<%
|
||||||
|
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy");
|
||||||
|
request.setAttribute("year", sdf.format(new java.util.Date()));
|
||||||
|
request.setAttribute("tomcatUrl", "https://tomcat.apache.org/");
|
||||||
|
request.setAttribute("tomcatDocUrl", "/docs/");
|
||||||
|
request.setAttribute("tomcatExamplesUrl", "/examples/");
|
||||||
|
%>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<title><%=request.getServletContext().getServerInfo() %></title>
|
||||||
|
<link href="favicon.ico" rel="icon" type="image/x-icon" />
|
||||||
|
<link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
|
||||||
|
<link href="tomcat.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="wrapper">
|
||||||
|
<div id="navigation" class="curved container">
|
||||||
|
<span id="nav-home"><a href="${tomcatUrl}">Home</a></span>
|
||||||
|
<span id="nav-hosts"><a href="${tomcatDocUrl}">Documentation</a></span>
|
||||||
|
<span id="nav-config"><a href="${tomcatDocUrl}config/">Configuration</a></span>
|
||||||
|
<span id="nav-examples"><a href="${tomcatExamplesUrl}">Examples</a></span>
|
||||||
|
<span id="nav-wiki"><a href="https://wiki.apache.org/tomcat/FrontPage">Wiki</a></span>
|
||||||
|
<span id="nav-lists"><a href="${tomcatUrl}lists.html">Mailing Lists</a></span>
|
||||||
|
<span id="nav-help"><a href="${tomcatUrl}findhelp.html">Find Help</a></span>
|
||||||
|
<br class="separator" />
|
||||||
|
</div>
|
||||||
|
<div id="asf-box">
|
||||||
|
<h1>${pageContext.servletContext.serverInfo}</h1>
|
||||||
|
</div>
|
||||||
|
<div id="upper" class="curved container">
|
||||||
|
<div id="congrats" class="curved container">
|
||||||
|
<h2>If you're seeing this, you've successfully installed Tomcat. Congratulations!</h2>
|
||||||
|
</div>
|
||||||
|
<div id="notice">
|
||||||
|
<img src="tomcat.png" alt="[tomcat logo]" />
|
||||||
|
<div id="tasks">
|
||||||
|
<h3>Recommended Reading:</h3>
|
||||||
|
<h4><a href="${tomcatDocUrl}security-howto.html">Security Considerations HOW-TO</a></h4>
|
||||||
|
<h4><a href="${tomcatDocUrl}manager-howto.html">Manager Application HOW-TO</a></h4>
|
||||||
|
<h4><a href="${tomcatDocUrl}cluster-howto.html">Clustering/Session Replication HOW-TO</a></h4>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="actions">
|
||||||
|
<div class="button">
|
||||||
|
<a class="container shadow" href="/manager/status"><span>Server Status</span></a>
|
||||||
|
</div>
|
||||||
|
<div class="button">
|
||||||
|
<a class="container shadow" href="/manager/html"><span>Manager App</span></a>
|
||||||
|
</div>
|
||||||
|
<div class="button">
|
||||||
|
<a class="container shadow" href="/host-manager/html"><span>Host Manager</span></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--
|
||||||
|
<br class="separator" />
|
||||||
|
-->
|
||||||
|
<br class="separator" />
|
||||||
|
</div>
|
||||||
|
<div id="middle" class="curved container">
|
||||||
|
<h3>Developer Quick Start</h3>
|
||||||
|
<div class="col25">
|
||||||
|
<div class="container">
|
||||||
|
<p><a href="${tomcatDocUrl}setup.html">Tomcat Setup</a></p>
|
||||||
|
<p><a href="${tomcatDocUrl}appdev/">First Web Application</a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col25">
|
||||||
|
<div class="container">
|
||||||
|
<p><a href="${tomcatDocUrl}realm-howto.html">Realms & AAA</a></p>
|
||||||
|
<p><a href="${tomcatDocUrl}jndi-datasource-examples-howto.html">JDBC DataSources</a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col25">
|
||||||
|
<div class="container">
|
||||||
|
<p><a href="${tomcatExamplesUrl}">Examples</a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col25">
|
||||||
|
<div class="container">
|
||||||
|
<p><a href="https://wiki.apache.org/tomcat/Specifications">Servlet Specifications</a></p>
|
||||||
|
<p><a href="https://wiki.apache.org/tomcat/TomcatVersions">Tomcat Versions</a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br class="separator" />
|
||||||
|
</div>
|
||||||
|
<div id="lower">
|
||||||
|
<div id="low-manage" class="">
|
||||||
|
<div class="curved container">
|
||||||
|
<h3>Managing Tomcat</h3>
|
||||||
|
<p>For security, access to the <a href="/manager/html">manager webapp</a> is restricted.
|
||||||
|
Users are defined in:</p>
|
||||||
|
<pre>$CATALINA_HOME/conf/tomcat-users.xml</pre>
|
||||||
|
<p>In Tomcat 8.0 access to the manager application is split between
|
||||||
|
different users. <a href="${tomcatDocUrl}manager-howto.html">Read more...</a></p>
|
||||||
|
<br />
|
||||||
|
<h4><a href="${tomcatDocUrl}RELEASE-NOTES.txt">Release Notes</a></h4>
|
||||||
|
<h4><a href="${tomcatDocUrl}changelog.html">Changelog</a></h4>
|
||||||
|
<h4><a href="${tomcatUrl}migration.html">Migration Guide</a></h4>
|
||||||
|
<h4><a href="${tomcatUrl}security.html">Security Notices</a></h4>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="low-docs" class="">
|
||||||
|
<div class="curved container">
|
||||||
|
<h3>Documentation</h3>
|
||||||
|
<h4><a href="${tomcatDocUrl}">Tomcat 8.0 Documentation</a></h4>
|
||||||
|
<h4><a href="${tomcatDocUrl}config/">Tomcat 8.0 Configuration</a></h4>
|
||||||
|
<h4><a href="https://wiki.apache.org/tomcat/FrontPage">Tomcat Wiki</a></h4>
|
||||||
|
<p>Find additional important configuration information in:</p>
|
||||||
|
<pre>$CATALINA_HOME/RUNNING.txt</pre>
|
||||||
|
<p>Developers may be interested in:</p>
|
||||||
|
<ul>
|
||||||
|
<li><a href="https://tomcat.apache.org/bugreport.html">Tomcat 8.0 Bug Database</a></li>
|
||||||
|
<li><a href="${tomcatDocUrl}api/index.html">Tomcat 8.0 JavaDocs</a></li>
|
||||||
|
<li><a href="https://svn.apache.org/repos/asf/tomcat/tc8.0.x/">Tomcat 8.0 SVN Repository</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="low-help" class="">
|
||||||
|
<div class="curved container">
|
||||||
|
<h3>Getting Help</h3>
|
||||||
|
<h4><a href="${tomcatUrl}faq/">FAQ</a> and <a href="${tomcatUrl}lists.html">Mailing Lists</a></h4>
|
||||||
|
<p>The following mailing lists are available:</p>
|
||||||
|
<ul>
|
||||||
|
<li id="list-announce"><strong><a href="${tomcatUrl}lists.html#tomcat-announce">tomcat-announce</a><br />
|
||||||
|
Important announcements, releases, security vulnerability notifications. (Low volume).</strong>
|
||||||
|
</li>
|
||||||
|
<li><a href="${tomcatUrl}lists.html#tomcat-users">tomcat-users</a><br />
|
||||||
|
User support and discussion
|
||||||
|
</li>
|
||||||
|
<li><a href="${tomcatUrl}lists.html#taglibs-user">taglibs-user</a><br />
|
||||||
|
User support and discussion for <a href="${tomcatUrl}taglibs/">Apache Taglibs</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="${tomcatUrl}lists.html#tomcat-dev">tomcat-dev</a><br />
|
||||||
|
Development mailing list, including commit messages
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br class="separator" />
|
||||||
|
</div>
|
||||||
|
<div id="footer" class="curved container">
|
||||||
|
<div class="col20">
|
||||||
|
<div class="container">
|
||||||
|
<h4>Other Downloads</h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="${tomcatUrl}download-connectors.cgi">Tomcat Connectors</a></li>
|
||||||
|
<li><a href="${tomcatUrl}download-native.cgi">Tomcat Native</a></li>
|
||||||
|
<li><a href="${tomcatUrl}taglibs/">Taglibs</a></li>
|
||||||
|
<li><a href="${tomcatDocUrl}deployer-howto.html">Deployer</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col20">
|
||||||
|
<div class="container">
|
||||||
|
<h4>Other Documentation</h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="${tomcatUrl}connectors-doc/">Tomcat Connectors</a></li>
|
||||||
|
<li><a href="${tomcatUrl}connectors-doc/">mod_jk Documentation</a></li>
|
||||||
|
<li><a href="${tomcatUrl}native-doc/">Tomcat Native</a></li>
|
||||||
|
<li><a href="${tomcatDocUrl}deployer-howto.html">Deployer</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col20">
|
||||||
|
<div class="container">
|
||||||
|
<h4>Get Involved</h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="${tomcatUrl}getinvolved.html">Overview</a></li>
|
||||||
|
<li><a href="${tomcatUrl}svn.html">SVN Repositories</a></li>
|
||||||
|
<li><a href="${tomcatUrl}lists.html">Mailing Lists</a></li>
|
||||||
|
<li><a href="https://wiki.apache.org/tomcat/FrontPage">Wiki</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col20">
|
||||||
|
<div class="container">
|
||||||
|
<h4>Miscellaneous</h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="${tomcatUrl}contact.html">Contact</a></li>
|
||||||
|
<li><a href="${tomcatUrl}legal.html">Legal</a></li>
|
||||||
|
<li><a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
|
||||||
|
<li><a href="https://www.apache.org/foundation/thanks.html">Thanks</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col20">
|
||||||
|
<div class="container">
|
||||||
|
<h4>Apache Software Foundation</h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="${tomcatUrl}whoweare.html">Who We Are</a></li>
|
||||||
|
<li><a href="${tomcatUrl}heritage.html">Heritage</a></li>
|
||||||
|
<li><a href="https://www.apache.org">Apache Home</a></li>
|
||||||
|
<li><a href="${tomcatUrl}resources.html">Resources</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br class="separator" />
|
||||||
|
</div>
|
||||||
|
<p class="copyright">Copyright ©1999-${year} Apache Software Foundation. All Rights Reserved</p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
After Width: | Height: | Size: 2.3 KiB |
|
@ -0,0 +1,351 @@
|
||||||
|
/*
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
body {
|
||||||
|
margin: 10px 20px;
|
||||||
|
text-align: center;
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4, h5, h6, p, ul, ol {
|
||||||
|
margin: 0 0 0.5em;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: 18pt;
|
||||||
|
margin: 0.5em 0 0;
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
font-size: 16pt;
|
||||||
|
}
|
||||||
|
h3 {
|
||||||
|
font-size: 13pt;
|
||||||
|
}
|
||||||
|
h4 {
|
||||||
|
font-size: 12pt;
|
||||||
|
}
|
||||||
|
h5 {
|
||||||
|
font-size: 11pt;
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
font-size: 11pt
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0 0 0 0.25em;
|
||||||
|
text-indent: 0;
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
li {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0 0 0.25em;
|
||||||
|
text-indent: 0;
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
text-indent: 0.25em;
|
||||||
|
width: 90%;
|
||||||
|
font-size: 90%;
|
||||||
|
}
|
||||||
|
|
||||||
|
br.separator {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
a img {
|
||||||
|
border: 0 none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
padding: 10px;
|
||||||
|
margin: 0 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.col20 {
|
||||||
|
float: left;
|
||||||
|
width: 20%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.col25 {
|
||||||
|
float: left;
|
||||||
|
width: 25%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wrapper {
|
||||||
|
display: block;
|
||||||
|
margin: 0 auto;
|
||||||
|
text-align: left;
|
||||||
|
min-width: 720px;
|
||||||
|
max-width: 1000px;
|
||||||
|
}
|
||||||
|
.curved {
|
||||||
|
border-radius: 10px;
|
||||||
|
-moz-border-radius: 10px;
|
||||||
|
-webkit-border-radius: 10px;
|
||||||
|
-khtml-border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navigation {
|
||||||
|
background: #eee url(bg-nav.png) repeat-x top left;
|
||||||
|
margin: 0 0 10px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
#navigation span {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
#navigation span a {
|
||||||
|
display: block;
|
||||||
|
padding: 10px;
|
||||||
|
font-weight: bold;
|
||||||
|
text-shadow: 1px 1px 1px #fff;
|
||||||
|
}
|
||||||
|
#navigation span a:link,
|
||||||
|
#navigation span a:visited,
|
||||||
|
#navigation span a:hover,
|
||||||
|
#navigation span a:active {
|
||||||
|
color: #666;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
#navigation span#nav-help {
|
||||||
|
float: right;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#asf-box {
|
||||||
|
height: 40px;
|
||||||
|
background: #fff url(asf-logo-wide.svg) no-repeat top right;}
|
||||||
|
#asf-box h1 {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#upper {
|
||||||
|
background: #fff url(bg-upper.png) repeat-x top left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#congrats {
|
||||||
|
text-align: center;
|
||||||
|
padding: 10px;
|
||||||
|
margin: 0 40px 20px;
|
||||||
|
background-color: #9c9;
|
||||||
|
}
|
||||||
|
#congrats h2 {
|
||||||
|
font-size: 14pt;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#notice {
|
||||||
|
float: left;
|
||||||
|
width: 560px;
|
||||||
|
color: #696;
|
||||||
|
}
|
||||||
|
#notice a:link,
|
||||||
|
#notice a:visited,
|
||||||
|
#notice a:hover,
|
||||||
|
#notice a:active {
|
||||||
|
color: #090;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
#notice img,
|
||||||
|
#notice #tasks {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
#tasks a:link,
|
||||||
|
#tasks a:visited,
|
||||||
|
#tasks a:hover,
|
||||||
|
#tasks a:active {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
#notice img {
|
||||||
|
margin-right: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#actions {
|
||||||
|
float: right;
|
||||||
|
width: 140px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#actions .button {
|
||||||
|
display: block;
|
||||||
|
padding: 0;
|
||||||
|
height: 36px;
|
||||||
|
background: url(bg-button.png) no-repeat top left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#actions .button a {
|
||||||
|
display: block;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#actions .button a:link,
|
||||||
|
#actions .button a:visited,
|
||||||
|
#actions .button a:hover,
|
||||||
|
#actions .button a:active {
|
||||||
|
color: #696;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#actions .button a span {
|
||||||
|
display: block;
|
||||||
|
padding: 6px 10px;
|
||||||
|
color: #666;
|
||||||
|
text-shadow: 1px 1px 1px #fff;
|
||||||
|
font-size: 10pt;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#middle {
|
||||||
|
background: #eef url(bg-middle.png) repeat-x top left;
|
||||||
|
margin: 20px 0;
|
||||||
|
padding: 1px 10px;
|
||||||
|
}
|
||||||
|
#middle h3 {
|
||||||
|
margin: 0 0 10px;
|
||||||
|
color: #033;
|
||||||
|
}
|
||||||
|
#middle p {
|
||||||
|
font-size: 10pt;
|
||||||
|
}
|
||||||
|
#middle a:link,
|
||||||
|
#middle a:visited,
|
||||||
|
#middle a:hover,
|
||||||
|
#middle a:active {
|
||||||
|
color: #366;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
#middle .col25 .container {
|
||||||
|
padding: 0 0 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#developers {
|
||||||
|
float: left;
|
||||||
|
width: 40%;
|
||||||
|
}
|
||||||
|
#security {
|
||||||
|
float: right;
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#lower {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#lower a:link,
|
||||||
|
#lower a:visited,
|
||||||
|
#lower a:hover,
|
||||||
|
#lower a:active {
|
||||||
|
color: #600;
|
||||||
|
}
|
||||||
|
|
||||||
|
#lower strong a:link,
|
||||||
|
#lower strong a:visited,
|
||||||
|
#lower strong a:hover,
|
||||||
|
#lower strong a:active {
|
||||||
|
color: #c00;
|
||||||
|
}
|
||||||
|
|
||||||
|
#lower h3 {
|
||||||
|
color: #963;
|
||||||
|
font-size: 14pt;
|
||||||
|
}
|
||||||
|
#lower h4 {
|
||||||
|
font-size: 12pt;
|
||||||
|
}
|
||||||
|
#lower ul {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0.5em 0;
|
||||||
|
}
|
||||||
|
#lower p,
|
||||||
|
#lower li {
|
||||||
|
font-size: 9pt;
|
||||||
|
color: #753;
|
||||||
|
margin: 0 0 0.1em;
|
||||||
|
}
|
||||||
|
#lower li {
|
||||||
|
padding: 3px 5px;
|
||||||
|
}
|
||||||
|
#lower li strong {
|
||||||
|
color: #a53;
|
||||||
|
}
|
||||||
|
#lower li#list-announce {
|
||||||
|
border: 1px solid #f90;
|
||||||
|
background-color: #ffe8c8;
|
||||||
|
}
|
||||||
|
#lower p {
|
||||||
|
font-size: 10.5pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
#low-manage,
|
||||||
|
#low-docs,
|
||||||
|
#low-help {
|
||||||
|
float: left;
|
||||||
|
width: 32%;
|
||||||
|
}
|
||||||
|
#low-docs {
|
||||||
|
margin: 0 0 0 2.2%;
|
||||||
|
}
|
||||||
|
#low-help {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
#low-manage div,
|
||||||
|
#low-docs div,
|
||||||
|
#low-help div {
|
||||||
|
min-height: 280px;
|
||||||
|
border: 3px solid #ffdc75;
|
||||||
|
background-color: #fff1c8;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#footer {
|
||||||
|
padding: 0;
|
||||||
|
margin: 20px 0;
|
||||||
|
color: #999;
|
||||||
|
background-color: #eee;
|
||||||
|
}
|
||||||
|
#footer h4 {
|
||||||
|
margin: 0 0 10px;
|
||||||
|
font-size: 10pt;
|
||||||
|
}
|
||||||
|
#footer p {
|
||||||
|
margin: 0 0 10px;
|
||||||
|
font-size: 10pt;
|
||||||
|
}
|
||||||
|
#footer ul {
|
||||||
|
margin: 6px 0 1px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
#footer li {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 9pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
#footer a:link,
|
||||||
|
#footer a:visited,
|
||||||
|
#footer a:hover,
|
||||||
|
#footer a:active {
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
|
||||||
|
.copyright {
|
||||||
|
font-size: 10pt;
|
||||||
|
color: #666;
|
||||||
|
}
|
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 5.0 KiB |
|
@ -0,0 +1,967 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<!-- Generator: Adobe Illustrator 11 Build 196, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
|
||||||
|
<svg:svg
|
||||||
|
xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"
|
||||||
|
xmlns:xap="http://ns.adobe.com/xap/1.0/"
|
||||||
|
xmlns:ns0="http://ns.adobe.com/SaveForWeb/1.0/"
|
||||||
|
xmlns:ns="http://ns.adobe.com/Variables/1.0/"
|
||||||
|
xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
|
||||||
|
xmlns:x="adobe:ns:meta/"
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
i:viewOrigin="176.7139 486.707"
|
||||||
|
i:rulerOrigin="-156 -296"
|
||||||
|
i:pageBounds="156 496 456 296"
|
||||||
|
width="260.162"
|
||||||
|
height="184.413"
|
||||||
|
viewBox="0 0 260.162 184.413"
|
||||||
|
overflow="visible"
|
||||||
|
enable-background="new 0 0 260.162 184.413"
|
||||||
|
xml:space="preserve"
|
||||||
|
id="svg2"
|
||||||
|
sodipodi:version="0.32"
|
||||||
|
inkscape:version="0.46"
|
||||||
|
sodipodi:docname="tomcat.svg"
|
||||||
|
inkscape:output_extension="org.inkscape.output.svg.inkscape"><svg:defs
|
||||||
|
id="defs59"><inkscape:perspective
|
||||||
|
sodipodi:type="inkscape:persp3d"
|
||||||
|
inkscape:vp_x="0 : 92.206497 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_z="260.16199 : 92.206497 : 1"
|
||||||
|
inkscape:persp3d-origin="130.08099 : 61.470998 : 1"
|
||||||
|
id="perspective63" /></svg:defs><sodipodi:namedview
|
||||||
|
inkscape:window-height="725"
|
||||||
|
inkscape:window-width="1051"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
guidetolerance="10.0"
|
||||||
|
gridtolerance="10.0"
|
||||||
|
objecttolerance="10.0"
|
||||||
|
borderopacity="1.0"
|
||||||
|
bordercolor="#666666"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
id="base"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="2.1025362"
|
||||||
|
inkscape:cx="130.08099"
|
||||||
|
inkscape:cy="91.968689"
|
||||||
|
inkscape:window-x="35"
|
||||||
|
inkscape:window-y="192"
|
||||||
|
inkscape:current-layer="svg2" />
|
||||||
|
<svg:metadata
|
||||||
|
id="metadata4">
|
||||||
|
<ns:variableSets>
|
||||||
|
<ns:variableSet
|
||||||
|
varSetName="binding1"
|
||||||
|
locked="none">
|
||||||
|
<ns:variables />
|
||||||
|
<ns:sampleDataSets />
|
||||||
|
</ns:variableSet>
|
||||||
|
</ns:variableSets>
|
||||||
|
<ns0:sfw>
|
||||||
|
<ns0:slices />
|
||||||
|
<ns0:sliceSourceBounds
|
||||||
|
y="302.294"
|
||||||
|
x="176.714"
|
||||||
|
width="260.162"
|
||||||
|
height="184.413"
|
||||||
|
bottomLeftOrigin="true" />
|
||||||
|
</ns0:sfw>
|
||||||
|
<xpacket /><x:xmpmeta
|
||||||
|
x:xmptk="XMP toolkit 3.0-29, framework 1.6">
|
||||||
|
|
||||||
|
<svg:metadata
|
||||||
|
id="metadata61"><rdf:RDF>
|
||||||
|
|
||||||
|
<rdf:Description
|
||||||
|
rdf:about="">
|
||||||
|
</rdf:Description>
|
||||||
|
|
||||||
|
<rdf:Description
|
||||||
|
rdf:about="">
|
||||||
|
</rdf:Description>
|
||||||
|
|
||||||
|
<rdf:Description
|
||||||
|
rdf:about="">
|
||||||
|
<xap:CreateDate>2006-05-09T08:17:21Z</xap:CreateDate>
|
||||||
|
<xap:ModifyDate>2006-05-09T08:37:38Z</xap:ModifyDate>
|
||||||
|
<xap:CreatorTool>Illustrator</xap:CreatorTool>
|
||||||
|
<xap:Thumbnails>
|
||||||
|
<rdf:Alt>
|
||||||
|
<rdf:li
|
||||||
|
rdf:parseType="Resource">
|
||||||
|
<xapGImg:format>JPEG</xapGImg:format>
|
||||||
|
<xapGImg:width>256</xapGImg:width>
|
||||||
|
<xapGImg:height>184</xapGImg:height>
|
||||||
|
<xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
|
||||||
|
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
|
||||||
|
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
|
||||||
|
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAuAEAAwER
|
||||||
|
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
|
||||||
|
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
|
||||||
|
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
|
||||||
|
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
|
||||||
|
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
|
||||||
|
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
|
||||||
|
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
|
||||||
|
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7
|
||||||
|
FXYq7FXYq7FXYq7FXYq7FXhH/OYHnWfQ/wAurfRLSUxXXmK49GQqaN9VtwJJqH3cxqfYnFXhP5Y/
|
||||||
|
85O+f/JU0enaw769okbBJLS8ZvrUKg0IhnarDj/I9R2HHFX2F+Xn5neT/P8ApP6R8u3glKAfW7KS
|
||||||
|
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</xapGImg:image>
|
||||||
|
</rdf:li>
|
||||||
|
</rdf:Alt>
|
||||||
|
</xap:Thumbnails>
|
||||||
|
</rdf:Description>
|
||||||
|
|
||||||
|
<rdf:Description
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
</rdf:Description>
|
||||||
|
|
||||||
|
<cc:Work
|
||||||
|
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></svg:metadata></x:xmpmeta>
|
||||||
|
<xpacket />
|
||||||
|
</svg:metadata>
|
||||||
|
<svg:switch
|
||||||
|
id="switch6">
|
||||||
|
<svg:foreignObject
|
||||||
|
requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="1"
|
||||||
|
height="1"
|
||||||
|
id="foreignObject8">
|
||||||
|
<i:pgfRef
|
||||||
|
xlink:href="#adobe_illustrator_pgf">
|
||||||
|
</i:pgfRef>
|
||||||
|
</svg:foreignObject>
|
||||||
|
<svg:g
|
||||||
|
i:extraneous="self"
|
||||||
|
id="g10">
|
||||||
|
<svg:g
|
||||||
|
id="colors"
|
||||||
|
i:layer="yes"
|
||||||
|
i:dimmedPercent="3"
|
||||||
|
i:rgbTrio="#4F00FFFF4F00">
|
||||||
|
<svg:path
|
||||||
|
i:knockout="Off"
|
||||||
|
fill="#F8DC75"
|
||||||
|
d="M237.682,33.617c-0.019-5.071,0.402-24.5-2.5-30.4 c-7.869,2.99-19.189,11.68-22.431,21.588c-15.532-2.32-35.042-2.045-50.381,0.608C159.808,14.753,147.946,7.596,138.243,3 c-4.093,6.907-3.906,19.92-3.445,31.279c-0.018,0.013-0.037,0.024-0.054,0.037c1.8,47.7,22.2,74.399,52.799,92.399 c31.481-17.988,50.972-49.057,50.101-93.12C237.656,33.603,237.67,33.609,237.682,33.617z M216.485,25.421 c0.114,0.021,0.229,0.042,0.344,0.064C216.715,25.463,216.601,25.441,216.485,25.421z M214.527,25.083 c0.275,0.044,0.554,0.094,0.83,0.141C215.081,25.177,214.805,25.129,214.527,25.083z"
|
||||||
|
id="path13" />
|
||||||
|
<svg:path
|
||||||
|
i:knockout="Off"
|
||||||
|
fill="#D2A41F"
|
||||||
|
d="M91.013,133.328c46.474,4.115,90.927,22.883,141.085,49.085h25.598l0.361,0.191 c0.516-2.575-1.888-6.025-4.752-9.229c-4.941-5.528-11.623-6.145-19.707-5.951c-5.738-6.83-41.004-43.861-41.004-43.861 l-4.808,3.395c-38.75-21.75-49.155-62.513-49.155-62.513c-33.792,8.148-69.78,28.334-90.391,49.761l-3.118,3.292 c-1.489,1.597-2.928,3.174-4.312,4.723C18.967,146.661,3,170.87,3,175.213v2.25h23.816l-0.505-0.668 c-2.449-12.943,4.443-23.341,10.279-30.385c4.179-5.044,11.1-9.801,21.968-12.457L91.013,133.328z"
|
||||||
|
id="path15" />
|
||||||
|
</svg:g>
|
||||||
|
<svg:g
|
||||||
|
id="tomcat"
|
||||||
|
i:layer="yes"
|
||||||
|
i:dimmedPercent="3"
|
||||||
|
i:rgbTrio="#4F00FFFF4F00">
|
||||||
|
<svg:path
|
||||||
|
i:knockout="Off"
|
||||||
|
d="M240.682,32.617c-0.019-5.071-1.598-26.5-4.5-32.4c-7.869,2.99-22.189,12.68-25.431,22.588 c-15.532-2.32-33.042-2.045-48.381,0.608C159.808,12.753,146.946,4.596,137.243,0c-4.093,6.907-5.906,22.92-5.445,34.279 c-0.018,0.013-0.037,0.024-0.054,0.037c1.8,47.7,25.2,77.399,55.799,95.399c31.481-17.988,53.972-53.057,53.101-97.12 C240.656,32.603,240.67,32.609,240.682,32.617z M214.485,23.421c0.114,0.021,0.229,0.042,0.344,0.064 C214.715,23.463,214.601,23.441,214.485,23.421z M212.527,23.083c0.275,0.044,0.554,0.094,0.83,0.141 C213.081,23.177,212.805,23.129,212.527,23.083z M235.784,36.059c0.81,39.69-19.44,71.279-47.79,87.48 c-48.118-23.977-57.183-84.71-48.977-117.289c2.283,12.454,6.424,20.266,15.394,24.098c19.533-5.591,46.423-6.033,66.231-0.57 c8.255-6.001,11.456-15.169,13.204-23.18C236.029,15.921,235.777,36.055,235.784,36.059z"
|
||||||
|
id="path18" />
|
||||||
|
<svg:g
|
||||||
|
id="g20">
|
||||||
|
<svg:rect
|
||||||
|
x="133.209"
|
||||||
|
y="90.51"
|
||||||
|
i:knockout="Off"
|
||||||
|
width="26.245"
|
||||||
|
height="3.239"
|
||||||
|
id="rect22" />
|
||||||
|
<svg:rect
|
||||||
|
x="133.209"
|
||||||
|
y="82.732"
|
||||||
|
i:knockout="Off"
|
||||||
|
width="26.245"
|
||||||
|
height="3.24"
|
||||||
|
id="rect24" />
|
||||||
|
<svg:rect
|
||||||
|
x="213.35"
|
||||||
|
y="90.51"
|
||||||
|
i:knockout="Off"
|
||||||
|
width="26.244"
|
||||||
|
height="3.239"
|
||||||
|
id="rect26" />
|
||||||
|
<svg:rect
|
||||||
|
x="213.35"
|
||||||
|
y="82.732"
|
||||||
|
i:knockout="Off"
|
||||||
|
width="26.244"
|
||||||
|
height="3.24"
|
||||||
|
id="rect28" />
|
||||||
|
<svg:g
|
||||||
|
id="g30">
|
||||||
|
<svg:path
|
||||||
|
i:knockout="Off"
|
||||||
|
d="M204.1,63.524h-27.188h-3.021h-12.561v-2.917h13.31c1.639-7.018,1.963-13.725-0.014-17.125 c-0.844-1.446-2.01-2.121-3.674-2.121c-7.609,0-10.753,8.046-10.884,8.389l0.002-0.003l-2.73-1.024 c0.156-0.42,3.965-10.278,13.612-10.278c2.692,0,4.834,1.235,6.191,3.57c2.41,4.141,2.127,11.305,0.494,18.592l23.354,0 c3.103-9.116,9.581-13.414,20.405-13.414v2.916c-11.732,0-15.019,4.973-17.366,10.498l12.743,0l-0.029,2.901L204.1,63.524z"
|
||||||
|
id="path32" />
|
||||||
|
<svg:path
|
||||||
|
i:knockout="Off"
|
||||||
|
d="M206.017,77.925l0.019-0.003c-3.459-5.101-4.555-9.456-3.108-14.413l-2.971,0.015 c-1.035,3.3-0.62,8.273,1.929,12.54H172.21c1.806-3.616,3.479-8.025,4.702-12.54h-3.021 c-1.348,4.786-3.241,9.524-5.372,13.277l-0.689,1.213l16.652,10.482l-9.375,6.178l1.605,2.436l10.479-6.908l11.312,7.382 l1.554-2.468l-10.488-6.488c0,0,15.682-10.187,16.461-10.684C206.024,77.937,206.021,77.931,206.017,77.925z M187.156,86.733 l-12.317-7.755l24.071,0.006L187.156,86.733z"
|
||||||
|
id="path34" />
|
||||||
|
</svg:g>
|
||||||
|
</svg:g>
|
||||||
|
<svg:polygon
|
||||||
|
i:knockout="Off"
|
||||||
|
points="114.745,73.635 122.087,95.391 99.788,80.434 "
|
||||||
|
id="polygon36" />
|
||||||
|
<svg:polygon
|
||||||
|
i:knockout="Off"
|
||||||
|
points="93.261,83.153 101.147,96.75 84.559,88.32 "
|
||||||
|
id="polygon38" />
|
||||||
|
<svg:polygon
|
||||||
|
i:knockout="Off"
|
||||||
|
points="75.313,93.759 79.12,107.356 67.699,99.47 "
|
||||||
|
id="polygon40" />
|
||||||
|
<svg:polygon
|
||||||
|
i:knockout="Off"
|
||||||
|
points="196.871,130.199 189.801,141.077 202.31,135.366 "
|
||||||
|
id="polygon42" />
|
||||||
|
<svg:polygon
|
||||||
|
i:knockout="Off"
|
||||||
|
points="208.021,142.709 196.6,151.411 212.372,147.332 "
|
||||||
|
id="polygon44" />
|
||||||
|
<svg:polygon
|
||||||
|
i:knockout="Off"
|
||||||
|
points="180.282,24.686 188.713,43.178 194.151,24.414 "
|
||||||
|
id="polygon46" />
|
||||||
|
<svg:polygon
|
||||||
|
i:knockout="Off"
|
||||||
|
points="137.588,51.608 150.913,58.678 138.947,59.494 "
|
||||||
|
id="polygon48" />
|
||||||
|
<svg:polygon
|
||||||
|
i:knockout="Off"
|
||||||
|
points="140.851,66.021 149.009,69.284 142.211,71.188 "
|
||||||
|
id="polygon50" />
|
||||||
|
<svg:polygon
|
||||||
|
i:knockout="Off"
|
||||||
|
points="236.031,56.775 225.153,61.398 234.127,62.757 "
|
||||||
|
id="polygon52" />
|
||||||
|
<svg:polygon
|
||||||
|
i:knockout="Off"
|
||||||
|
points="231.68,70.1 223.25,72.548 230.048,74.995 "
|
||||||
|
id="polygon54" />
|
||||||
|
<svg:path
|
||||||
|
i:knockout="Off"
|
||||||
|
d="M256.305,173.375c-4.941-5.528-14.623-8.145-22.707-7.951c-5.738-6.83-39.004-41.861-39.004-41.861 l-2.306,2.903l40.162,43.238l1.743-0.149c10.912-0.935,17.115,4.983,18.757,6.819c1.204,1.347,1.931,2.575,2.326,3.539h-22.075 c-50.624-26.416-95.078-45.044-142.297-49.112c0.104-6.571,1.273-14.01,3.518-22.299l-4.343-1.177 c-2.308,8.521-3.523,16.236-3.661,23.133c-4.92-0.326-9.872-0.495-14.868-0.495c-4.237,0-8.095,0.394-11.614,1.077 c-4.59-4.587-8.5-8.959-11.823-13.108c21.936-22.85,58.15-43.498,89.533-51.092l-1.015-4.396 c-33.792,8.148-70.78,30.334-91.391,51.761c-9.565-12.91-13.36-23.504-14.487-31.532c-1.424-10.14,0.997-19.441,6.999-26.899 C47.15,44.099,60.502,43.277,74.23,45.586c-0.268,2.167,0.017,4.24,0.885,5.522c3.631,5.363,23.144,7.246,34.791,2.049 c-8.595-12.045-26.006-17.926-30.83-15.569c-1.598,0.781-2.804,2.214-3.63,3.886c-4.745-0.849-9.458-1.48-12.903-1.455 c-12.107,0.088-21.363,4.319-28.296,12.932c-6.802,8.451-9.551,18.944-7.95,30.347c1.516,10.8,6.863,22.286,15.825,34.198 c-1.489,1.597-2.928,3.174-4.312,4.723C15.967,146.661,0,172.87,0,177.213v2.25h28.816l-0.505-2.668 c-1.627-8.601,1.623-19.351,8.279-27.385c4.179-5.044,11.1-10.801,21.968-13.457c9.663,9.431,21.975,19.446,35.679,29.109 h21.414v-2.25c0-2.539-1.259-4.762-3.545-6.257c-3.383-2.212-8.605-2.517-13.402-0.881c-4.573-5.093-7.137-11.896-7.691-20.347 c46.474,4.115,90.927,22.883,141.085,49.085h27.598l0.361-1.809C260.572,180.029,259.169,176.579,256.305,173.375z M33.125,146.539c-6.816,8.227-10.429,19.094-9.601,28.424H5.372c3.647-7.894,18.176-30.712,39.644-53.76 c2.958,3.656,6.253,7.35,9.872,11.073C44.347,135.444,37.437,141.336,33.125,146.539z"
|
||||||
|
id="path56" />
|
||||||
|
</svg:g>
|
||||||
|
</svg:g>
|
||||||
|
</svg:switch>
|
||||||
|
<i:pgf
|
||||||
|
id="adobe_illustrator_pgf">
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
wu6fUTK4oKJdvHOv77ZHU8OYhfm8tvE8OTGL+bUxRjK1N4IxOtaj62N2xDDGU7kop5dYjvYgrWwj
|
||||||
|
2wK1GBCkAsngUZwBRcVXKEDSbbblZ3/ewrYJUGKQaSFlxto/ZrKwna65GX7YX3PzMm6bkxhcXmcj
|
||||||
|
fEkRNOU2uSjLZH/MVudKwJki71/ny1NNV1U/YTxUc2jvhXOq3+JeJj77GxbsfUpLarRXYS5OudZY
|
||||||
|
tLyOB8jCulF48vlyBrH6ck1aiOXtQBZycUnJMoU8cy0e8SUIdDjitgi01GDPraozV0TgnO7h8qrV
|
||||||
|
mezF2M4Iv/i1C22+sp7NL5gf69X1Utw/ttLphhGdXWgu+urMnRhrvuJgreonwJhDSRZ9JTR93oVT
|
||||||
|
2TF1FcbyGw6xEnoThV0uLwL1+xxUFSQbF9oKt50Y9+9iungVwpJct1m2rVOe1oN9EBFLQilreaj8
|
||||||
|
9/k1k5mNGRFaES1Lk51EfRXCyW10b+Gum5XuEzVV5tpehbBaLU9+zTxmK4x5Hd2vlJXQs6sQDBHe
|
||||||
|
Ncuzac6ai648+5cpzKq9j0DRJIFSpoDmrSNWK2bSWSYuF3u2GjreBV17o6rGpzu4WFMaNitda90S
|
||||||
|
gHCvFLYy1FjZlomWf51XvFApvJHbgBFtiSnt7juhjTZ25aIqX/5tPZGijZNiY+p7ih0rvReM7LVp
|
||||||
|
bKWbEVzOhb44In2Zr6U0V2ZZLPT9avlsv4zANHePaOr4dEE3k/u2NxB8tRwvTHYMNyla3wxGjr7e
|
||||||
|
XB/Rtn4dxjugvrfHdkSr+vWRla4zu90US1QXfFhWx4IqfQTFpCFErHGY9eqMaS9ypo6MYLVrYbqm
|
||||||
|
wmNTKbwYa1mzuJffzK1NpHh5wb9pnWlPU77sfAWU7fpUzq+XLzuWKlBXeoc3R2M2gWNT2NgQ5XHO
|
||||||
|
08eqb6c6TMtUApRijiUmoK8cH9sEjkmBqpPPwbVCxOO0Olxz18z+5PRK30Ogqv/Y++E2mUWQts3d
|
||||||
|
mcsioDo51eGiR3Gte+HSK30UwbF4+W5Aa/E5rW9Td0Mpld4L3sO1acz5ywj0lgwZj13re0mOYnkS
|
||||||
|
WHYXNGiFmxTLYCjSaxfLqeieQizPqjgpxXJt640yZ84olpdVCm9GLAPaIpu5S40ULy8Ry6abJ53K
|
||||||
|
l9cUywseElK+vCGxXNu63NDNkwRZTmIZ7f3VKj8BbSuLZWqPYnFZPhcpZF0ill1GK4pKLL+NVq/7
|
||||||
|
tF7LfC3watmKVnWfCzwZetZpvlpEL/djPmGjch8g/N6hlfsUt35jzfcKdZ8UlvjbiD6J16buU/X1
|
||||||
|
kfp+2spP6rrPvaM71vnsr5DpOuf1q49NXr85ywJLWTfo9eNSD82p453DK6aSYuG3zXUFhsiI/YUF
|
||||||
|
NmRRH9O6Falvn6tu+va5+pjarUhzXUE6HF3h7NOVLK9834X9Jq96XQHF2Qfq/+11BarcV8SWzhuO
|
||||||
|
xRKfvBkkaqluNN87DDCZV4tjMftQ9eInqX03O1GsmC5jxXTB5fWEpNCb5Yeq9ytJcc0PVZs+U+3y
|
||||||
|
/pEPVZs+U004/+Y/VG3q5/L+kQ9Vmz5TvXwta3+o2nYtG/1Qtekz1XgTxR/4ULXVl743/6FqE3Au
|
||||||
|
7x/5UHVg/jPVsJY/8aFqE3DEB7v5D1WbPlOt1b5t+EPVps9UY5baH/hQtWlS/Dr2H/hQNcJg+Ez1
|
||||||
|
zKuw2Q9Vz0sfowd+kx+qXjVz2KGM0uZD1RaRRINm88sPVdsBZ7aSaD9UTVtAPqar4V3vQ9Wm8Rbv
|
||||||
|
6nQ0uWg+VL1SDS/dh6qdSUVZC/WHqqlLluc/U22fb0lLfJYfqnbOt/zth6otEGj7pe8Vk8eXIxDv
|
||||||
|
7KK6LJP2gAysvrFjVWFHjcAF14nTLQEOZu+y8uwNR3lsyrMp/HYLX5Te4P15enE27dcZnDJLlxdn
|
||||||
|
r+KDtSnPXgdjm7ky11Sc/ZuoqFqevYGsG4rybAqQyL78rjybojjbDmNrOq1sirO1L0pv8nKFxeJs
|
||||||
|
my8ZrVKeTZ2j+KvybAqPmm2Uh748m6I4Wz+Va5dnU3A527XQl2dTf7X8V+XZFptoLs6212FWGNGx
|
||||||
|
dtFKiq1Ynm2gWrvi7CX7QluevcK+/KI82xKL87GGjeyLo/a74l2dVuXZv/8CO015NoWyoX+Vae3y
|
||||||
|
bIribGM04beV7vbF2evdaj5Xnk2BSrv85BXKsymKs1eOii6WZ1OUGlvl9a1Ynk1RnO1wLxxNeTZF
|
||||||
|
cfZ81s1a5dlrY2zFCkrH4myn80JRdkwhpV2UQK1YfWkCaZZtu3559iJIFnnjvy7Ppqys/2V5tnNx
|
||||||
|
tjHXGtfaMicOUq/U6uad2bezre7oNn49m75Wfdm3s6m+J05dNm7HmEw1VrTgrfjtbKdM+818O1uX
|
||||||
|
yNZfz157N+a+nU19k96vvp1tpcEuq6OmUmkWlmv7bfRPuotcHAvRSRU1sffX8Out9u1sy7s6qRFI
|
||||||
|
p8jQ36vwuVAZR319CahDBj9//s9VjNvc1LrhinEKL9wGKsYXa0X/RMW4PcY2WTG+gRsOKSrGaW84
|
||||||
|
/F3FuDHn6s9VjNN80eD3FeMuh4SjzVSML2YQ/YmK8VmFnWWx8aYqxvVK4SjlQVunYnzdb9itVjG+
|
||||||
|
HGObqhjH/OT1a6doK8bNsdc/UzFuWVm/8Ypx+rsIflMxPl+V9qcqxpfljm6uYnyluwfXrhi3/VrW
|
||||||
|
RivGN1OX5FQxvkJd0i8qxhdy4P9IxfgGaIyiYtxFL31/UTE+R2N/rGJ8lW/Wr18xbvPN+g1XjJMb
|
||||||
|
QTna6Oq6FeMu7+I3zzdfMb6hGiuHinEDJdOXpq1cMa74+uxUnk1VjCvaBb8ptNmUpq1e97pOxbi1
|
||||||
|
72LTFeObo7HFWPbi3YMrlqatWDHuWsl0Wbdi3Hxn15+pGLe/qXWTFeOz6qc96vvX1qgY/81dN/QV
|
||||||
|
4y6KD17/XtnQvlpOUdLyi4pxu+/ybLZifDmNLVaMr1rfPXc7kOVHHzZXMY7f4LbKl95sxbjyjdTf
|
||||||
|
524trxg3c5g/UzHucvZEbKBifMZh2C3ar5KuUTG+5t1QK1aML/GQbLBiHLTxWc34H6kYJ2LZ/gsg
|
||||||
|
m6wY178AssK3gleuGKeIjGygYtzCSvoDFeNk923LiTdVMW6oeqZ1WK9RMb7eDYerVoyvZImvXTFu
|
||||||
|
cUfEH6gYJxVDd5v8NtKc10+tGHd5rT9xv9mKcVjLrGb8z1WMW0ZGNl4xrkdGqN2Ka1SMk7w+20/c
|
||||||
|
b6pifHb20+Hon6sYd8i031DF+Er3j61dMW5z/9jyivFFPC2pGMfacPwG95+qDtdrw+Hs/7HqcL0f
|
||||||
|
YuxPVYfr/VzeP1cdvnwtm6oO1/u5vH+uOlwvtl380vfmqsP12nC9amDz1eE6cHNfYd5wdThdZf1v
|
||||||
|
q8NNlfV/qDrcsbJ+I9Xhepk26Px/rDpcrw3X5MufqA5XRUK3PQWM/bHqcF0xVK2kP1IdbpcDv9nq
|
||||||
|
cJMO84eqw80+pT9THb65L+Utqw5fo15sjerwpV8v3Vh1uF4bvkZOL3V1uL5cy69mbKg63CKj+w9U
|
||||||
|
h1tmdG+8OlwPYzvUWfyqOtzKStpYdbiGO6s6iz9QHa4jw+VIT+tXhy/U8P6R6nC6/LHfVocbswj+
|
||||||
|
XHX4YtXzn6gOX5ajuLnqcKcI72aqw/XacIds219Vh9thbLPV4XptOE3m8LrV4TbZgxuuDtdlvVrN
|
||||||
|
8Ueqw3VEm+5V2Gh1uJ6M5PL+uepw27VstDpcrw0309gmq8PtdZhNVodbSbHNV4cv2ZcNVofrteGb
|
||||||
|
3Re7T3f/Yl9W+HT3Eovv19Xh+mZb6Pwbqw7XNxtj4n+qOtypinMz1eFzttgfqw6nuleB+SgIz0tR
|
||||||
|
afAbqAs3xpENCRIur5Yi0WvZf8A39fC6+gdAz23PfvtsU4W8lLdq6NLeUsOD9X1TfQH4nXtFz1Wn
|
||||||
|
+MA6kFLq4cd8K/ZKpZwLGFuxlNMOY7T3XThjbPHm3xXu7Jpbmq0JvxJIJJL4RpWO5Py9dFtmZZ/X
|
||||||
|
Z4unFYtI56xXE1Br3OJmF+giX2Cnrfek0PlxpQu5O7jSOZ3fwlK31/RPfJmRnaZ/brLTf/0V5uxC
|
||||||
|
GZoN56er9l3L6Wh7EziAt2AU/8bpCON5V/gyi6PT8dzW6bg8D9Z+N/ZWOjQOVtL5eldSLqust0gJ
|
||||||
|
+90nwGcC0eXdxM0Jnwvp7fMItPkO7xIELknctkWgrQ6DxetOyWHUCMRZsHjdyZ5QcWchIS0yRsft
|
||||||
|
JbVv/I48pKlsoPPB9i6sdn+NrMCLjX/172KzXzQALrFwsNcrfdbzvX+LMccP/tH5LbF6ekPfSL0g
|
||||||
|
Gd+/zxsnIFmkelvd1EqBJ0c/03zKnlLLY5eihcXrv/w86sw7Olfsxp9UJhkb79Iwv2aWt7UPlj+5
|
||||||
|
DZhvgFlnm2IlLSrqlFNHK95jJftjtsaN0/nVE7xtMXbk3wjGPFq92C8TqfMUSWR0X/xEoH6T222I
|
||||||
|
8eWtfBtr4skUNVoe5XFS8rF0nSYd0LV6gcZwScIClsZaHNy1b5zGuBB1kY/L61RTTCdzl0vcue8j
|
||||||
|
n73HzO6W9S+KwNJ17fQaIrxrfWm39kZzwYOLshSbSvDakrj+FWasW9/EbRFK1fr8EV73Vg1StR7c
|
||||||
|
HI2tKn2tZK9uv5AR69Q0tkLyeLmPPNnGj4iOHqoybmdBp+9+uW97HdLqYWyEcF9nmY66pWFEuzIP
|
||||||
|
MuLSa3VcXooRLWtT95ORI7simFtLD8n6sVAQkxTizUVzNgDuHA3x2TruF+ssgAHQ3j1DVZu6nywu
|
||||||
|
3j24VvnY3WB5berc7juWYu+vaT6Z/MmEOjZTm4rl15qz9LfyBavWnWtTaWksvpAgYXYiLctAsPlm
|
||||||
|
vQXfNDtCKArlZoFxwpO1ezoAj/u2yaJs9jlNYxRa+Rws13K30lVZSyuKKb9dSx01A/N3o3fcIYyr
|
||||||
|
3fdg/33ku5Xuy1peiK1V1/76kga7FCVLi8/5S+freB+svl+JdetrXZplhSyrexStXKSUH8PEEe3C
|
||||||
|
H1Y0tsKVEbWt0xM7sXyvi2UHbkkplp9/lovlFeRLbeuBxqtpJZZt7iGB3ac9dzRimdS91jfgc0G0
|
||||||
|
2Yrlxd13/Hg3taavHz1Lnny/MbGM5dcgljdwi6ZStb5ULK9EY5eOFzzYiOVl36zfnFhe8Chi2DVo
|
||||||
|
K5YBxlsa08wklu3X8uAslqkrV3Ur6W3kqFgtfPPcuX6d27TcfxttWO7HfLQXSnjnIolLyuv7v7xq
|
||||||
|
cd4Sf1jBEaKOaIs7kxuEourZWUxi/brz2aepYLfw+r15lnn96oaPECy3xOm8fh/psIONiH4YmysX
|
||||||
|
lpU0fzpduDCfgeuiuNOg+mu34sI9ilY5Sb9wK1Yt8y3Xvn2YlK7TS2S6z50fUKvXWi2PjdiyTC1a
|
||||||
|
48KF+bNfpfHzr2JN6kIL8y0LQthebL2M2w7Xg6nLWPZdiHnr9TZ2YDsfRcTcdr7ZjTqqxxHxWKhk
|
||||||
|
6weNXrLfCA2Ske700iQDyFSpbktkEoff18+5/d1rjbk0kruZj6GfTebvHwuzfQYrSQ==
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
/Dn4G1vgFa2715u9zrn+L1T7Dxc=
|
||||||
|
|
||||||
|
</i:pgf>
|
||||||
|
<svg:text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-size:13.03699398px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Nimbus Sans L;-inkscape-font-specification:Nimbus Sans L"
|
||||||
|
x="246.20877"
|
||||||
|
y="10.629581"
|
||||||
|
id="text2436"
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
transform="scale(0.9830254,1.0172677)"><svg:tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan2438"
|
||||||
|
x="246.20877"
|
||||||
|
y="10.629581">TM</svg:tspan></svg:text>
|
||||||
|
</svg:svg>
|
After Width: | Height: | Size: 66 KiB |
|
@ -0,0 +1,568 @@
|
||||||
|
================================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
====================================================
|
||||||
|
Building The Apache Tomcat 8.0 Servlet/JSP Container
|
||||||
|
====================================================
|
||||||
|
|
||||||
|
This subproject contains the source code for Tomcat 8.0, a container that
|
||||||
|
implements the Servlet 3.1, JSP 2.3, EL 3.0 and WebSocket 1.1 specifications
|
||||||
|
from the Java Community Process <https://www.jcp.org/>.
|
||||||
|
|
||||||
|
Note: If you just need to run Apache Tomcat, it is not necessary to build
|
||||||
|
it. You may simply download a binary distribution. It is cross-platform.
|
||||||
|
Read RUNNING.txt for the instruction on how to run it.
|
||||||
|
|
||||||
|
In order to build a binary distribution version of Apache Tomcat from a
|
||||||
|
source distribution, do the following:
|
||||||
|
|
||||||
|
|
||||||
|
(1) Download and Install a Java Development Kit
|
||||||
|
|
||||||
|
1. If the JDK is already installed, skip to (2).
|
||||||
|
|
||||||
|
2. Download a version 7 of Java Development Kit (JDK) release (use the
|
||||||
|
latest update available for your chosen version) from one of:
|
||||||
|
|
||||||
|
http://www.oracle.com/technetwork/java/javase/downloads/index.html
|
||||||
|
http://openjdk.java.net/install/index.html
|
||||||
|
or another JDK vendor.
|
||||||
|
|
||||||
|
Note regarding later versions of Java:
|
||||||
|
|
||||||
|
As documented elsewhere, one of components in Apache Tomcat includes
|
||||||
|
a private copy of the Apache Commons DBCP library.
|
||||||
|
|
||||||
|
The JDBC interfaces implemented by DBCP frequently change in non-backwards
|
||||||
|
compatible ways between versions of the Java SE specification. Therefore,
|
||||||
|
it is likely that DBCP will only compile with the specific version of Java
|
||||||
|
listed above and that compilation will fail if a later version of Java is
|
||||||
|
used.
|
||||||
|
|
||||||
|
See Apache Commons DBCP project web site for more details on
|
||||||
|
available versions of the library and its requirements,
|
||||||
|
|
||||||
|
https://commons.apache.org/dbcp/
|
||||||
|
|
||||||
|
3. Install the JDK according to the instructions included with the release.
|
||||||
|
|
||||||
|
4. Set an environment variable JAVA_HOME to the pathname of the directory
|
||||||
|
into which you installed the JDK release.
|
||||||
|
|
||||||
|
|
||||||
|
(2) Install Apache Ant version 1.9.8 or later on your computer.
|
||||||
|
|
||||||
|
1. If Apache Ant version 1.9.8 or later is already installed on your
|
||||||
|
computer, skip to (3).
|
||||||
|
|
||||||
|
2. Download a binary distribution of Ant from:
|
||||||
|
|
||||||
|
https://ant.apache.org/bindownload.cgi
|
||||||
|
|
||||||
|
3. Unpack the binary distribution into a convenient location so that the
|
||||||
|
Ant release resides in its own directory (conventionally named
|
||||||
|
"apache-ant-[version]").
|
||||||
|
|
||||||
|
For the purposes of the remainder of this document, the symbolic name
|
||||||
|
"${ant.home}" is used to refer to the full pathname of the release
|
||||||
|
directory.
|
||||||
|
|
||||||
|
4. Create an ANT_HOME environment variable to point the directory
|
||||||
|
${ant.home}.
|
||||||
|
|
||||||
|
5. Modify the PATH environment variable to include the directory
|
||||||
|
${ant.home}/bin in its list. This makes the "ant" command line script
|
||||||
|
available, which will be used to actually perform the build.
|
||||||
|
|
||||||
|
|
||||||
|
(3) Building Tomcat 8.0
|
||||||
|
|
||||||
|
(3.1) Checkout or obtain the source code for Tomcat 8.0
|
||||||
|
|
||||||
|
Checkout the source using SVN, selecting a tag for released version or
|
||||||
|
trunk for the current development code, or download and unpack a source
|
||||||
|
package.
|
||||||
|
|
||||||
|
* Tomcat SVN repository URL:
|
||||||
|
|
||||||
|
https://svn.apache.org/repos/asf/tomcat/tc8.0.x/trunk/
|
||||||
|
|
||||||
|
* Source packages can be downloaded from:
|
||||||
|
|
||||||
|
https://tomcat.apache.org/download-80.cgi
|
||||||
|
|
||||||
|
The location where the source has been placed will be further referred as
|
||||||
|
${tomcat.source}.
|
||||||
|
|
||||||
|
The Tomcat local build process does not modify line-endings. The svn repository
|
||||||
|
is configured so that all files will be checked out with the line-ending
|
||||||
|
appropriate for the current platform. When using a source package you should
|
||||||
|
ensure that you use the source package that has the appropriate line-ending
|
||||||
|
for your platform:
|
||||||
|
|
||||||
|
zip -> CRLF
|
||||||
|
tar.gz -> LF
|
||||||
|
|
||||||
|
Note that the release build process does modify line-endings to ensure that
|
||||||
|
each release package has the appropriate line-endings.
|
||||||
|
|
||||||
|
(3.2) Building
|
||||||
|
|
||||||
|
1. The build is controlled by creating a ${tomcat.source}/build.properties
|
||||||
|
file.
|
||||||
|
|
||||||
|
It is recommended to always create the file, because of unfortunate
|
||||||
|
default value of base.path property. You may start with the following
|
||||||
|
content for the file:
|
||||||
|
|
||||||
|
# ----- Default Base Path for Dependent Packages -----
|
||||||
|
# Replace this path with the directory path where dependencies binaries
|
||||||
|
# should be downloaded
|
||||||
|
base.path=/home/me/some-place-to-download-to
|
||||||
|
|
||||||
|
2. Configure base.path property by adding it to the
|
||||||
|
${tomcat.source}/build.properties file.
|
||||||
|
|
||||||
|
The base.path property specifies the place where Tomcat dependencies
|
||||||
|
required by the build are downloaded. It is recommended to place this
|
||||||
|
directory outside of the source tree, so that you do not waste your
|
||||||
|
time re-downloading the libraries.
|
||||||
|
|
||||||
|
* NOTE: The default value of the base.path property configures the build script
|
||||||
|
to download the libraries required to build Tomcat to the
|
||||||
|
${user.home}/tomcat-build-libs directory.
|
||||||
|
|
||||||
|
* NOTE: Users accessing the Internet through a proxy must use the properties
|
||||||
|
file to indicate to Ant the proxy configuration.
|
||||||
|
|
||||||
|
The following properties should be added to the ${tomcat.source}/build.properties
|
||||||
|
file.
|
||||||
|
|
||||||
|
proxy.use=true
|
||||||
|
proxy.host=proxy.domain
|
||||||
|
proxy.port=8080
|
||||||
|
proxy.user=username
|
||||||
|
proxy.password=password
|
||||||
|
|
||||||
|
See Apache Ant documentation for the <setproxy> task for details.
|
||||||
|
|
||||||
|
3. Go to the sources directory and run Ant:
|
||||||
|
|
||||||
|
cd ${tomcat.source}
|
||||||
|
ant
|
||||||
|
|
||||||
|
This will execute the "deploy" target in build.xml.
|
||||||
|
|
||||||
|
Once the build has completed successfully, a usable Tomcat installation
|
||||||
|
will have been produced in the ${tomcat.source}/output/build directory,
|
||||||
|
and can be started and stopped with the usual scripts.
|
||||||
|
|
||||||
|
Note that the build includes Tomcat documentation, which can be found
|
||||||
|
in the output/build/webapps/docs directory.
|
||||||
|
|
||||||
|
The path of the output directory can be controlled by specifying the
|
||||||
|
"tomcat.output" property in the build.properties file.
|
||||||
|
|
||||||
|
* NOTE: Do not run the build as the root user. Building and running Tomcat
|
||||||
|
does not require root privileges.
|
||||||
|
|
||||||
|
|
||||||
|
(4) Updating sources and rebuilding
|
||||||
|
|
||||||
|
It is recommended that you regularly update the downloaded Tomcat 8.0
|
||||||
|
sources using your SVN client.
|
||||||
|
|
||||||
|
For a quick rebuild of only modified code you can use:
|
||||||
|
|
||||||
|
cd ${tomcat.source}
|
||||||
|
ant
|
||||||
|
|
||||||
|
|
||||||
|
(5) Special builds
|
||||||
|
|
||||||
|
There are several targets in Tomcat build files that are useful to be
|
||||||
|
called separately. They build components that you may want to build
|
||||||
|
quickly, or ones that are included in the full release and are not built
|
||||||
|
during the default "deploy" build.
|
||||||
|
|
||||||
|
(5.1) Building documentation
|
||||||
|
|
||||||
|
The documentation web application is built during the default "deploy"
|
||||||
|
build.
|
||||||
|
|
||||||
|
It can be built quickly by using the following commands:
|
||||||
|
|
||||||
|
cd ${tomcat.source}
|
||||||
|
ant build-docs
|
||||||
|
|
||||||
|
The output of this command will be found in the following directory:
|
||||||
|
|
||||||
|
output/build/webapps/docs
|
||||||
|
|
||||||
|
|
||||||
|
The API documentation (Javadoc) is built during a "release" build. It is
|
||||||
|
easy to build it separately by using the following commands:
|
||||||
|
|
||||||
|
cd ${tomcat.source}
|
||||||
|
ant javadoc
|
||||||
|
|
||||||
|
The output of this command will be found in the following directories:
|
||||||
|
|
||||||
|
output/dist/webapps/docs/api
|
||||||
|
output/dist/webapps/docs/elapi
|
||||||
|
output/dist/webapps/docs/jspapi
|
||||||
|
output/dist/webapps/docs/servletapi
|
||||||
|
|
||||||
|
|
||||||
|
(5.2) Building the extras (commons-logging, webservices etc.)
|
||||||
|
|
||||||
|
These components are documented on the "Additional Components"
|
||||||
|
(extras.html) page of documentation. They are built during a "release"
|
||||||
|
build.
|
||||||
|
|
||||||
|
You can build them by using the following commands:
|
||||||
|
|
||||||
|
cd ${tomcat.source}
|
||||||
|
ant extras
|
||||||
|
|
||||||
|
(5.3) Building the embedded packages
|
||||||
|
|
||||||
|
These are built during a "release" build.
|
||||||
|
|
||||||
|
You can build them by using the following commands:
|
||||||
|
|
||||||
|
cd ${tomcat.source}
|
||||||
|
ant embed
|
||||||
|
|
||||||
|
|
||||||
|
(6) Building a full release (as provided via the ASF download pages)
|
||||||
|
|
||||||
|
A full release includes the Windows installer which requires a Windows
|
||||||
|
environment to be available to create it. If not building in a Windows
|
||||||
|
environment, the build scripts assume that Wine is available. If this is not
|
||||||
|
the case, the skip.installer property may be set to skip the creation of the
|
||||||
|
Windows installer.
|
||||||
|
|
||||||
|
1. Configure GPG, if needed
|
||||||
|
|
||||||
|
If the released artifacts have to be cryptographically signed with a
|
||||||
|
PGP signature, like the official ASF releases are, the following
|
||||||
|
property can be added to the build.properties file:
|
||||||
|
|
||||||
|
# Location of GPG executable (used only for releases)
|
||||||
|
gpg.exec=/path/to/gpg
|
||||||
|
|
||||||
|
You do not need it if you do not plan to sign the release.
|
||||||
|
|
||||||
|
If "gpg.exec" property does not point to an existing file, it will be
|
||||||
|
ignored and this feature will be disabled.
|
||||||
|
|
||||||
|
You will be prompted for the GPG passphrase when the release build
|
||||||
|
starts, unless "gpg.passphrase" property is set.
|
||||||
|
|
||||||
|
2. If building the Windows installer
|
||||||
|
|
||||||
|
If running the build in a UAC enabled environment, building the Windows
|
||||||
|
installer requires elevated privileges. The simplest way to do this is to
|
||||||
|
open the command prompt used for the build with the "Run as administrator"
|
||||||
|
option.
|
||||||
|
|
||||||
|
3. Configure the code signing service
|
||||||
|
|
||||||
|
ASF committers performing official releases will need to configure the code
|
||||||
|
signing service so that the Windows installer is signed during the build
|
||||||
|
process. The following properties need to be added to the build.properties
|
||||||
|
file:
|
||||||
|
|
||||||
|
# Location of GPG executable (used only for releases)
|
||||||
|
# Code signing of Windows installer
|
||||||
|
do.codesigning=true
|
||||||
|
codesigning.user=request-via-pmc
|
||||||
|
codesigning.pwd=request-via-pmc
|
||||||
|
codesigning.partnercode=request-via-pmc
|
||||||
|
codesigning.service=Microsoft Windows Signing
|
||||||
|
|
||||||
|
Release managers will be provided with the necessary credentials by the PMC.
|
||||||
|
It will also be necessary to enable TLS 1.1 and TLS 1.2 by default (they are
|
||||||
|
disabled by default on Java 7) for the build process to communicate with the
|
||||||
|
code signing service. The simplest way is by setting the ANT_OPTS
|
||||||
|
environment variable. E.g. (for Windows):
|
||||||
|
|
||||||
|
set ANT_OPTS=-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2
|
||||||
|
|
||||||
|
4. Build the release:
|
||||||
|
|
||||||
|
cd ${tomcat.source}
|
||||||
|
ant release
|
||||||
|
|
||||||
|
|
||||||
|
(7) Tests
|
||||||
|
|
||||||
|
(7.1) Running Tomcat tests
|
||||||
|
|
||||||
|
Tomcat includes a number of junit tests. The tests are not run when a
|
||||||
|
release is built. There is separate command to run them.
|
||||||
|
|
||||||
|
To run the testsuite use the following command:
|
||||||
|
|
||||||
|
cd ${tomcat.source}
|
||||||
|
ant test
|
||||||
|
|
||||||
|
It is advisable to redirect output of the above command to a file for later
|
||||||
|
inspection.
|
||||||
|
|
||||||
|
The JUnit reports generated by the tests will be written to the following
|
||||||
|
directory:
|
||||||
|
|
||||||
|
output/build/logs
|
||||||
|
|
||||||
|
By default the testsuite is run four times to test 4 different
|
||||||
|
implementations of Tomcat connectors: BIO, NIO, NIO2 and APR. (If you are not
|
||||||
|
familiar with Tomcat connectors, see config/http.html in documentation for
|
||||||
|
details).
|
||||||
|
|
||||||
|
The 4 runs are enabled and disabled individually by the following
|
||||||
|
properties, which all are "true" by default:
|
||||||
|
|
||||||
|
execute.test.bio=true
|
||||||
|
execute.test.nio=true
|
||||||
|
execute.test.nio2=true
|
||||||
|
execute.test.apr=true
|
||||||
|
|
||||||
|
The APR connector can be tested only if Tomcat-Native library binaries are
|
||||||
|
found by the testsuite. The "test.apr.loc" property specifies the directory
|
||||||
|
where the library binaries are located.
|
||||||
|
|
||||||
|
By default the "test.apr.loc" property specifies the following location:
|
||||||
|
|
||||||
|
output/build/bin/native/
|
||||||
|
|
||||||
|
If you are on Windows and want to test the APR connector you can put the
|
||||||
|
tcnative-1.dll file into ${tomcat.source}/bin/native/ and it will be copied
|
||||||
|
into the above directory when the build runs.
|
||||||
|
|
||||||
|
The unit tests include tests of the clustering functionality which require
|
||||||
|
multicast to be enabled. There is a simple application provided in the Tomcat
|
||||||
|
test source (org.apache.catalina.tribes.TesterMulticast) that can be used to
|
||||||
|
check if a machine supports multicast. Notes on enabling multicast for different
|
||||||
|
operating systems are provided in the Javadoc for that class.
|
||||||
|
|
||||||
|
|
||||||
|
(7.2) Running a single test
|
||||||
|
|
||||||
|
It is possible to run a single JUnit test class by adding the "test.entry"
|
||||||
|
property to the build.properties file. The property specifies the name of
|
||||||
|
the test class.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
test.entry=org.apache.catalina.util.TestServerInfo
|
||||||
|
|
||||||
|
It is possible to further limit such run to a number of selected test
|
||||||
|
methods by adding "test.entry.methods" property. The property specifies a
|
||||||
|
comma-separated list of test case methods.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
test.entry=org.apache.el.lang.TestELArithmetic
|
||||||
|
test.entry.methods=testMultiply01,testMultiply02
|
||||||
|
|
||||||
|
|
||||||
|
(7.3) Running a set of tests
|
||||||
|
|
||||||
|
It is possible to run a set of JUnit test classes by adding the "test.name"
|
||||||
|
property to the build.properties file. The property specifies an Ant
|
||||||
|
includes pattern for the fileset of test class files to run.
|
||||||
|
|
||||||
|
The default value is "**/Test*.java", so all test classes are being
|
||||||
|
executed (with few exceptions - see build.xml for several exclude patterns).
|
||||||
|
|
||||||
|
You can include multiple patterns by concatenating them with a comma (",")
|
||||||
|
as the separator.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
test.name=**/TestSsl.java,**/TestWebSocketFrameClientSSL.java
|
||||||
|
|
||||||
|
You can exclude specific JUnit test classes by adding the "test.exclude"
|
||||||
|
property to the build.properties file. The property specifies an Ant
|
||||||
|
excludes pattern for the fileset of test class files to exclude form the run.
|
||||||
|
The default value is empty, so no classes are excluded. The syntax is the same
|
||||||
|
as for the property "test.name".
|
||||||
|
|
||||||
|
|
||||||
|
(7.4) Other configuration options
|
||||||
|
|
||||||
|
1. It is possible to configure the directory where JUnit reports are
|
||||||
|
written to. It is configured by "test.reports" property. The default
|
||||||
|
value is
|
||||||
|
|
||||||
|
output/build/logs
|
||||||
|
|
||||||
|
2. It is possible to enable generation of access log file when the tests
|
||||||
|
are run. This is off by default and can be enabled by the following
|
||||||
|
property:
|
||||||
|
|
||||||
|
test.accesslog=true
|
||||||
|
|
||||||
|
The "access_log.<date>" file will be written to the same directory as
|
||||||
|
JUnit reports,
|
||||||
|
|
||||||
|
output/build/logs
|
||||||
|
|
||||||
|
3. The testsuite respects logging configuration as configured by
|
||||||
|
${tomcat.source}/conf/logging.properties
|
||||||
|
|
||||||
|
The log files will be written to the temporary directory used by the
|
||||||
|
tests,
|
||||||
|
|
||||||
|
output/test-tmp/logs
|
||||||
|
|
||||||
|
4. It is possible to configure formatter used by JUnit reports.
|
||||||
|
Configuration properties are "junit.formatter.type",
|
||||||
|
"junit.formatter.extension" and "junit.formatter.usefile".
|
||||||
|
|
||||||
|
For example the following property disables generation of separate report
|
||||||
|
files:
|
||||||
|
|
||||||
|
junit.formatter.usefile=false
|
||||||
|
|
||||||
|
5. It is possible to speed up testing by letting JUnit to run several
|
||||||
|
tests in parallel.
|
||||||
|
|
||||||
|
This is configured by setting "test.threads" property. The recommended
|
||||||
|
value is one thread per core.
|
||||||
|
|
||||||
|
6. Optional support is provided for the Cobertura code coverage tool.
|
||||||
|
|
||||||
|
NOTE: Cobertura is licensed under GPL v2 with parts of it being under
|
||||||
|
Apache License v1.1. See https://cobertura.github.io/cobertura/ for details.
|
||||||
|
Using it during Tomcat build is optional and is off by default.
|
||||||
|
|
||||||
|
Cobertura can be enabled using the following properties:
|
||||||
|
|
||||||
|
test.cobertura=true
|
||||||
|
test.threads=1
|
||||||
|
|
||||||
|
Using Cobertura currently requires setting test.threads configuration
|
||||||
|
property to the value of 1. Setting that property to a different value
|
||||||
|
will disable code coverage.
|
||||||
|
|
||||||
|
The report files by default are written to
|
||||||
|
|
||||||
|
output/coverage
|
||||||
|
|
||||||
|
7. The performance tests are written to run reasonably powerful machines (such
|
||||||
|
as a developer may use day to day) assuming no other resource hungry
|
||||||
|
processes are running.
|
||||||
|
|
||||||
|
These assumptions are not always true (e.g. on CI systems running in a
|
||||||
|
virtual machine) so the performance tests may be disabled by using the
|
||||||
|
following property:
|
||||||
|
|
||||||
|
test.excludePerformance=true
|
||||||
|
|
||||||
|
8. Some tests include checks that the access log valve entries are as expected.
|
||||||
|
These checks include timings. On slower / loaded systems these checks will
|
||||||
|
often fail. The checks may be relaxed by using the following property:
|
||||||
|
|
||||||
|
test.relaxTiming=true
|
||||||
|
|
||||||
|
9. It is known that some platforms (e.g. OSX El Capitan) require IPv4 to
|
||||||
|
be the default for the multicast tests to work. This is configured by
|
||||||
|
the following property:
|
||||||
|
|
||||||
|
java.net.preferIPv4Stack=true
|
||||||
|
|
||||||
|
10. It is possible to control whether the output of the tests is displayed
|
||||||
|
on the console or not. By default it is displayed and can be disabled
|
||||||
|
by the following property:
|
||||||
|
|
||||||
|
test.verbose=true
|
||||||
|
|
||||||
|
(8) Source code checks
|
||||||
|
|
||||||
|
(8.1) Checkstyle
|
||||||
|
|
||||||
|
NOTE: Checkstyle is licensed under LGPL. Using Checkstyle during Tomcat
|
||||||
|
build is optional and is off by default.
|
||||||
|
|
||||||
|
See http://checkstyle.sourceforge.net/ for more information.
|
||||||
|
|
||||||
|
Tomcat comes with a Checkstyle configuration that tests its source code
|
||||||
|
for certain conventions, like presence of the license header.
|
||||||
|
|
||||||
|
To enable Checkstyle, add the following property to build.properties file:
|
||||||
|
|
||||||
|
execute.validate=true
|
||||||
|
|
||||||
|
Once Checkstyle is enabled, the check will be performed automatically
|
||||||
|
during the build. The check is run before compilation of the source code.
|
||||||
|
|
||||||
|
To speed-up repeated runs of this check, a cache is configured. The cache
|
||||||
|
is located in the following directory:
|
||||||
|
|
||||||
|
output/res/checkstyle
|
||||||
|
|
||||||
|
It is possible to run the check separately by calling the "validate"
|
||||||
|
target. The command is:
|
||||||
|
|
||||||
|
cd ${tomcat.source}
|
||||||
|
ant -Dexecute.validate=true validate
|
||||||
|
|
||||||
|
|
||||||
|
(8.2) FindBugs
|
||||||
|
|
||||||
|
NOTE: FindBugs is licensed under LGPL. Using Findbugs during Tomcat build is
|
||||||
|
optional and is off by default.
|
||||||
|
|
||||||
|
See http://findbugs.sourceforge.net/ for more information.
|
||||||
|
|
||||||
|
To enable FindBugs, add the following property to build.properties file:
|
||||||
|
|
||||||
|
execute.findbugs=true
|
||||||
|
|
||||||
|
To compile Tomcat classes and generate a FindBugs report, call the
|
||||||
|
"findbugs" target. For example:
|
||||||
|
|
||||||
|
cd ${tomcat.source}
|
||||||
|
ant -Dexecute.findbugs=true findbugs
|
||||||
|
|
||||||
|
The report file by default is written to
|
||||||
|
|
||||||
|
output/findbugs
|
||||||
|
|
||||||
|
|
||||||
|
(8.3) End-of-line conventions check
|
||||||
|
|
||||||
|
You usually would not need to run this check. You can skip this section.
|
||||||
|
|
||||||
|
Apache Tomcat project has convention that all of its textual source files,
|
||||||
|
stored in Subversion repository, are marked with Subversion property
|
||||||
|
"svn:eol-style" with value of "native". This convention makes the editing
|
||||||
|
of source code on different platforms easier.
|
||||||
|
|
||||||
|
This test is used by developers to check that the source code adheres to
|
||||||
|
this convention. It verifies that the ends of lines in textual files are
|
||||||
|
appropriate for the operating system where it is run. The idea is to run
|
||||||
|
this check regularly on two different platforms and notify developers when
|
||||||
|
an inconsistency is detected.
|
||||||
|
|
||||||
|
The command to run this test is:
|
||||||
|
|
||||||
|
cd ${tomcat.source}
|
||||||
|
ant validate-eoln
|
|
@ -0,0 +1,172 @@
|
||||||
|
================================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
|
||||||
|
Apache Tomcat Version 8.0.53
|
||||||
|
Release Notes
|
||||||
|
|
||||||
|
|
||||||
|
=========
|
||||||
|
CONTENTS:
|
||||||
|
=========
|
||||||
|
|
||||||
|
* Dependency Changes
|
||||||
|
* API Stability
|
||||||
|
* Bundled APIs
|
||||||
|
* Web application reloading and static fields in shared libraries
|
||||||
|
* Security manager URLs
|
||||||
|
* Symlinking static resources
|
||||||
|
* Viewing the Tomcat Change Log
|
||||||
|
* Cryptographic software notice
|
||||||
|
* When all else fails
|
||||||
|
|
||||||
|
|
||||||
|
===================
|
||||||
|
Dependency Changes:
|
||||||
|
===================
|
||||||
|
Tomcat 8.0 is designed to run on Java SE 7 and later.
|
||||||
|
|
||||||
|
|
||||||
|
==============
|
||||||
|
API Stability:
|
||||||
|
==============
|
||||||
|
|
||||||
|
The public interfaces for the following classes are fixed and will not be
|
||||||
|
changed at all during the remaining lifetime of the 8.x series:
|
||||||
|
- All classes in the javax namespace
|
||||||
|
|
||||||
|
The public interfaces for the following classes may be added to in order to
|
||||||
|
resolve bugs and/or add new features. No existing interface method will be
|
||||||
|
removed or changed although it may be deprecated.
|
||||||
|
- org.apache.catalina.* (excluding sub-packages)
|
||||||
|
|
||||||
|
Note: As Tomcat 8 matures, the above list will be added to. The list is not
|
||||||
|
considered complete at this time.
|
||||||
|
|
||||||
|
The remaining classes are considered part of the Tomcat internals and may change
|
||||||
|
without notice between point releases.
|
||||||
|
|
||||||
|
|
||||||
|
=============
|
||||||
|
Bundled APIs:
|
||||||
|
=============
|
||||||
|
A standard installation of Tomcat 8.0 makes all of the following APIs available
|
||||||
|
for use by web applications (by placing them in "lib"):
|
||||||
|
* annotations-api.jar (Annotations package)
|
||||||
|
* catalina.jar (Tomcat Catalina implementation)
|
||||||
|
* catalina-ant.jar (Tomcat Catalina Ant tasks)
|
||||||
|
* catalina-ha.jar (High availability package)
|
||||||
|
* catalina-storeconfig.jar (Generation of XML configuration from current state)
|
||||||
|
* catalina-tribes.jar (Group communication)
|
||||||
|
* ecj-4.6.3.jar (Eclipse JDT Java compiler)
|
||||||
|
* el-api.jar (EL 3.0 API)
|
||||||
|
* jasper.jar (Jasper 2 Compiler and Runtime)
|
||||||
|
* jasper-el.jar (Jasper 2 EL implementation)
|
||||||
|
* jsp-api.jar (JSP 2.3 API)
|
||||||
|
* servlet-api.jar (Servlet 3.1 API)
|
||||||
|
* tomcat-api.jar (Interfaces shared by Catalina and Jasper)
|
||||||
|
* tomcat-coyote.jar (Tomcat connectors and utility classes)
|
||||||
|
* tomcat-dbcp.jar (package renamed database connection pool based on Commons DBCP)
|
||||||
|
* tomcat-jdbc.jar (Tomcat's database connection pooling solution)
|
||||||
|
* tomcat-jni.jar (Interface to the native component of the APR/native connector)
|
||||||
|
* tomcat-util.jar (Various utilities)
|
||||||
|
* tomcat-websocket.jar (WebSocket 1.1 implementation)
|
||||||
|
* websocket-api.jar (WebSocket 1.1 API)
|
||||||
|
|
||||||
|
You can make additional APIs available to all of your web applications by
|
||||||
|
putting unpacked classes into a "classes" directory (not created by default),
|
||||||
|
or by placing them in JAR files in the "lib" directory.
|
||||||
|
|
||||||
|
To override the XML parser implementation or interfaces, use the endorsed
|
||||||
|
mechanism of the JVM. The default configuration defines JARs located in
|
||||||
|
"endorsed" as endorsed. This mechanism is no longer supported with Java 9.
|
||||||
|
|
||||||
|
|
||||||
|
================================================================
|
||||||
|
Web application reloading and static fields in shared libraries:
|
||||||
|
================================================================
|
||||||
|
Some shared libraries (many are part of the JDK) keep references to objects
|
||||||
|
instantiated by the web application. To avoid class loading related problems
|
||||||
|
(ClassCastExceptions, messages indicating that the classloader
|
||||||
|
is stopped, etc.), the shared libraries state should be reinitialized.
|
||||||
|
|
||||||
|
Something which might help is to avoid putting classes which would be
|
||||||
|
referenced by a shared static field in the web application classloader,
|
||||||
|
and putting them in the shared classloader instead (JARs should be put in the
|
||||||
|
"lib" folder, and classes should be put in the "classes" folder).
|
||||||
|
|
||||||
|
|
||||||
|
======================
|
||||||
|
Security manager URLs:
|
||||||
|
======================
|
||||||
|
In order to grant security permissions to JARs located inside the
|
||||||
|
web application repository, use URLs of of the following format
|
||||||
|
in your policy file:
|
||||||
|
|
||||||
|
file:${catalina.base}/webapps/examples/WEB-INF/lib/driver.jar
|
||||||
|
|
||||||
|
|
||||||
|
============================
|
||||||
|
Symlinking static resources:
|
||||||
|
============================
|
||||||
|
By default, Unix symlinks will not work when used in a web application to link
|
||||||
|
resources located outside the web application root directory.
|
||||||
|
|
||||||
|
This behavior is optional, and the "allowLinking" flag may be used to disable
|
||||||
|
the check.
|
||||||
|
|
||||||
|
|
||||||
|
==============================
|
||||||
|
Viewing the Tomcat Change Log:
|
||||||
|
==============================
|
||||||
|
The full change log is available from https://tomcat.apache.org and is also
|
||||||
|
included in the documentation web application.
|
||||||
|
|
||||||
|
|
||||||
|
=============================
|
||||||
|
Cryptographic software notice
|
||||||
|
=============================
|
||||||
|
This distribution includes cryptographic software. The country in
|
||||||
|
which you currently reside may have restrictions on the import,
|
||||||
|
possession, use, and/or re-export to another country, of
|
||||||
|
encryption software. BEFORE using any encryption software, please
|
||||||
|
check your country's laws, regulations and policies concerning the
|
||||||
|
import, possession, or use, and re-export of encryption software, to
|
||||||
|
see if this is permitted. See <http://www.wassenaar.org/> for more
|
||||||
|
information.
|
||||||
|
|
||||||
|
The U.S. Government Department of Commerce, Bureau of Industry and
|
||||||
|
Security (BIS), has classified this software as Export Commodity
|
||||||
|
Control Number (ECCN) 5D002.C.1, which includes information security
|
||||||
|
software using or performing cryptographic functions with asymmetric
|
||||||
|
algorithms. The form and manner of this Apache Software Foundation
|
||||||
|
distribution makes it eligible for export under the License Exception
|
||||||
|
ENC Technology Software Unrestricted (TSU) exception (see the BIS
|
||||||
|
Export Administration Regulations, Section 740.13) for both object
|
||||||
|
code and source code.
|
||||||
|
|
||||||
|
The following provides more details on the included cryptographic
|
||||||
|
software:
|
||||||
|
- Tomcat includes code designed to work with JSSE
|
||||||
|
- Tomcat includes code designed to work with OpenSSL
|
||||||
|
|
||||||
|
|
||||||
|
====================
|
||||||
|
When all else fails:
|
||||||
|
====================
|
||||||
|
See the FAQ
|
||||||
|
https://tomcat.apache.org/faq/
|
|
@ -0,0 +1,477 @@
|
||||||
|
================================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
===================================================
|
||||||
|
Running The Apache Tomcat 8.0 Servlet/JSP Container
|
||||||
|
===================================================
|
||||||
|
|
||||||
|
Apache Tomcat 8.0 requires a Java Standard Edition Runtime
|
||||||
|
Environment (JRE) version 7 or later.
|
||||||
|
|
||||||
|
=============================
|
||||||
|
Running With JRE 7 Or Later
|
||||||
|
=============================
|
||||||
|
|
||||||
|
(1) Download and Install a Java SE Runtime Environment (JRE)
|
||||||
|
|
||||||
|
(1.1) Download a Java SE Runtime Environment (JRE),
|
||||||
|
release version 7 or later, from
|
||||||
|
http://www.oracle.com/technetwork/java/javase/downloads/index.html
|
||||||
|
|
||||||
|
(1.2) Install the JRE according to the instructions included with the
|
||||||
|
release.
|
||||||
|
|
||||||
|
You may also use a full Java Development Kit (JDK) rather than just
|
||||||
|
a JRE.
|
||||||
|
|
||||||
|
|
||||||
|
(2) Download and Install Apache Tomcat
|
||||||
|
|
||||||
|
(2.1) Download a binary distribution of Tomcat from:
|
||||||
|
|
||||||
|
https://tomcat.apache.org/
|
||||||
|
|
||||||
|
(2.2) Unpack the binary distribution so that it resides in its own
|
||||||
|
directory (conventionally named "apache-tomcat-[version]").
|
||||||
|
|
||||||
|
For the purposes of the remainder of this document, the name
|
||||||
|
"CATALINA_HOME" is used to refer to the full pathname of that
|
||||||
|
directory.
|
||||||
|
|
||||||
|
NOTE: As an alternative to downloading a binary distribution, you can
|
||||||
|
create your own from the Tomcat source code, as described in
|
||||||
|
"BUILDING.txt". You can either
|
||||||
|
|
||||||
|
a) Do the full "release" build and find the created distribution in the
|
||||||
|
"output/release" directory and then proceed with unpacking as above, or
|
||||||
|
|
||||||
|
b) Do a simple build and use the "output/build" directory as
|
||||||
|
"CATALINA_HOME". Be warned that there are some differences between the
|
||||||
|
contents of the "output/build" directory and a full "release"
|
||||||
|
distribution.
|
||||||
|
|
||||||
|
|
||||||
|
(3) Configure Environment Variables
|
||||||
|
|
||||||
|
Tomcat is a Java application and does not use environment variables directly.
|
||||||
|
Environment variables are used by the Tomcat startup scripts. The scripts use
|
||||||
|
the environment variables to prepare the command that starts Tomcat.
|
||||||
|
|
||||||
|
(3.1) Set CATALINA_HOME (required) and CATALINA_BASE (optional)
|
||||||
|
|
||||||
|
The CATALINA_HOME environment variable should be set to the location of the
|
||||||
|
root directory of the "binary" distribution of Tomcat.
|
||||||
|
|
||||||
|
The Tomcat startup scripts have some logic to set this variable
|
||||||
|
automatically if it is absent, based on the location of the startup script
|
||||||
|
in *nix and on the current directory in Windows. That logic might not work
|
||||||
|
in all circumstances, so setting the variable explicitly is recommended.
|
||||||
|
|
||||||
|
The CATALINA_BASE environment variable specifies location of the root
|
||||||
|
directory of the "active configuration" of Tomcat. It is optional. It
|
||||||
|
defaults to be equal to CATALINA_HOME.
|
||||||
|
|
||||||
|
Using distinct values for the CATALINA_HOME and CATALINA_BASE variables is
|
||||||
|
recommended to simplify further upgrades and maintenance. It is documented
|
||||||
|
in the "Multiple Tomcat Instances" section below.
|
||||||
|
|
||||||
|
|
||||||
|
(3.2) Set JRE_HOME or JAVA_HOME (required)
|
||||||
|
|
||||||
|
These variables are used to specify location of a Java Runtime
|
||||||
|
Environment or of a Java Development Kit that is used to start Tomcat.
|
||||||
|
|
||||||
|
The JRE_HOME variable is used to specify location of a JRE. The JAVA_HOME
|
||||||
|
variable is used to specify location of a JDK.
|
||||||
|
|
||||||
|
Using JAVA_HOME provides access to certain additional startup options that
|
||||||
|
are not allowed when JRE_HOME is used.
|
||||||
|
|
||||||
|
If both JRE_HOME and JAVA_HOME are specified, JRE_HOME is used.
|
||||||
|
|
||||||
|
The recommended place to specify these variables is a "setenv" script. See
|
||||||
|
below.
|
||||||
|
|
||||||
|
|
||||||
|
(3.3) Other variables (optional)
|
||||||
|
|
||||||
|
Other environment variables exist, besides the four described above.
|
||||||
|
See the comments at the top of catalina.bat or catalina.sh scripts for
|
||||||
|
the list and a description of each of them.
|
||||||
|
|
||||||
|
One frequently used variable is CATALINA_OPTS. It allows specification of
|
||||||
|
additional options for the java command that starts Tomcat.
|
||||||
|
|
||||||
|
See the Java documentation for the options that affect the Java Runtime
|
||||||
|
Environment.
|
||||||
|
|
||||||
|
See the "System Properties" page in the Tomcat Configuration Reference for
|
||||||
|
the system properties that are specific to Tomcat.
|
||||||
|
|
||||||
|
A similar variable is JAVA_OPTS. It is used less frequently. It allows
|
||||||
|
specification of options that are used both to start and to stop Tomcat as well
|
||||||
|
as for other commands.
|
||||||
|
|
||||||
|
Note: Do not use JAVA_OPTS to specify memory limits. You do not need much
|
||||||
|
memory for a small process that is used to stop Tomcat. Those settings
|
||||||
|
belong to CATALINA_OPTS.
|
||||||
|
|
||||||
|
Another frequently used variable is CATALINA_PID (on *nix only). It
|
||||||
|
specifies the location of the file where process id of the forked Tomcat
|
||||||
|
java process will be written. This setting is optional. It will enable the
|
||||||
|
following features:
|
||||||
|
|
||||||
|
* better protection against duplicate start attempts and
|
||||||
|
* allows forceful termination of Tomcat process when it does not react to
|
||||||
|
the standard shutdown command.
|
||||||
|
|
||||||
|
|
||||||
|
(3.4) Using the "setenv" script (optional, recommended)
|
||||||
|
|
||||||
|
Apart from CATALINA_HOME and CATALINA_BASE, all environment variables can
|
||||||
|
be specified in the "setenv" script. The script is placed either into
|
||||||
|
CATALINA_BASE/bin or into CATALINA_HOME/bin directory and is named
|
||||||
|
setenv.bat (on Windows) or setenv.sh (on *nix). The file has to be
|
||||||
|
readable.
|
||||||
|
|
||||||
|
By default the setenv script file is absent. If the script file is present
|
||||||
|
both in CATALINA_BASE and in CATALINA_HOME, the one in CATALINA_BASE is
|
||||||
|
preferred.
|
||||||
|
|
||||||
|
For example, to configure the JRE_HOME and CATALINA_PID variables you can
|
||||||
|
create the following script file:
|
||||||
|
|
||||||
|
On Windows, %CATALINA_BASE%\bin\setenv.bat:
|
||||||
|
|
||||||
|
set "JRE_HOME=%ProgramFiles%\Java\jre7"
|
||||||
|
exit /b 0
|
||||||
|
|
||||||
|
On *nix, $CATALINA_BASE/bin/setenv.sh:
|
||||||
|
|
||||||
|
JRE_HOME=/usr/java/latest
|
||||||
|
CATALINA_PID="$CATALINA_BASE/tomcat.pid"
|
||||||
|
|
||||||
|
|
||||||
|
The CATALINA_HOME and CATALINA_BASE variables cannot be configured in the
|
||||||
|
setenv script, because they are used to locate that file.
|
||||||
|
|
||||||
|
All the environment variables described here and the "setenv" script are
|
||||||
|
used only if you use the standard scripts to launch Tomcat. For example, if
|
||||||
|
you have installed Tomcat as a service on Windows, the service wrapper
|
||||||
|
launches Java directly and does not use the script files.
|
||||||
|
|
||||||
|
|
||||||
|
(4) Start Up Tomcat
|
||||||
|
|
||||||
|
(4.1) Tomcat can be started by executing one of the following commands:
|
||||||
|
|
||||||
|
On Windows:
|
||||||
|
|
||||||
|
%CATALINA_HOME%\bin\startup.bat
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
%CATALINA_HOME%\bin\catalina.bat start
|
||||||
|
|
||||||
|
On *nix:
|
||||||
|
|
||||||
|
$CATALINA_HOME/bin/startup.sh
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
$CATALINA_HOME/bin/catalina.sh start
|
||||||
|
|
||||||
|
(4.2) After startup, the default web applications included with Tomcat will be
|
||||||
|
available by visiting:
|
||||||
|
|
||||||
|
http://localhost:8080/
|
||||||
|
|
||||||
|
(4.3) Further information about configuring and running Tomcat can be found in
|
||||||
|
the documentation included here, as well as on the Tomcat web site:
|
||||||
|
|
||||||
|
https://tomcat.apache.org/
|
||||||
|
|
||||||
|
|
||||||
|
(5) Shut Down Tomcat
|
||||||
|
|
||||||
|
(5.1) Tomcat can be shut down by executing one of the following commands:
|
||||||
|
|
||||||
|
On Windows:
|
||||||
|
|
||||||
|
%CATALINA_HOME%\bin\shutdown.bat
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
%CATALINA_HOME%\bin\catalina.bat stop
|
||||||
|
|
||||||
|
On *nix:
|
||||||
|
|
||||||
|
$CATALINA_HOME/bin/shutdown.sh
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
$CATALINA_HOME/bin/catalina.sh stop
|
||||||
|
|
||||||
|
==================================================
|
||||||
|
Advanced Configuration - Multiple Tomcat Instances
|
||||||
|
==================================================
|
||||||
|
|
||||||
|
In many circumstances, it is desirable to have a single copy of a Tomcat
|
||||||
|
binary distribution shared among multiple users on the same server. To make
|
||||||
|
this possible, you can set the CATALINA_BASE environment variable to the
|
||||||
|
directory that contains the files for your 'personal' Tomcat instance.
|
||||||
|
|
||||||
|
When running with a separate CATALINA_HOME and CATALINA_BASE, the files
|
||||||
|
and directories are split as following:
|
||||||
|
|
||||||
|
In CATALINA_BASE:
|
||||||
|
|
||||||
|
* bin - Only the following files:
|
||||||
|
|
||||||
|
* setenv.sh (*nix) or setenv.bat (Windows),
|
||||||
|
* tomcat-juli.jar
|
||||||
|
|
||||||
|
The setenv scripts were described above. The tomcat-juli library
|
||||||
|
is documented in the Logging chapter in the User Guide.
|
||||||
|
|
||||||
|
* conf - Server configuration files (including server.xml)
|
||||||
|
|
||||||
|
* lib - Libraries and classes, as explained below
|
||||||
|
|
||||||
|
* logs - Log and output files
|
||||||
|
|
||||||
|
* webapps - Automatically loaded web applications
|
||||||
|
|
||||||
|
* work - Temporary working directories for web applications
|
||||||
|
|
||||||
|
* temp - Directory used by the JVM for temporary files (java.io.tmpdir)
|
||||||
|
|
||||||
|
|
||||||
|
In CATALINA_HOME:
|
||||||
|
|
||||||
|
* bin - Startup and shutdown scripts
|
||||||
|
|
||||||
|
The following files will be used only if they are absent in
|
||||||
|
CATALINA_BASE/bin:
|
||||||
|
|
||||||
|
setenv.sh (*nix), setenv.bat (Windows), tomcat-juli.jar
|
||||||
|
|
||||||
|
* lib - Libraries and classes, as explained below
|
||||||
|
|
||||||
|
* endorsed - Libraries that override standard "Endorsed Standards"
|
||||||
|
libraries provided by JRE. See Classloading documentation
|
||||||
|
in the User Guide for details.
|
||||||
|
No longer supported with Java 9.
|
||||||
|
|
||||||
|
By default this "endorsed" directory is absent.
|
||||||
|
|
||||||
|
In the default configuration the JAR libraries and classes both in
|
||||||
|
CATALINA_BASE/lib and in CATALINA_HOME/lib will be added to the common
|
||||||
|
classpath, but the ones in CATALINA_BASE will be added first and thus will
|
||||||
|
be searched first.
|
||||||
|
|
||||||
|
The idea is that you may leave the standard Tomcat libraries in
|
||||||
|
CATALINA_HOME/lib and add other ones such as database drivers into
|
||||||
|
CATALINA_BASE/lib.
|
||||||
|
|
||||||
|
In general it is advised to never share libraries between web applications,
|
||||||
|
but put them into WEB-INF/lib directories inside the applications. See
|
||||||
|
Classloading documentation in the User Guide for details.
|
||||||
|
|
||||||
|
|
||||||
|
It might be useful to note that the values of CATALINA_HOME and
|
||||||
|
CATALINA_BASE can be referenced in the XML configuration files processed
|
||||||
|
by Tomcat as ${catalina.home} and ${catalina.base} respectively.
|
||||||
|
|
||||||
|
For example, the standard manager web application can be kept in
|
||||||
|
CATALINA_HOME/webapps/manager and loaded into CATALINA_BASE by using
|
||||||
|
the following trick:
|
||||||
|
|
||||||
|
* Copy the CATALINA_HOME/webapps/manager/META-INF/context.xml
|
||||||
|
file as CATALINA_BASE/conf/Catalina/localhost/manager.xml
|
||||||
|
|
||||||
|
* Add docBase attribute as shown below.
|
||||||
|
|
||||||
|
The file will look like the following:
|
||||||
|
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Context docBase="${catalina.home}/webapps/manager"
|
||||||
|
antiResourceLocking="false" privileged="true" >
|
||||||
|
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
|
||||||
|
allow="127\.0\.0\.1" />
|
||||||
|
</Context>
|
||||||
|
|
||||||
|
See Deployer chapter in User Guide and Context and Host chapters in the
|
||||||
|
Configuration Reference for more information on contexts and web
|
||||||
|
application deployment.
|
||||||
|
|
||||||
|
|
||||||
|
================
|
||||||
|
Troubleshooting
|
||||||
|
================
|
||||||
|
|
||||||
|
There are only really 2 things likely to go wrong during the stand-alone
|
||||||
|
Tomcat install:
|
||||||
|
|
||||||
|
(1) The most common hiccup is when another web server (or any process for that
|
||||||
|
matter) has laid claim to port 8080. This is the default HTTP port that
|
||||||
|
Tomcat attempts to bind to at startup. To change this, open the file:
|
||||||
|
|
||||||
|
$CATALINA_HOME/conf/server.xml
|
||||||
|
|
||||||
|
and search for '8080'. Change it to a port that isn't in use, and is
|
||||||
|
greater than 1024, as ports less than or equal to 1024 require superuser
|
||||||
|
access to bind under UNIX.
|
||||||
|
|
||||||
|
Restart Tomcat and you're in business. Be sure that you replace the "8080"
|
||||||
|
in the URL you're using to access Tomcat. For example, if you change the
|
||||||
|
port to 1977, you would request the URL http://localhost:1977/ in your
|
||||||
|
browser.
|
||||||
|
|
||||||
|
(2) The 'localhost' machine isn't found. This could happen if you're behind a
|
||||||
|
proxy. If that's the case, make sure the proxy configuration for your
|
||||||
|
browser knows that you shouldn't be going through the proxy to access the
|
||||||
|
"localhost".
|
||||||
|
|
||||||
|
In Firefox, this is under Tools/Preferences -> Advanced/Network ->
|
||||||
|
Connection -> Settings..., and in Internet Explorer it is Tools ->
|
||||||
|
Internet Options -> Connections -> LAN Settings.
|
||||||
|
|
||||||
|
|
||||||
|
====================
|
||||||
|
Optional Components
|
||||||
|
====================
|
||||||
|
|
||||||
|
The following optional components may be included with the Apache Tomcat binary
|
||||||
|
distribution. If they are not included, you can install them separately.
|
||||||
|
|
||||||
|
1. Apache Tomcat Native library
|
||||||
|
|
||||||
|
2. Apache Commons Daemon service launcher
|
||||||
|
|
||||||
|
Both of them are implemented in C language and as such have to be compiled
|
||||||
|
into binary code. The binary code will be specific for a platform and CPU
|
||||||
|
architecture and it must match the Java Runtime Environment executables
|
||||||
|
that will be used to launch Tomcat.
|
||||||
|
|
||||||
|
The Windows-specific binary distributions of Apache Tomcat include binary
|
||||||
|
files for these components. On other platforms you would have to look for
|
||||||
|
binary versions elsewhere or compile them yourself.
|
||||||
|
|
||||||
|
If you are new to Tomcat, do not bother with these components to start with.
|
||||||
|
If you do use them, do not forget to read their documentation.
|
||||||
|
|
||||||
|
|
||||||
|
Apache Tomcat Native library
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
It is a library that allows to use the "Apr" variant of HTTP and AJP
|
||||||
|
protocol connectors in Apache Tomcat. It is built around OpenSSL and Apache
|
||||||
|
Portable Runtime (APR) libraries. Those are the same libraries as used by
|
||||||
|
Apache HTTPD Server project.
|
||||||
|
|
||||||
|
This feature was especially important in the old days when Java performance
|
||||||
|
was poor. It is less important nowadays, but it is still used and respected
|
||||||
|
by many. See Tomcat documentation for more details.
|
||||||
|
|
||||||
|
For further reading:
|
||||||
|
|
||||||
|
- Apache Tomcat documentation
|
||||||
|
|
||||||
|
* Documentation for APR/Native library in the Tomcat User's Guide
|
||||||
|
|
||||||
|
https://tomcat.apache.org/tomcat-8.0-doc/apr.html
|
||||||
|
|
||||||
|
* Documentation for the HTTP and AJP protocol connectors in the Tomcat
|
||||||
|
Configuration Reference
|
||||||
|
|
||||||
|
https://tomcat.apache.org/tomcat-8.0-doc/config/http.html
|
||||||
|
|
||||||
|
https://tomcat.apache.org/tomcat-8.0-doc/config/ajp.html
|
||||||
|
|
||||||
|
- Apache Tomcat Native project home
|
||||||
|
|
||||||
|
https://tomcat.apache.org/native-doc/
|
||||||
|
|
||||||
|
- Other projects
|
||||||
|
|
||||||
|
* OpenSSL
|
||||||
|
|
||||||
|
https://www.openssl.org/
|
||||||
|
|
||||||
|
* Apache Portable Runtime
|
||||||
|
|
||||||
|
https://apr.apache.org/
|
||||||
|
|
||||||
|
* Apache HTTP Server
|
||||||
|
|
||||||
|
https://httpd.apache.org/
|
||||||
|
|
||||||
|
To disable Apache Tomcat Native library:
|
||||||
|
|
||||||
|
- To disable Apache Tomcat Native library when it is installed, or
|
||||||
|
- To remove the warning that is logged during Tomcat startup when the
|
||||||
|
library is not installed:
|
||||||
|
|
||||||
|
Edit the "conf/server.xml" file and remove "AprLifecycleListener" from
|
||||||
|
it.
|
||||||
|
|
||||||
|
The binary file of Apache Tomcat Native library is usually named
|
||||||
|
|
||||||
|
- "tcnative-1.dll" on Windows
|
||||||
|
- "libtcnative-1.so" on *nix systems
|
||||||
|
|
||||||
|
|
||||||
|
Apache Commons Daemon
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
Apache Commons Daemon project provides wrappers that can be used to
|
||||||
|
install Apache Tomcat as a service on Windows or as a daemon on *nix
|
||||||
|
systems.
|
||||||
|
|
||||||
|
The Windows-specific implementation of Apache Commons Daemon is called
|
||||||
|
"procrun". The *nix-specific one is called "jsvc".
|
||||||
|
|
||||||
|
For further reading:
|
||||||
|
|
||||||
|
- Apache Commons Daemon project
|
||||||
|
|
||||||
|
https://commons.apache.org/daemon/
|
||||||
|
|
||||||
|
- Apache Tomcat documentation
|
||||||
|
|
||||||
|
* Installing Apache Tomcat
|
||||||
|
|
||||||
|
https://tomcat.apache.org/tomcat-8.0-doc/setup.html
|
||||||
|
|
||||||
|
* Windows service HOW-TO
|
||||||
|
|
||||||
|
https://tomcat.apache.org/tomcat-8.0-doc/windows-service-howto.html
|
||||||
|
|
||||||
|
The binary files of Apache Commons Daemon in Apache Tomcat distributions
|
||||||
|
for Windows are named:
|
||||||
|
|
||||||
|
- "tomcat8.exe"
|
||||||
|
- "tomcat8w.exe"
|
||||||
|
|
||||||
|
These files are renamed copies of "prunsrv.exe" and "prunmgr.exe" from
|
||||||
|
Apache Commons Daemon distribution. The file names have a meaning: they are
|
||||||
|
used as the service name to register the service in Windows, as well as the
|
||||||
|
key name to store distinct configuration for this installation of
|
||||||
|
"procrun". If you would like to install several instances of Tomcat 8.0
|
||||||
|
in parallel, you have to further rename those files, using the same naming
|
||||||
|
scheme.
|
|
@ -0,0 +1,29 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
|
||||||
|
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
|
||||||
|
version="3.1"
|
||||||
|
metadata-complete="true">
|
||||||
|
|
||||||
|
<display-name>Tomcat Documentation</display-name>
|
||||||
|
<description>
|
||||||
|
Tomcat Documentation.
|
||||||
|
</description>
|
||||||
|
</web-app>
|
|
@ -0,0 +1,366 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="./images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 (8.0.53) - Advanced IO and Tomcat</title><meta name="author" content="Remy Maucherat"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/aio">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="./images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="./images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="index.html">Docs Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>User Guide</h2><ul><li><a href="introduction.html">1) Introduction</a></li><li><a href="setup.html">2) Setup</a></li><li><a href="appdev/index.html">3) First webapp</a></li><li><a href="deployer-howto.html">4) Deployer</a></li><li><a href="manager-howto.html">5) Manager</a></li><li><a href="host-manager-howto.html">6) Host Manager</a></li><li><a href="realm-howto.html">7) Realms and AAA</a></li><li><a href="security-manager-howto.html">8) Security Manager</a></li><li><a href="jndi-resources-howto.html">9) JNDI Resources</a></li><li><a href="jndi-datasource-examples-howto.html">10) JDBC DataSources</a></li><li><a href="class-loader-howto.html">11) Classloading</a></li><li><a href="jasper-howto.html">12) JSPs</a></li><li><a href="ssl-howto.html">13) SSL/TLS</a></li><li><a href="ssi-howto.html">14) SSI</a></li><li><a href="cgi-howto.html">15) CGI</a></li><li><a href="proxy-howto.html">16) Proxy Support</a></li><li><a href="mbeans-descriptors-howto.html">17) MBeans Descriptors</a></li><li><a href="default-servlet.html">18) Default Servlet</a></li><li><a href="cluster-howto.html">19) Clustering</a></li><li><a href="balancer-howto.html">20) Load Balancer</a></li><li><a href="connectors.html">21) Connectors</a></li><li><a href="monitoring.html">22) Monitoring and Management</a></li><li><a href="logging.html">23) Logging</a></li><li><a href="apr.html">24) APR/Native</a></li><li><a href="virtual-hosting-howto.html">25) Virtual Hosting</a></li><li><a href="aio.html">26) Advanced IO</a></li><li><a href="extras.html">27) Additional Components</a></li><li><a href="maven-jars.html">28) Mavenized</a></li><li><a href="security-howto.html">29) Security Considerations</a></li><li><a href="windows-service-howto.html">30) Windows Service</a></li><li><a href="windows-auth-howto.html">31) Windows Authentication</a></li><li><a href="jdbc-pool.html">32) Tomcat's JDBC Pool</a></li><li><a href="web-socket-howto.html">33) WebSocket</a></li><li><a href="rewrite.html">34) Rewrite</a></li></ul></div><div><h2>Reference</h2><ul><li><a href="RELEASE-NOTES.txt">Release Notes</a></li><li><a href="config/index.html">Configuration</a></li><li><a href="api/index.html">Tomcat Javadocs</a></li><li><a href="servletapi/index.html">Servlet Javadocs</a></li><li><a href="jspapi/index.html">JSP 2.3 Javadocs</a></li><li><a href="elapi/index.html">EL 3.0 Javadocs</a></li><li><a href="websocketapi/index.html">WebSocket 1.1 Javadocs</a></li><li><a href="https://tomcat.apache.org/connectors-doc/">JK 1.2 Documentation</a></li></ul></div><div><h2>Apache Tomcat Development</h2><ul><li><a href="building.html">Building</a></li><li><a href="changelog.html">Changelog</a></li><li><a href="https://wiki.apache.org/tomcat/TomcatVersions">Status</a></li><li><a href="developers.html">Developers</a></li><li><a href="architecture/index.html">Architecture</a></li><li><a href="funcspecs/index.html">Functional Specs.</a></li><li><a href="tribes/introduction.html">Tribes</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Advanced IO and Tomcat</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Comet_support">Comet support</a><ol><li><a href="#CometEvent">CometEvent</a></li><li><a href="#CometFilter">CometFilter</a></li><li><a href="#Example_code">Example code</a></li><li><a href="#Comet_timeouts">Comet timeouts</a></li></ol></li><li><a href="#Asynchronous_writes">Asynchronous writes</a></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
With usage of APR or NIO APIs as the basis of its connectors, Tomcat is
|
||||||
|
able to provide a number of extensions over the regular blocking IO
|
||||||
|
as provided with support for the Servlet API.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<b>IMPORTANT NOTE: Usage of these features requires using the APR or NIO
|
||||||
|
HTTP connectors. The classic java.io HTTP connector and the AJP connectors
|
||||||
|
do not support them.</b>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div><h3 id="Comet_support">Comet support</h3><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Comet support allows a servlet to process IO asynchronously, receiving
|
||||||
|
events when data is available for reading on the connection (rather than
|
||||||
|
always using a blocking read), and writing data back on connections
|
||||||
|
asynchronously (most likely responding to some event raised from some
|
||||||
|
other source).
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="CometEvent">CometEvent</h4><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Servlets which implement the <code>org.apache.catalina.comet.CometProcessor</code>
|
||||||
|
interface will have their event method invoked rather than the usual service
|
||||||
|
method, according to the event which occurred. The event object gives
|
||||||
|
access to the usual request and response objects, which may be used in the
|
||||||
|
usual way. The main difference is that those objects remain valid and fully
|
||||||
|
functional at any time between processing of the BEGIN event until processing
|
||||||
|
an END or ERROR event.
|
||||||
|
The following event types exist:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>EventType.BEGIN: will be called at the beginning
|
||||||
|
of the processing of the connection. It can be used to initialize any relevant
|
||||||
|
fields using the request and response objects. Between the end of the processing
|
||||||
|
of this event, and the beginning of the processing of the end or error events,
|
||||||
|
it is possible to use the response object to write data on the open connection.
|
||||||
|
Note that the response object and dependent OutputStream and Writer are still
|
||||||
|
not synchronized, so when they are accessed by multiple threads,
|
||||||
|
synchronization is mandatory. After processing the initial event, the request
|
||||||
|
is considered to be committed.</li>
|
||||||
|
<li>EventType.READ: This indicates that input data is available, and that one read can be made
|
||||||
|
without blocking. The available and ready methods of the InputStream or
|
||||||
|
Reader may be used to determine if there is a risk of blocking: the servlet
|
||||||
|
should read while data is reported available. When encountering a read error,
|
||||||
|
the servlet should report it by propagating the exception properly. Throwing
|
||||||
|
an exception will cause the error event to be invoked, and the connection
|
||||||
|
will be closed.
|
||||||
|
Alternately, it is also possible to catch any exception, perform clean up
|
||||||
|
on any data structure the servlet may be using, and using the close method
|
||||||
|
of the event. It is not allowed to attempt reading data from the request
|
||||||
|
object outside of the execution of this method.<br>
|
||||||
|
On some platforms, like Windows, a client disconnect is indicated by a READ event.
|
||||||
|
Reading from the stream may result in -1, an IOException or an EOFException.
|
||||||
|
Make sure you properly handle all these three cases.
|
||||||
|
If you don't catch the IOException, Tomcat will instantly invoke your event chain with an ERROR as
|
||||||
|
it catches the error for you, and you will be notified of the error at that time.
|
||||||
|
</li>
|
||||||
|
<li>EventType.END: End may be called to end the processing of the request. Fields that have
|
||||||
|
been initialized in the begin method should be reset. After this event has
|
||||||
|
been processed, the request and response objects, as well as all their dependent
|
||||||
|
objects will be recycled and used to process other requests. End will also be
|
||||||
|
called when data is available and the end of file is reached on the request input
|
||||||
|
(this usually indicates the client has pipelined a request).</li>
|
||||||
|
<li>EventType.ERROR: Error will be called by the container in the case where an IO exception
|
||||||
|
or a similar unrecoverable error occurs on the connection. Fields that have
|
||||||
|
been initialized in the begin method should be reset. After this event has
|
||||||
|
been processed, the request and response objects, as well as all their dependent
|
||||||
|
objects will be recycled and used to process other requests.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
There are some event subtypes which allow finer processing of events (note: some of these
|
||||||
|
events require usage of the org.apache.catalina.valves.CometConnectionManagerValve valve):
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>EventSubType.TIMEOUT: The connection timed out (sub type of ERROR); note that this ERROR
|
||||||
|
type is not fatal, and the connection will not be closed unless the servlet uses the close
|
||||||
|
method of the event.
|
||||||
|
</li>
|
||||||
|
<li>EventSubType.CLIENT_DISCONNECT: The client connection was closed (sub type of ERROR).
|
||||||
|
</li>
|
||||||
|
<li>EventSubType.IOEXCEPTION: An IO exception occurred, such as invalid content, for example,
|
||||||
|
an invalid chunk block (sub type of ERROR).
|
||||||
|
</li>
|
||||||
|
<li>EventSubType.WEBAPP_RELOAD: The web application is being reloaded (sub type of END).
|
||||||
|
</li>
|
||||||
|
<li>EventSubType.SESSION_END: The servlet ended the session (sub type of END).
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
As described above, the typical lifecycle of a Comet request will consist in a series of
|
||||||
|
events such as: BEGIN -> READ -> READ -> READ -> ERROR/TIMEOUT. At any time, the servlet
|
||||||
|
may end processing of the request by using the close method of the event object.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="CometFilter">CometFilter</h4><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Similar to regular filters, a filter chain is invoked when comet events are processed.
|
||||||
|
These filters should implement the CometFilter interface (which works in the same way as
|
||||||
|
the regular Filter interface), and should be declared and mapped in the deployment
|
||||||
|
descriptor in the same way as a regular filter. The filter chain when processing an event
|
||||||
|
will only include filters which match all the usual mapping rules, and also implement
|
||||||
|
the CometFiler interface.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Example_code">Example code</h4><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The following pseudo code servlet implements asynchronous chat functionality using the API
|
||||||
|
described above:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="codeBox"><pre><code>public class ChatServlet
|
||||||
|
extends HttpServlet implements CometProcessor {
|
||||||
|
|
||||||
|
protected ArrayList<HttpServletResponse> connections =
|
||||||
|
new ArrayList<HttpServletResponse>();
|
||||||
|
protected MessageSender messageSender = null;
|
||||||
|
|
||||||
|
public void init() throws ServletException {
|
||||||
|
messageSender = new MessageSender();
|
||||||
|
Thread messageSenderThread =
|
||||||
|
new Thread(messageSender, "MessageSender[" + getServletContext().getContextPath() + "]");
|
||||||
|
messageSenderThread.setDaemon(true);
|
||||||
|
messageSenderThread.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void destroy() {
|
||||||
|
connections.clear();
|
||||||
|
messageSender.stop();
|
||||||
|
messageSender = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Process the given Comet event.
|
||||||
|
*
|
||||||
|
* @param event The Comet event that will be processed
|
||||||
|
* @throws IOException
|
||||||
|
* @throws ServletException
|
||||||
|
*/
|
||||||
|
public void event(CometEvent event)
|
||||||
|
throws IOException, ServletException {
|
||||||
|
HttpServletRequest request = event.getHttpServletRequest();
|
||||||
|
HttpServletResponse response = event.getHttpServletResponse();
|
||||||
|
if (event.getEventType() == CometEvent.EventType.BEGIN) {
|
||||||
|
log("Begin for session: " + request.getSession(true).getId());
|
||||||
|
PrintWriter writer = response.getWriter();
|
||||||
|
writer.println("<!DOCTYPE html>");
|
||||||
|
writer.println("<head><title>JSP Chat</title></head><body>");
|
||||||
|
writer.flush();
|
||||||
|
synchronized(connections) {
|
||||||
|
connections.add(response);
|
||||||
|
}
|
||||||
|
} else if (event.getEventType() == CometEvent.EventType.ERROR) {
|
||||||
|
log("Error for session: " + request.getSession(true).getId());
|
||||||
|
synchronized(connections) {
|
||||||
|
connections.remove(response);
|
||||||
|
}
|
||||||
|
event.close();
|
||||||
|
} else if (event.getEventType() == CometEvent.EventType.END) {
|
||||||
|
log("End for session: " + request.getSession(true).getId());
|
||||||
|
synchronized(connections) {
|
||||||
|
connections.remove(response);
|
||||||
|
}
|
||||||
|
PrintWriter writer = response.getWriter();
|
||||||
|
writer.println("</body></html>");
|
||||||
|
event.close();
|
||||||
|
} else if (event.getEventType() == CometEvent.EventType.READ) {
|
||||||
|
InputStream is = request.getInputStream();
|
||||||
|
byte[] buf = new byte[512];
|
||||||
|
do {
|
||||||
|
int n = is.read(buf); //can throw an IOException
|
||||||
|
if (n > 0) {
|
||||||
|
log("Read " + n + " bytes: " + new String(buf, 0, n)
|
||||||
|
+ " for session: " + request.getSession(true).getId());
|
||||||
|
} else if (n < 0) {
|
||||||
|
error(event, request, response);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} while (is.available() > 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class MessageSender implements Runnable {
|
||||||
|
|
||||||
|
protected boolean running = true;
|
||||||
|
protected ArrayList<String> messages = new ArrayList<String>();
|
||||||
|
|
||||||
|
public MessageSender() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stop() {
|
||||||
|
running = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add message for sending.
|
||||||
|
*/
|
||||||
|
public void send(String user, String message) {
|
||||||
|
synchronized (messages) {
|
||||||
|
messages.add("[" + user + "]: " + message);
|
||||||
|
messages.notify();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
|
||||||
|
while (running) {
|
||||||
|
|
||||||
|
if (messages.size() == 0) {
|
||||||
|
try {
|
||||||
|
synchronized (messages) {
|
||||||
|
messages.wait();
|
||||||
|
}
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
// Ignore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
synchronized (connections) {
|
||||||
|
String[] pendingMessages = null;
|
||||||
|
synchronized (messages) {
|
||||||
|
pendingMessages = messages.toArray(new String[0]);
|
||||||
|
messages.clear();
|
||||||
|
}
|
||||||
|
// Send any pending message on all the open connections
|
||||||
|
for (int i = 0; i < connections.size(); i++) {
|
||||||
|
try {
|
||||||
|
PrintWriter writer = connections.get(i).getWriter();
|
||||||
|
for (int j = 0; j < pendingMessages.length; j++) {
|
||||||
|
writer.println(pendingMessages[j] + "<br>");
|
||||||
|
}
|
||||||
|
writer.flush();
|
||||||
|
} catch (IOException e) {
|
||||||
|
log("IOExeption sending message", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}</code></pre></div>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
<div class="subsection"><h4 id="Comet_timeouts">Comet timeouts</h4><div class="text">
|
||||||
|
<p>If you are using the NIO connector, you can set individual timeouts for your different comet connections.
|
||||||
|
To set a timeout, simply set a request attribute like the following code shows:</p>
|
||||||
|
<div class="codeBox"><pre><code>CometEvent event.... event.setTimeout(30*1000);</code></pre></div>
|
||||||
|
<p>or</p>
|
||||||
|
<div class="codeBox"><pre><code>event.getHttpServletRequest().setAttribute("org.apache.tomcat.comet.timeout", new Integer(30 * 1000));</code></pre></div>
|
||||||
|
<p>
|
||||||
|
This sets the timeout to 30 seconds.
|
||||||
|
Important note: in order to set this timeout, it has to be done on the <code>BEGIN</code> event.
|
||||||
|
The default value is <code>soTimeout</code>
|
||||||
|
</p>
|
||||||
|
<p>If you are using the APR connector, all Comet connections will have the same timeout value. It is <code>soTimeout*50</code>
|
||||||
|
</p>
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><h3 id="Asynchronous_writes">Asynchronous writes</h3><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
When APR or NIO is enabled, Tomcat supports using sendfile to send large static files.
|
||||||
|
These writes, as soon as the system load increases, will be performed
|
||||||
|
asynchronously in the most efficient way. Instead of sending a large response using
|
||||||
|
blocking writes, it is possible to write content to a static file, and write it
|
||||||
|
using a sendfile code. A caching valve could take advantage of this to cache the
|
||||||
|
response data in a file rather than store it in memory. Sendfile support is
|
||||||
|
available if the request attribute <code>org.apache.tomcat.sendfile.support</code>
|
||||||
|
is set to <code>Boolean.TRUE</code>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Any servlet can instruct Tomcat to perform a sendfile call by setting the appropriate
|
||||||
|
request attributes. It is also necessary to correctly set the content length
|
||||||
|
for the response. When using sendfile, it is best to ensure that neither the
|
||||||
|
request or response have been wrapped, since as the response body will be sent later
|
||||||
|
by the connector itself, it cannot be filtered. Other than setting the 3 needed
|
||||||
|
request attributes, the servlet should not send any response data, but it may use
|
||||||
|
any method which will result in modifying the response header (like setting cookies).
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><code>org.apache.tomcat.sendfile.filename</code>: Canonical filename of the file which will be sent as
|
||||||
|
a String</li>
|
||||||
|
<li><code>org.apache.tomcat.sendfile.start</code>: Start offset as a Long</li>
|
||||||
|
<li><code>org.apache.tomcat.sendfile.end</code>: End offset as a Long</li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
In addition to setting these parameters it is necessary to set the content-length header.
|
||||||
|
Tomcat will not do that for you, since you may have already written data to the output stream.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Note that the use of sendfile will disable any compression that Tomcat may
|
||||||
|
otherwise have performed on the response.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="./comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,34 @@
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<title>API docs</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
Tomcat's internal javadoc is not installed by default. Download and install
|
||||||
|
the "fulldocs" package to get it.
|
||||||
|
|
||||||
|
You can also access the javadoc online in the Tomcat
|
||||||
|
<a href="https://tomcat.apache.org/tomcat-8.0-doc/">
|
||||||
|
documentation bundle</a>.
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,508 @@
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
General purpose build script for web applications and web services,
|
||||||
|
including enhanced support for deploying directly to a Tomcat
|
||||||
|
based server.
|
||||||
|
|
||||||
|
This build script assumes that the source code of your web application
|
||||||
|
is organized into the following subdirectories underneath the source
|
||||||
|
code directory from which you execute the build script:
|
||||||
|
|
||||||
|
docs Static documentation files to be copied to
|
||||||
|
the "docs" subdirectory of your distribution.
|
||||||
|
|
||||||
|
src Java source code (and associated resource files)
|
||||||
|
to be compiled to the "WEB-INF/classes"
|
||||||
|
subdirectory of your web application.
|
||||||
|
|
||||||
|
web Static HTML, JSP, and other content (such as
|
||||||
|
image files), including the WEB-INF subdirectory
|
||||||
|
and its configuration file contents.
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
<!-- A "project" describes a set of targets that may be requested
|
||||||
|
when Ant is executed. The "default" attribute defines the
|
||||||
|
target which is executed if no specific target is requested,
|
||||||
|
and the "basedir" attribute defines the current working directory
|
||||||
|
from which Ant executes the requested task. This is normally
|
||||||
|
set to the current working directory.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<project name="My Project" default="compile" basedir=".">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ===================== Property Definitions =========================== -->
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
Each of the following properties are used in the build script.
|
||||||
|
Values for these properties are set by the first place they are
|
||||||
|
defined, from the following list:
|
||||||
|
|
||||||
|
* Definitions on the "ant" command line (ant -Dfoo=bar compile).
|
||||||
|
|
||||||
|
* Definitions from a "build.properties" file in the top level
|
||||||
|
source directory of this application.
|
||||||
|
|
||||||
|
* Definitions from a "build.properties" file in the developer's
|
||||||
|
home directory.
|
||||||
|
|
||||||
|
* Default definitions in this build.xml file.
|
||||||
|
|
||||||
|
You will note below that property values can be composed based on the
|
||||||
|
contents of previously defined properties. This is a powerful technique
|
||||||
|
that helps you minimize the number of changes required when your development
|
||||||
|
environment is modified. Note that property composition is allowed within
|
||||||
|
"build.properties" files as well as in the "build.xml" script.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<property file="build.properties"/>
|
||||||
|
<property file="${user.home}/build.properties"/>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== File and Directory Names ======================== -->
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
These properties generally define file and directory names (or paths) that
|
||||||
|
affect where the build process stores its outputs.
|
||||||
|
|
||||||
|
app.name Base name of this application, used to
|
||||||
|
construct filenames and directories.
|
||||||
|
Defaults to "myapp".
|
||||||
|
|
||||||
|
app.path Context path to which this application should be
|
||||||
|
deployed (defaults to "/" plus the value of the
|
||||||
|
"app.name" property).
|
||||||
|
|
||||||
|
app.version Version number of this iteration of the application.
|
||||||
|
|
||||||
|
build.home The directory into which the "prepare" and
|
||||||
|
"compile" targets will generate their output.
|
||||||
|
Defaults to "build".
|
||||||
|
|
||||||
|
catalina.home The directory in which you have installed
|
||||||
|
a binary distribution of Tomcat. This will
|
||||||
|
be used by the "deploy" target.
|
||||||
|
|
||||||
|
dist.home The name of the base directory in which
|
||||||
|
distribution files are created.
|
||||||
|
Defaults to "dist".
|
||||||
|
|
||||||
|
manager.password The login password of a user that is assigned the
|
||||||
|
"manager-script" role (so that he or she can execute
|
||||||
|
commands via the "/manager" web application)
|
||||||
|
|
||||||
|
manager.url The URL of the "/manager" web application on the
|
||||||
|
Tomcat installation to which we will deploy web
|
||||||
|
applications and web services.
|
||||||
|
|
||||||
|
manager.username The login username of a user that is assigned the
|
||||||
|
"manager-script" role (so that he or she can execute
|
||||||
|
commands via the "/manager" web application)
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<property name="app.name" value="myapp"/>
|
||||||
|
<property name="app.path" value="/${app.name}"/>
|
||||||
|
<property name="app.version" value="0.1-dev"/>
|
||||||
|
<property name="build.home" value="${basedir}/build"/>
|
||||||
|
<property name="catalina.home" value="../../../.."/> <!-- UPDATE THIS! -->
|
||||||
|
<property name="dist.home" value="${basedir}/dist"/>
|
||||||
|
<property name="docs.home" value="${basedir}/docs"/>
|
||||||
|
<property name="manager.url" value="http://localhost:8080/manager/text"/>
|
||||||
|
<property name="src.home" value="${basedir}/src"/>
|
||||||
|
<property name="web.home" value="${basedir}/web"/>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== External Dependencies =========================== -->
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
Use property values to define the locations of external JAR files on which
|
||||||
|
your application will depend. In general, these values will be used for
|
||||||
|
two purposes:
|
||||||
|
* Inclusion on the classpath that is passed to the Javac compiler
|
||||||
|
* Being copied into the "/WEB-INF/lib" directory during execution
|
||||||
|
of the "deploy" target.
|
||||||
|
|
||||||
|
Because we will automatically include all of the Java classes that Tomcat
|
||||||
|
exposes to web applications, we will not need to explicitly list any of those
|
||||||
|
dependencies. You only need to worry about external dependencies for JAR
|
||||||
|
files that you are going to include inside your "/WEB-INF/lib" directory.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Dummy external dependency -->
|
||||||
|
<!--
|
||||||
|
<property name="foo.jar"
|
||||||
|
value="/path/to/foo.jar"/>
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== Compilation Classpath =========================== -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
Rather than relying on the CLASSPATH environment variable, Ant includes
|
||||||
|
features that makes it easy to dynamically construct the classpath you
|
||||||
|
need for each compilation. The example below constructs the compile
|
||||||
|
classpath to include the servlet.jar file, as well as the other components
|
||||||
|
that Tomcat makes available to web applications automatically, plus anything
|
||||||
|
that you explicitly added.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<path id="compile.classpath">
|
||||||
|
|
||||||
|
<!-- Include all JAR files that will be included in /WEB-INF/lib -->
|
||||||
|
<!-- *** CUSTOMIZE HERE AS REQUIRED BY YOUR APPLICATION *** -->
|
||||||
|
<!--
|
||||||
|
<pathelement location="${foo.jar}"/>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Include all elements that Tomcat exposes to applications -->
|
||||||
|
<fileset dir="${catalina.home}/bin">
|
||||||
|
<include name="*.jar"/>
|
||||||
|
</fileset>
|
||||||
|
<pathelement location="${catalina.home}/lib"/>
|
||||||
|
<fileset dir="${catalina.home}/lib">
|
||||||
|
<include name="*.jar"/>
|
||||||
|
</fileset>
|
||||||
|
|
||||||
|
</path>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ================== Custom Ant Task Definitions ======================= -->
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
These properties define custom tasks for the Ant build tool that interact
|
||||||
|
with the "/manager" web application installed with Tomcat. Before they
|
||||||
|
can be successfully utilized, you must perform the following steps:
|
||||||
|
|
||||||
|
- Copy the file "lib/catalina-ant.jar" from your Tomcat
|
||||||
|
installation into the "lib" directory of your Ant installation.
|
||||||
|
|
||||||
|
- Create a "build.properties" file in your application's top-level
|
||||||
|
source directory (or your user login home directory) that defines
|
||||||
|
appropriate values for the "manager.password", "manager.url", and
|
||||||
|
"manager.username" properties described above.
|
||||||
|
|
||||||
|
For more information about the Manager web application, and the functionality
|
||||||
|
of these tasks, see <http://localhost:8080/tomcat-docs/manager-howto.html>.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<taskdef resource="org/apache/catalina/ant/catalina.tasks"
|
||||||
|
classpathref="compile.classpath"/>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== Compilation Control Options ==================== -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
These properties control option settings on the Javac compiler when it
|
||||||
|
is invoked using the <javac> task.
|
||||||
|
|
||||||
|
compile.debug Should compilation include the debug option?
|
||||||
|
|
||||||
|
compile.deprecation Should compilation include the deprecation option?
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<property name="compile.debug" value="true"/>
|
||||||
|
<property name="compile.deprecation" value="false"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== All Target ====================================== -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
The "all" target is a shortcut for running the "clean" target followed
|
||||||
|
by the "compile" target, to force a complete recompile.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<target name="all" depends="clean,compile"
|
||||||
|
description="Clean build and dist directories, then compile"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== Clean Target ==================================== -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
The "clean" target deletes any previous "build" and "dist" directory,
|
||||||
|
so that you can be ensured the application can be built from scratch.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<target name="clean"
|
||||||
|
description="Delete old build and dist directories">
|
||||||
|
<delete dir="${build.home}"/>
|
||||||
|
<delete dir="${dist.home}"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== Compile Target ================================== -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
The "compile" target transforms source files (from your "src" directory)
|
||||||
|
into object files in the appropriate location in the build directory.
|
||||||
|
This example assumes that you will be including your classes in an
|
||||||
|
unpacked directory hierarchy under "/WEB-INF/classes".
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<target name="compile" depends="prepare"
|
||||||
|
description="Compile Java sources">
|
||||||
|
|
||||||
|
<!-- Compile Java classes as necessary -->
|
||||||
|
<mkdir dir="${build.home}/WEB-INF/classes"/>
|
||||||
|
<javac srcdir="${src.home}"
|
||||||
|
destdir="${build.home}/WEB-INF/classes"
|
||||||
|
debug="${compile.debug}"
|
||||||
|
deprecation="${compile.deprecation}">
|
||||||
|
<classpath refid="compile.classpath"/>
|
||||||
|
</javac>
|
||||||
|
|
||||||
|
<!-- Copy application resources -->
|
||||||
|
<copy todir="${build.home}/WEB-INF/classes">
|
||||||
|
<fileset dir="${src.home}" excludes="**/*.java"/>
|
||||||
|
</copy>
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== Dist Target ===================================== -->
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
The "dist" target creates a binary distribution of your application
|
||||||
|
in a directory structure ready to be archived in a tar.gz or zip file.
|
||||||
|
Note that this target depends on two others:
|
||||||
|
|
||||||
|
* "compile" so that the entire web application (including external
|
||||||
|
dependencies) will have been assembled
|
||||||
|
|
||||||
|
* "javadoc" so that the application Javadocs will have been created
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<target name="dist" depends="compile,javadoc"
|
||||||
|
description="Create binary distribution">
|
||||||
|
|
||||||
|
<!-- Copy documentation subdirectories -->
|
||||||
|
<mkdir dir="${dist.home}/docs"/>
|
||||||
|
<copy todir="${dist.home}/docs">
|
||||||
|
<fileset dir="${docs.home}"/>
|
||||||
|
</copy>
|
||||||
|
|
||||||
|
<!-- Create application JAR file -->
|
||||||
|
<jar jarfile="${dist.home}/${app.name}-${app.version}.war"
|
||||||
|
basedir="${build.home}"/>
|
||||||
|
|
||||||
|
<!-- Copy additional files to ${dist.home} as necessary -->
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== Install Target ================================== -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
The "install" target tells the specified Tomcat installation to dynamically
|
||||||
|
install this web application and make it available for execution. It does
|
||||||
|
*not* cause the existence of this web application to be remembered across
|
||||||
|
Tomcat restarts; if you restart the server, you will need to re-install all
|
||||||
|
this web application.
|
||||||
|
|
||||||
|
If you have already installed this application, and simply want Tomcat to
|
||||||
|
recognize that you have updated Java classes (or the web.xml file), use the
|
||||||
|
"reload" target instead.
|
||||||
|
|
||||||
|
NOTE: This target will only succeed if it is run from the same server that
|
||||||
|
Tomcat is running on.
|
||||||
|
|
||||||
|
NOTE: This is the logical opposite of the "remove" target.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<target name="install" depends="compile"
|
||||||
|
description="Install application to servlet container">
|
||||||
|
|
||||||
|
<deploy url="${manager.url}"
|
||||||
|
username="${manager.username}"
|
||||||
|
password="${manager.password}"
|
||||||
|
path="${app.path}"
|
||||||
|
localWar="file://${build.home}"/>
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== Javadoc Target ================================== -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
The "javadoc" target creates Javadoc API documentation for the Java
|
||||||
|
classes included in your application. Normally, this is only required
|
||||||
|
when preparing a distribution release, but is available as a separate
|
||||||
|
target in case the developer wants to create Javadocs independently.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<target name="javadoc" depends="compile"
|
||||||
|
description="Create Javadoc API documentation">
|
||||||
|
|
||||||
|
<mkdir dir="${dist.home}/docs/api"/>
|
||||||
|
<javadoc sourcepath="${src.home}"
|
||||||
|
destdir="${dist.home}/docs/api"
|
||||||
|
packagenames="*">
|
||||||
|
<classpath refid="compile.classpath"/>
|
||||||
|
</javadoc>
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ====================== List Target =================================== -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
The "list" target asks the specified Tomcat installation to list the
|
||||||
|
currently running web applications, either loaded at startup time or
|
||||||
|
installed dynamically. It is useful to determine whether or not the
|
||||||
|
application you are currently developing has been installed.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<target name="list"
|
||||||
|
description="List installed applications on servlet container">
|
||||||
|
|
||||||
|
<list url="${manager.url}"
|
||||||
|
username="${manager.username}"
|
||||||
|
password="${manager.password}"/>
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== Prepare Target ================================== -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
The "prepare" target is used to create the "build" destination directory,
|
||||||
|
and copy the static contents of your web application to it. If you need
|
||||||
|
to copy static files from external dependencies, you can customize the
|
||||||
|
contents of this task.
|
||||||
|
|
||||||
|
Normally, this task is executed indirectly when needed.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<target name="prepare">
|
||||||
|
|
||||||
|
<!-- Create build directories as needed -->
|
||||||
|
<mkdir dir="${build.home}"/>
|
||||||
|
<mkdir dir="${build.home}/WEB-INF"/>
|
||||||
|
<mkdir dir="${build.home}/WEB-INF/classes"/>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Copy static content of this web application -->
|
||||||
|
<copy todir="${build.home}">
|
||||||
|
<fileset dir="${web.home}"/>
|
||||||
|
</copy>
|
||||||
|
|
||||||
|
<!-- Copy external dependencies as required -->
|
||||||
|
<!-- *** CUSTOMIZE HERE AS REQUIRED BY YOUR APPLICATION *** -->
|
||||||
|
<mkdir dir="${build.home}/WEB-INF/lib"/>
|
||||||
|
<!--
|
||||||
|
<copy todir="${build.home}/WEB-INF/lib" file="${foo.jar}"/>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Copy static files from external dependencies as needed -->
|
||||||
|
<!-- *** CUSTOMIZE HERE AS REQUIRED BY YOUR APPLICATION *** -->
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== Reload Target =================================== -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
The "reload" signals the specified application Tomcat to shut itself down
|
||||||
|
and reload. This can be useful when the web application context is not
|
||||||
|
reloadable and you have updated classes or property files in the
|
||||||
|
/WEB-INF/classes directory or when you have added or updated jar files in the
|
||||||
|
/WEB-INF/lib directory.
|
||||||
|
|
||||||
|
NOTE: The /WEB-INF/web.xml web application configuration file is not reread
|
||||||
|
on a reload. If you have made changes to your web.xml file you must stop
|
||||||
|
then start the web application.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<target name="reload" depends="compile"
|
||||||
|
description="Reload application on servlet container">
|
||||||
|
|
||||||
|
<reload url="${manager.url}"
|
||||||
|
username="${manager.username}"
|
||||||
|
password="${manager.password}"
|
||||||
|
path="${app.path}"/>
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== Remove Target =================================== -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
The "remove" target tells the specified Tomcat installation to dynamically
|
||||||
|
remove this web application from service.
|
||||||
|
|
||||||
|
NOTE: This is the logical opposite of the "install" target.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<target name="remove"
|
||||||
|
description="Remove application on servlet container">
|
||||||
|
|
||||||
|
<undeploy url="${manager.url}"
|
||||||
|
username="${manager.username}"
|
||||||
|
password="${manager.password}"
|
||||||
|
path="${app.path}"/>
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,244 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Application Developer's Guide (8.0.53) - Deployment</title><meta name="author" content="Craig R. McClanahan"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/appdev/deployment">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Application Developer's Guide</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">App Dev Guide Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Contents</h2><ul><li><a href="index.html">Contents</a></li><li><a href="introduction.html">Introduction</a></li><li><a href="installation.html">Installation</a></li><li><a href="deployment.html">Deployment</a></li><li><a href="source.html">Source Code</a></li><li><a href="processes.html">Processes</a></li><li><a href="sample/">Example App</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Deployment</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Background">Background</a></li><li><a href="#Standard_Directory_Layout">Standard Directory Layout</a></li><li><a href="#Shared_Library_Files">Shared Library Files</a></li><li><a href="#Web_Application_Deployment_Descriptor">Web Application Deployment Descriptor</a></li><li><a href="#Tomcat_Context_Descriptor">Tomcat Context Descriptor</a></li><li><a href="#Deployment_With_Tomcat">Deployment With Tomcat</a></li></ul>
|
||||||
|
</div><h3 id="Background">Background</h3><div class="text">
|
||||||
|
|
||||||
|
<p>Before describing how to organize your source code directories,
|
||||||
|
it is useful to examine the runtime organization of a web application.
|
||||||
|
Prior to the Servlet API Specification, version 2.2, there was little
|
||||||
|
consistency between server platforms. However, servers that conform
|
||||||
|
to the 2.2 (or later) specification are required to accept a
|
||||||
|
<em>Web Application Archive</em> in a standard format, which is discussed
|
||||||
|
further below.</p>
|
||||||
|
|
||||||
|
<p>A web application is defined as a hierarchy of directories and files
|
||||||
|
in a standard layout. Such a hierarchy can be accessed in its "unpacked"
|
||||||
|
form, where each directory and file exists in the filesystem separately,
|
||||||
|
or in a "packed" form known as a Web ARchive, or WAR file. The former format
|
||||||
|
is more useful during development, while the latter is used when you
|
||||||
|
distribute your application to be installed.</p>
|
||||||
|
|
||||||
|
<p>The top-level directory of your web application hierarchy is also the
|
||||||
|
<em>document root</em> of your application. Here, you will place the HTML
|
||||||
|
files and JSP pages that comprise your application's user interface. When the
|
||||||
|
system administrator deploys your application into a particular server, he
|
||||||
|
or she assigns a <em>context path</em> to your application (a later section
|
||||||
|
of this manual describes deployment on Tomcat). Thus, if the
|
||||||
|
system administrator assigns your application to the context path
|
||||||
|
<code>/catalog</code>, then a request URI referring to
|
||||||
|
<code>/catalog/index.html</code> will retrieve the <code>index.html</code>
|
||||||
|
file from your document root.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Standard_Directory_Layout">Standard Directory Layout</h3><div class="text">
|
||||||
|
|
||||||
|
<p>To facilitate creation of a Web Application Archive file in the required
|
||||||
|
format, it is convenient to arrange the "executable" files of your web
|
||||||
|
application (that is, the files that Tomcat actually uses when executing
|
||||||
|
your app) in the same organization as required by the WAR format itself.
|
||||||
|
To do this, you will end up with the following contents in your
|
||||||
|
application's "document root" directory:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>*.html, *.jsp, etc.</strong> - The HTML and JSP pages, along
|
||||||
|
with other files that must be visible to the client browser (such as
|
||||||
|
JavaScript, stylesheet files, and images) for your application.
|
||||||
|
In larger applications you may choose to divide these files into
|
||||||
|
a subdirectory hierarchy, but for smaller apps, it is generally
|
||||||
|
much simpler to maintain only a single directory for these files.
|
||||||
|
<br><br></li>
|
||||||
|
<li><strong>/WEB-INF/web.xml</strong> - The <em>Web Application Deployment
|
||||||
|
Descriptor</em> for your application. This is an XML file describing
|
||||||
|
the servlets and other components that make up your application,
|
||||||
|
along with any initialization parameters and container-managed
|
||||||
|
security constraints that you want the server to enforce for you.
|
||||||
|
This file is discussed in more detail in the following subsection.
|
||||||
|
<br><br></li>
|
||||||
|
<li><strong>/WEB-INF/classes/</strong> - This directory contains any Java
|
||||||
|
class files (and associated resources) required for your application,
|
||||||
|
including both servlet and non-servlet classes, that are not combined
|
||||||
|
into JAR files. If your classes are organized into Java packages,
|
||||||
|
you must reflect this in the directory hierarchy under
|
||||||
|
<code>/WEB-INF/classes/</code>. For example, a Java class named
|
||||||
|
<code>com.mycompany.mypackage.MyServlet</code>
|
||||||
|
would need to be stored in a file named
|
||||||
|
<code>/WEB-INF/classes/com/mycompany/mypackage/MyServlet.class</code>.
|
||||||
|
<br><br></li>
|
||||||
|
<li><strong>/WEB-INF/lib/</strong> - This directory contains JAR files that
|
||||||
|
contain Java class files (and associated resources) required for your
|
||||||
|
application, such as third party class libraries or JDBC drivers.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>When you install an application into Tomcat (or any other 2.2 or later
|
||||||
|
Servlet container), the classes in the <code>WEB-INF/classes/</code>
|
||||||
|
directory, as well as all classes in JAR files found in the
|
||||||
|
<code>WEB-INF/lib/</code> directory, are made visible to other classes
|
||||||
|
within your particular web application. Thus, if
|
||||||
|
you include all of the required library classes in one of these places (be
|
||||||
|
sure to check licenses for redistribution rights for any third party libraries
|
||||||
|
you utilize), you will simplify the installation of your web application --
|
||||||
|
no adjustment to the system class path (or installation of global library
|
||||||
|
files in your server) will be necessary.</p>
|
||||||
|
|
||||||
|
<p>Much of this information was extracted from Chapter 9 of the Servlet
|
||||||
|
API Specification, version 2.3, which you should consult for more details.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Shared_Library_Files">Shared Library Files</h3><div class="text">
|
||||||
|
|
||||||
|
<p>Like most servlet containers, Tomcat also supports mechanisms to install
|
||||||
|
library JAR files (or unpacked classes) once, and make them visible to all
|
||||||
|
installed web applications (without having to be included inside the web
|
||||||
|
application itself). The details of how Tomcat locates and shares such
|
||||||
|
classes are described in the
|
||||||
|
<a href="../class-loader-howto.html">Class Loader HOW-TO</a> documentation.
|
||||||
|
The location commonly used within a Tomcat installation for shared code is
|
||||||
|
<strong>$CATALINA_HOME/lib</strong>. JAR files placed here are visible both to
|
||||||
|
web applications and internal Tomcat code. This is a good place to put JDBC
|
||||||
|
drivers that are required for both your application or internal Tomcat use
|
||||||
|
(such as for a JDBCRealm).</p>
|
||||||
|
|
||||||
|
<p>Out of the box, a standard Tomcat installation includes a variety
|
||||||
|
of pre-installed shared library files, including:</p>
|
||||||
|
<ul>
|
||||||
|
<li>The <em>Servlet 3.1</em> and <em>JSP 2.3</em> APIs that are fundamental
|
||||||
|
to writing servlets and JavaServer Pages.<br><br></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Web_Application_Deployment_Descriptor">Web Application Deployment Descriptor</h3><div class="text">
|
||||||
|
|
||||||
|
<p>As mentioned above, the <code>/WEB-INF/web.xml</code> file contains the
|
||||||
|
Web Application Deployment Descriptor for your application. As the filename
|
||||||
|
extension implies, this file is an XML document, and defines everything about
|
||||||
|
your application that a server needs to know (except the <em>context path</em>,
|
||||||
|
which is assigned by the system administrator when the application is
|
||||||
|
deployed).</p>
|
||||||
|
|
||||||
|
<p>The complete syntax and semantics for the deployment descriptor is defined
|
||||||
|
in Chapter 13 of the Servlet API Specification, version 2.3. Over time, it
|
||||||
|
is expected that development tools will be provided that create and edit the
|
||||||
|
deployment descriptor for you. In the meantime, to provide a starting point,
|
||||||
|
a <a href="web.xml.txt" target="_blank">basic web.xml file</a>
|
||||||
|
is provided. This file includes comments that describe the purpose of each
|
||||||
|
included element.</p>
|
||||||
|
|
||||||
|
<p><strong>NOTE</strong> - The Servlet Specification includes a Document
|
||||||
|
Type Descriptor (DTD) for the web application deployment descriptor, and
|
||||||
|
Tomcat enforces the rules defined here when processing your application's
|
||||||
|
<code>/WEB-INF/web.xml</code> file. In particular, you <strong>must</strong>
|
||||||
|
enter your descriptor elements (such as <code><filter></code>,
|
||||||
|
<code><servlet></code>, and <code><servlet-mapping></code> in
|
||||||
|
the order defined by the DTD (see Section 13.3).</p>
|
||||||
|
|
||||||
|
</div><h3 id="Tomcat_Context_Descriptor">Tomcat Context Descriptor</h3><div class="text">
|
||||||
|
|
||||||
|
<p>A /META-INF/context.xml file can be used to define Tomcat specific
|
||||||
|
configuration options, such as an access log, data sources, session manager
|
||||||
|
configuration and more. This XML file must contain one Context element, which
|
||||||
|
will be considered as if it was the child of the Host element corresponding
|
||||||
|
to the Host to which the web application is being deployed. The
|
||||||
|
<a href="../config/context.html">Tomcat configuration documentation</a> contains
|
||||||
|
information on the Context element.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Deployment_With_Tomcat">Deployment With Tomcat</h3><div class="text">
|
||||||
|
|
||||||
|
<p><em>The description below uses the variable name $CATALINA_BASE to refer the
|
||||||
|
base directory against which most relative paths are resolved. If you have
|
||||||
|
not configured Tomcat for multiple instances by setting a CATALINA_BASE
|
||||||
|
directory, then $CATALINA_BASE will be set to the value of $CATALINA_HOME,
|
||||||
|
the directory into which you have installed Tomcat.</em></p>
|
||||||
|
|
||||||
|
<p>In order to be executed, a web application must be deployed on
|
||||||
|
a servlet container. This is true even during development.
|
||||||
|
We will describe using Tomcat to provide the execution environment.
|
||||||
|
A web application can be deployed in Tomcat by one of the following
|
||||||
|
approaches:</p>
|
||||||
|
<ul>
|
||||||
|
<li><em>Copy unpacked directory hierarchy into a subdirectory in directory
|
||||||
|
<code>$CATALINA_BASE/webapps/</code></em>. Tomcat will assign a
|
||||||
|
context path to your application based on the subdirectory name you
|
||||||
|
choose. We will use this technique in the <code>build.xml</code>
|
||||||
|
file that we construct, because it is the quickest and easiest approach
|
||||||
|
during development. Be sure to restart Tomcat after installing or
|
||||||
|
updating your application.
|
||||||
|
<br><br></li>
|
||||||
|
<li><em>Copy the web application archive file into directory
|
||||||
|
<code>$CATALINA_BASE/webapps/</code></em>. When Tomcat is started, it will
|
||||||
|
automatically expand the web application archive file into its unpacked
|
||||||
|
form, and execute the application that way. This approach would typically
|
||||||
|
be used to install an additional application, provided by a third party
|
||||||
|
vendor or by your internal development staff, into an existing
|
||||||
|
Tomcat installation. <strong>NOTE</strong> - If you use this approach,
|
||||||
|
and wish to update your application later, you must both replace the
|
||||||
|
web application archive file <strong>AND</strong> delete the expanded
|
||||||
|
directory that Tomcat created, and then restart Tomcat, in order to reflect
|
||||||
|
your changes.
|
||||||
|
<br><br></li>
|
||||||
|
<li><em>Use the Tomcat "Manager" web application to deploy and undeploy
|
||||||
|
web applications</em>. Tomcat includes a web application, deployed
|
||||||
|
by default on context path <code>/manager</code>, that allows you to
|
||||||
|
deploy and undeploy applications on a running Tomcat server without
|
||||||
|
restarting it. See <a href="../manager-howto.html">Manager App HOW-TO</a>
|
||||||
|
for more information on using the Manager web application.<br><br></li>
|
||||||
|
<li><em>Use "Manager" Ant Tasks In Your Build Script</em>. Tomcat
|
||||||
|
includes a set of custom task definitions for the <code>Ant</code>
|
||||||
|
build tool that allow you to automate the execution of commands to the
|
||||||
|
"Manager" web application. These tasks are used in the Tomcat deployer.
|
||||||
|
<br><br></li>
|
||||||
|
<li><em>Use the Tomcat Deployer</em>. Tomcat includes a packaged tool
|
||||||
|
bundling the Ant tasks, and can be used to automatically precompile JSPs
|
||||||
|
which are part of the web application before deployment to the server.
|
||||||
|
<br><br></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Deploying your app on other servlet containers will be specific to each
|
||||||
|
container, but all containers compatible with the Servlet API Specification
|
||||||
|
(version 2.2 or later) are required to accept a web application archive file.
|
||||||
|
Note that other containers are <strong>NOT</strong> required to accept an
|
||||||
|
unpacked directory structure (as Tomcat does), or to provide mechanisms for
|
||||||
|
shared library files, but these features are commonly available.</p>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,87 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Application Developer's Guide (8.0.53) - Table of Contents</title><meta name="author" content="Craig R. McClanahan"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/appdev/index">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Application Developer's Guide</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">App Dev Guide Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Contents</h2><ul><li><a href="index.html">Contents</a></li><li><a href="introduction.html">Introduction</a></li><li><a href="installation.html">Installation</a></li><li><a href="deployment.html">Deployment</a></li><li><a href="source.html">Source Code</a></li><li><a href="processes.html">Processes</a></li><li><a href="sample/">Example App</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Table of Contents</h2><h3 id="Preface">Preface</h3><div class="text">
|
||||||
|
|
||||||
|
<p>This manual includes contributions from many members of the Tomcat Project
|
||||||
|
developer community. The following authors have provided significant content:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>Craig R. McClanahan
|
||||||
|
(<a href="mailto:craigmcc@apache.org">craigmcc@apache.org</a>)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
|
||||||
|
<p>The information presented is divided into the following sections:</p>
|
||||||
|
<ul>
|
||||||
|
<li><a href="introduction.html"><strong>Introduction</strong></a> -
|
||||||
|
Briefly describes the information covered here, with
|
||||||
|
links and references to other sources of information.</li>
|
||||||
|
<li><a href="installation.html"><strong>Installation</strong></a> -
|
||||||
|
Covers acquiring and installing the required software
|
||||||
|
components to use Tomcat for web application development.</li>
|
||||||
|
<li><a href="deployment.html"><strong>Deployment Organization</strong></a> -
|
||||||
|
Discusses the standard directory layout for a web application
|
||||||
|
(defined in the Servlet API Specification), the Web Application
|
||||||
|
Deployment Descriptor, and options for integration with Tomcat
|
||||||
|
in your development environment.</li>
|
||||||
|
<li><a href="source.html"><strong>Source Organization</strong></a> -
|
||||||
|
Describes a useful approach to organizing the source code
|
||||||
|
directories for your project, and introduces the
|
||||||
|
<code>build.xml</code> used by Ant to manage compilation.</li>
|
||||||
|
<li><a href="processes.html"><strong>Development Processes</strong></a> -
|
||||||
|
Provides brief descriptions of typical development processes
|
||||||
|
utilizing the recommended deployment and source organizations.</li>
|
||||||
|
<li><a href="sample/" target="_blank"><strong>Example Application</strong></a> -
|
||||||
|
This directory contains a very simple, but functionally complete,
|
||||||
|
"Hello, World" application built according to the principles
|
||||||
|
described in this manual. You can use this application to
|
||||||
|
practice using the described techniques.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,115 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Application Developer's Guide (8.0.53) - Installation</title><meta name="author" content="Craig R. McClanahan"><meta name="author" content="Yoav Shapira"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/appdev/installation">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Application Developer's Guide</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">App Dev Guide Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Contents</h2><ul><li><a href="index.html">Contents</a></li><li><a href="introduction.html">Introduction</a></li><li><a href="installation.html">Installation</a></li><li><a href="deployment.html">Deployment</a></li><li><a href="source.html">Source Code</a></li><li><a href="processes.html">Processes</a></li><li><a href="sample/">Example App</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Installation</h2><h3 id="Installation">Installation</h3><div class="text">
|
||||||
|
|
||||||
|
<p>In order to use Tomcat for developing web applications, you must first
|
||||||
|
install it (and the software it depends on). The required steps are outlined
|
||||||
|
in the following subsections.</p>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="JDK">JDK</h4><div class="text">
|
||||||
|
|
||||||
|
<p>Tomcat 8.0 was designed to run on Java SE 7.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>Compatible JDKs for many platforms (or links to where they can be found)
|
||||||
|
are available at
|
||||||
|
<a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">http://www.oracle.com/technetwork/java/javase/downloads/index.html</a>.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Tomcat">Tomcat</h4><div class="text">
|
||||||
|
|
||||||
|
<p>Binary downloads of the <strong>Tomcat</strong> server are available from
|
||||||
|
<a href="https://tomcat.apache.org/">https://tomcat.apache.org/</a>.
|
||||||
|
This manual assumes you are using the most recent release
|
||||||
|
of Tomcat 8. Detailed instructions for downloading and installing
|
||||||
|
Tomcat are available <a href="../setup.html">here</a>.</p>
|
||||||
|
|
||||||
|
<p>In the remainder of this manual, example shell scripts assume that you have
|
||||||
|
set an environment variable <code>CATALINA_HOME</code> that contains the
|
||||||
|
pathname to the directory in which Tomcat has been installed. Optionally, if
|
||||||
|
Tomcat has been configured for multiple instances, each instance will have its
|
||||||
|
own <code>CATALINA_BASE</code> configured.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Ant">Ant</h4><div class="text">
|
||||||
|
|
||||||
|
<p>Binary downloads of the <strong>Ant</strong> build tool are available from
|
||||||
|
<a href="https://ant.apache.org/">https://ant.apache.org/</a>.
|
||||||
|
This manual assumes you are using Ant 1.8 or later. The instructions may
|
||||||
|
also be compatible with other versions, but this has not been tested.</p>
|
||||||
|
|
||||||
|
<p>Download and install Ant.
|
||||||
|
Then, add the <code>bin</code> directory of the Ant distribution to your
|
||||||
|
<code>PATH</code> environment variable, following the standard practices for
|
||||||
|
your operating system platform. Once you have done this, you will be able to
|
||||||
|
execute the <code>ant</code> shell command directly.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="CVS">CVS</h4><div class="text">
|
||||||
|
|
||||||
|
<p>Besides the required tools described above, you are strongly encouraged
|
||||||
|
to download and install a <em>source code control</em> system, such as the
|
||||||
|
<strong>Concurrent Version System</strong> (CVS), to maintain historical
|
||||||
|
versions of the source files that make up your web application. Besides
|
||||||
|
the server, you will also need appropriate client
|
||||||
|
tools to check out source code files, and check in modified versions.</p>
|
||||||
|
|
||||||
|
<p>Detailed instructions for installing and using source code control
|
||||||
|
applications is beyond the scope of this manual. However, CVS server and
|
||||||
|
client tools for many platforms (along with documentation) can be downloaded
|
||||||
|
from <a href="http://www.cvshome.org/">http://www.cvshome.org/</a>.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,100 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Application Developer's Guide (8.0.53) - Introduction</title><meta name="author" content="Craig R. McClanahan"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/appdev/introduction">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Application Developer's Guide</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">App Dev Guide Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Contents</h2><ul><li><a href="index.html">Contents</a></li><li><a href="introduction.html">Introduction</a></li><li><a href="installation.html">Installation</a></li><li><a href="deployment.html">Deployment</a></li><li><a href="source.html">Source Code</a></li><li><a href="processes.html">Processes</a></li><li><a href="sample/">Example App</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Introduction</h2><h3 id="Overview">Overview</h3><div class="text">
|
||||||
|
|
||||||
|
<p>Congratulations! You've decided to (or been told to) learn how to
|
||||||
|
build web applications using servlets and JSP pages, and picked the
|
||||||
|
Tomcat server to use for your learning and development. But now what
|
||||||
|
do you do?</p>
|
||||||
|
|
||||||
|
<p>This manual is a primer covering the basic steps of using Tomcat to
|
||||||
|
set up a development environment, organize your source code, and then
|
||||||
|
build and test your application. It does not discuss architectures or
|
||||||
|
recommended coding practices for web application development,
|
||||||
|
or provide in depth instructions on operating the development
|
||||||
|
tools that are discussed. References to sources of additional information
|
||||||
|
are included in the following subsections.</p>
|
||||||
|
|
||||||
|
<p>The discussion in this manual is aimed at developers who will be using
|
||||||
|
a text editor along with command line tools to develop and debug their
|
||||||
|
applications. As such, the recommendations are fairly generic – but you
|
||||||
|
should easily be able to apply them in either a Windows-based or Unix-based
|
||||||
|
development environment. If you are utilizing an Integrated Development
|
||||||
|
Environment (IDE) tool, you will need to adapt the advice given here to
|
||||||
|
the details of your particular environment.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Links">Links</h3><div class="text">
|
||||||
|
|
||||||
|
<p>The following links provide access to selected sources of online
|
||||||
|
information, documentation, and software that is useful in developing
|
||||||
|
web applications with Tomcat.</p>
|
||||||
|
<ul>
|
||||||
|
<li><p><a href="https://jcp.org/aboutJava/communityprocess/mrel/jsr245/index2.html">https://jcp.org/aboutJava/communityprocess/mrel/jsr245/index2.html</a> -
|
||||||
|
<i>JavaServer Pages (JSP) Specification, Version 2.3</i>. Describes
|
||||||
|
the programming environment provided by standard implementations
|
||||||
|
of the JavaServer Pages (JSP) technology. In conjunction with
|
||||||
|
the Servlet API Specification (see below), this document describes
|
||||||
|
what a portable API page is allowed to contain. Specific
|
||||||
|
information on scripting (Chapter 9), tag extensions (Chapter 7),
|
||||||
|
and packaging JSP pages (Appendix A) is useful. The Javadoc
|
||||||
|
API Documentation is included in the specification, and with the
|
||||||
|
Tomcat download.</p></li>
|
||||||
|
<li><p><a href="http://jcp.org/aboutJava/communityprocess/final/jsr340/index.html">http://jcp.org/aboutJava/communityprocess/final/jsr340/index.html</a> -
|
||||||
|
<i>Servlet API Specification, Version 3.1</i>. Describes the
|
||||||
|
programming environment that must be provided by all servlet
|
||||||
|
containers conforming to this specification. In particular, you
|
||||||
|
will need this document to understand the web application
|
||||||
|
directory structure and deployment file (Chapter 10), methods of
|
||||||
|
mapping request URIs to servlets (Chapter 12), container managed
|
||||||
|
security (Chapter 13), and the syntax of the <code>web.xml</code>
|
||||||
|
Web Application Deployment Descriptor (Chapter 14). The Javadoc
|
||||||
|
API Documentation is included in the specification, and with the
|
||||||
|
Tomcat download.</p></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,315 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Application Developer's Guide (8.0.53) - Development Processes</title><meta name="author" content="Craig R. McClanahan"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/appdev/processes">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Application Developer's Guide</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">App Dev Guide Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Contents</h2><ul><li><a href="index.html">Contents</a></li><li><a href="introduction.html">Introduction</a></li><li><a href="installation.html">Installation</a></li><li><a href="deployment.html">Deployment</a></li><li><a href="source.html">Source Code</a></li><li><a href="processes.html">Processes</a></li><li><a href="sample/">Example App</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Development Processes</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Development_Processes">Development Processes</a><ol><li><a href="#One-Time_Setup_of_Ant_and_Tomcat_for_Development">One-Time Setup of Ant and Tomcat for Development</a></li><li><a href="#Create_Project_Source_Code_Directory">Create Project Source Code Directory</a></li><li><a href="#Edit_Source_Code_and_Pages">Edit Source Code and Pages</a></li><li><a href="#Build_the_Web_Application">Build the Web Application</a></li><li><a href="#Test_Your_Web_Application">Test Your Web Application</a></li><li><a href="#Creating_a_Release">Creating a Release</a></li></ol></li></ul>
|
||||||
|
</div><h3 id="Development_Processes">Development Processes</h3><div class="text">
|
||||||
|
|
||||||
|
<p>Although application development can take many forms, this manual proposes
|
||||||
|
a fairly generic process for creating web applications using Tomcat. The
|
||||||
|
following sections highlight the commands and tasks that you, as the developer
|
||||||
|
of the code, will perform. The same basic approach works when you have
|
||||||
|
multiple programmers involved, as long as you have an appropriate source code
|
||||||
|
control system and internal team rules about who is working on what parts
|
||||||
|
of the application at any given time.</p>
|
||||||
|
|
||||||
|
<p>The task descriptions below assume that you will be using CVS for source
|
||||||
|
code control, and that you have already configured access to the appropriate
|
||||||
|
CVS repository. Instructions for doing this are beyond the scope of this
|
||||||
|
manual. If you are using a different source code control environment, you
|
||||||
|
will need to figure out the corresponding commands for your system.</p>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="One-Time_Setup_of_Ant_and_Tomcat_for_Development">One-Time Setup of Ant and Tomcat for Development</h4><div class="text">
|
||||||
|
|
||||||
|
<p>In order to take advantage of the special Ant tasks that interact with the
|
||||||
|
<em>Manager</em> web application, you need to perform the following tasks
|
||||||
|
once (no matter how many web applications you plan to develop).</p>
|
||||||
|
<ul>
|
||||||
|
<li><p><em>Configure the Ant custom tasks</em>. The implementation code for the
|
||||||
|
Ant custom tasks is in a JAR file named
|
||||||
|
<code>$CATALINA_HOME/lib/catalina-ant.jar</code>, which must be
|
||||||
|
copied in to the <code>lib</code> directory of your Ant installation.
|
||||||
|
</p></li>
|
||||||
|
<li><p><em>Define one or more Tomcat users</em>. The <em>Manager</em> web
|
||||||
|
application runs under a security constraint that requires a user to be
|
||||||
|
logged in, and have the security role <code>manager-script</code> assigned
|
||||||
|
to him or her. How such users are defined depends on which Realm you have
|
||||||
|
configured in Tomcat's <code>conf/server.xml</code> file -- see the
|
||||||
|
<a href="../realm-howto.html">Realm Configuration HOW-TO</a> for more
|
||||||
|
information. You may define any number of users (with any username
|
||||||
|
and password that you like) with the <code>manager-script</code> role.
|
||||||
|
</p></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Create_Project_Source_Code_Directory">Create Project Source Code Directory</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The first step is to create a new project source directory, and customize
|
||||||
|
the <code>build.xml</code> and <code>build.properties</code> files you will
|
||||||
|
be using. The directory structure is described in <a href="source.html">the
|
||||||
|
previous section</a>, or you can use the
|
||||||
|
<a href="sample/">sample application</a> as a starting point.</p>
|
||||||
|
|
||||||
|
<p>Create your project source directory, and define it within your CVS
|
||||||
|
repository. This might be done by a series of commands like this, where
|
||||||
|
<code>{project}</code> is the name under which your project should be
|
||||||
|
stored in the CVS repository, and {username} is your login username:</p>
|
||||||
|
<div class="codeBox"><pre><code>cd {my home directory}
|
||||||
|
mkdir myapp <-- Assumed "project source directory"
|
||||||
|
cd myapp
|
||||||
|
mkdir docs
|
||||||
|
mkdir src
|
||||||
|
mkdir web
|
||||||
|
mkdir web/WEB-INF
|
||||||
|
cvs import -m "Initial Project Creation" {project} \
|
||||||
|
{username} start</code></pre></div>
|
||||||
|
|
||||||
|
<p>Now, to verify that it was created correctly in CVS, we will perform a
|
||||||
|
checkout of the new project:</p>
|
||||||
|
<div class="codeBox"><pre><code>cd ..
|
||||||
|
mv myapp myapp.bu
|
||||||
|
cvs checkout {project}</code></pre></div>
|
||||||
|
|
||||||
|
<p>Next, you will need to create and check in an initial version of the
|
||||||
|
<code>build.xml</code> script to be used for development. For getting
|
||||||
|
started quickly and easily, base your <code>build.xml</code> on the
|
||||||
|
<a href="build.xml.txt">basic build.xml file</a>, included with this manual,
|
||||||
|
or code it from scratch.</p>
|
||||||
|
<div class="codeBox"><pre><code>cd {my home directory}
|
||||||
|
cd myapp
|
||||||
|
emacs build.xml <-- if you want a real editor :-)
|
||||||
|
cvs add build.xml
|
||||||
|
cvs commit</code></pre></div>
|
||||||
|
|
||||||
|
<p>Until you perform the CVS commit, your changes are local to your own
|
||||||
|
development directory. Committing makes those changes visible to other
|
||||||
|
developers on your team that are sharing the same CVS repository.</p>
|
||||||
|
|
||||||
|
<p>The next step is to customize the Ant <em>properties</em> that are
|
||||||
|
named in the <code>build.xml</code> script. This is done by creating a
|
||||||
|
file named <code>build.properties</code> in your project's top-level
|
||||||
|
directory. The supported properties are listed in the comments inside
|
||||||
|
the sample <code>build.xml</code> script. At a minimum, you will generally
|
||||||
|
need to define the <code>catalina.home</code> property defining where
|
||||||
|
Tomcat is installed, and the manager application username and password.
|
||||||
|
You might end up with something like this:</p>
|
||||||
|
<div class="codeBox"><pre><code># Context path to install this application on
|
||||||
|
app.path=/hello
|
||||||
|
|
||||||
|
# Tomcat installation directory
|
||||||
|
catalina.home=/usr/local/apache-tomcat-<version-major-minor/>
|
||||||
|
|
||||||
|
# Manager webapp username and password
|
||||||
|
manager.username=myusername
|
||||||
|
manager.password=mypassword</code></pre></div>
|
||||||
|
|
||||||
|
<p>In general, you will <strong>not</strong> want to check the
|
||||||
|
<code>build.properties</code> file in to the CVS repository, because it
|
||||||
|
is unique to each developer's environment.</p>
|
||||||
|
|
||||||
|
<p>Now, create the initial version of the web application deployment
|
||||||
|
descriptor. You can base <code>web.xml</code> on the
|
||||||
|
<a href="web.xml.txt">basic web.xml file</a>, or code it from scratch.</p>
|
||||||
|
<div class="codeBox"><pre><code>cd {my home directory}
|
||||||
|
cd myapp/web/WEB-INF
|
||||||
|
emacs web.xml
|
||||||
|
cvs add web.xml
|
||||||
|
cvs commit</code></pre></div>
|
||||||
|
|
||||||
|
Note that this is only an example web.xml file. The full definition
|
||||||
|
of the deployment descriptor file is in the
|
||||||
|
<a href="https://wiki.apache.org/tomcat/Specifications">Servlet Specification.</a>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Edit_Source_Code_and_Pages">Edit Source Code and Pages</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The edit/build/test tasks will generally be your most common activities
|
||||||
|
during development and maintenance. The following general principles apply.
|
||||||
|
As described in <a href="source.html">Source Organization</a>, newly created
|
||||||
|
source files should be located in the appropriate subdirectory, under your
|
||||||
|
project source directory.</p>
|
||||||
|
|
||||||
|
<p>Whenever you wish to refresh your development directory to reflect the
|
||||||
|
work performed by other developers, you will ask CVS to do it for you:</p>
|
||||||
|
<div class="codeBox"><pre><code>cd {my home directory}
|
||||||
|
cd myapp
|
||||||
|
cvs update -dP</code></pre></div>
|
||||||
|
|
||||||
|
<p>To create a new file, go to the appropriate directory, create the file,
|
||||||
|
and register it with CVS. When you are satisfied with it's contents (after
|
||||||
|
building and testing is successful), commit the new file to the repository.
|
||||||
|
For example, to create a new JSP page:</p>
|
||||||
|
<div class="codeBox"><pre><code>cd {my home directory}
|
||||||
|
cd myapp/web <-- Ultimate destination is document root
|
||||||
|
emacs mypage.jsp
|
||||||
|
cvs add mypage.jsp
|
||||||
|
... build and test the application ...
|
||||||
|
cvs commit</code></pre></div>
|
||||||
|
|
||||||
|
<p>Java source code that is defined in packages must be organized in a
|
||||||
|
directory hierarchy (under the <strong>src/</strong> subdirectory) that
|
||||||
|
matches the package names. For example, a Java class named
|
||||||
|
<code>com.mycompany.mypackage.MyClass.java</code> should be stored in file
|
||||||
|
<code>src/com/mycompany/mypackage/MyClass.java</code>.
|
||||||
|
Whenever you create a new subdirectory, don't forget to
|
||||||
|
register it with CVS.</p>
|
||||||
|
|
||||||
|
<p>To edit an existing source file, you will generally just start editing
|
||||||
|
and testing, then commit the changed file when everything works. Although
|
||||||
|
CVS can be configured to required you to "check out" or "lock" a file you
|
||||||
|
are going to be modifying, this is generally not used.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Build_the_Web_Application">Build the Web Application</h4><div class="text">
|
||||||
|
|
||||||
|
<p>When you are ready to compile the application, issue the following
|
||||||
|
commands (generally, you will want a shell window open that is set to
|
||||||
|
the project source directory, so that only the last command is needed):</p>
|
||||||
|
<div class="codeBox"><pre><code>cd {my home directory}
|
||||||
|
cd myapp <-- Normally leave a window open here
|
||||||
|
ant</code></pre></div>
|
||||||
|
|
||||||
|
<p>The Ant tool will be execute the default "compile" target in your
|
||||||
|
<code>build.xml</code> file, which will compile any new or updated Java
|
||||||
|
code. If this is the first time you compile after a "build clean",
|
||||||
|
it will cause everything to be recompiled.</p>
|
||||||
|
|
||||||
|
<p>To force the recompilation of your entire application, do this instead:</p>
|
||||||
|
<div class="codeBox"><pre><code>cd {my home directory}
|
||||||
|
cd myapp
|
||||||
|
ant all</code></pre></div>
|
||||||
|
|
||||||
|
<p>This is a very good habit immediately before checking in changes, to
|
||||||
|
make sure that you have not introduced any subtle problems that Javac's
|
||||||
|
conditional checking did not catch.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Test_Your_Web_Application">Test Your Web Application</h4><div class="text">
|
||||||
|
|
||||||
|
<p>To test your application, you will want to install it under Tomcat. The
|
||||||
|
quickest way to do that is to use the custom Ant tasks that are included in
|
||||||
|
the sample <code>build.xml</code> script. Using these commands might follow
|
||||||
|
a pattern like this:</p>
|
||||||
|
<ul>
|
||||||
|
<li><p><em>Start Tomcat if needed</em>. If Tomcat is not already running,
|
||||||
|
you will need to start it in the usual way.
|
||||||
|
</p></li>
|
||||||
|
<li><p><em>Compile your application</em>. Use the <code>ant compile</code>
|
||||||
|
command (or just <code>ant</code>, since this is the default). Make
|
||||||
|
sure that there are no compilation errors.
|
||||||
|
</p></li>
|
||||||
|
<li><p><em>Install the application</em>. Use the <code>ant install</code>
|
||||||
|
command. This tells Tomcat to immediately start running your app on
|
||||||
|
the context path defined in the <code>app.path</code> build property.
|
||||||
|
Tomcat does <strong>NOT</strong> have to be restarted for this to
|
||||||
|
take effect.
|
||||||
|
</p></li>
|
||||||
|
<li><p><em>Test the application</em>. Using your browser or other testing
|
||||||
|
tools, test the functionality of your application.
|
||||||
|
</p></li>
|
||||||
|
<li><p><em>Modify and rebuild as needed</em>. As you discover that changes
|
||||||
|
are required, make those changes in the original <strong>source</strong>
|
||||||
|
files, not in the output build directory, and re-issue the
|
||||||
|
<code>ant compile</code> command. This ensures that your changes will
|
||||||
|
be available to be saved (via <code>cvs commit</code>) later on --
|
||||||
|
the output build directory is deleted and recreated as necessary.
|
||||||
|
</p></li>
|
||||||
|
<li><p><em>Reload the application</em>. Tomcat will recognize changes in
|
||||||
|
JSP pages automatically, but it will continue to use the old versions
|
||||||
|
of any servlet or JavaBean classes until the application is reloaded.
|
||||||
|
You can trigger this by executing the <code>ant reload</code> command.
|
||||||
|
</p></li>
|
||||||
|
<li><p><em>Remove the application when you are done</em>. When you are through
|
||||||
|
working on this application, you can remove it from live execution by
|
||||||
|
running the <code>ant remove</code> command.
|
||||||
|
</p></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Do not forget to commit your changes to the source code repository when
|
||||||
|
you have completed your testing!</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Creating_a_Release">Creating a Release</h4><div class="text">
|
||||||
|
|
||||||
|
<p>When you are through adding new functionality, and you've tested everything
|
||||||
|
(you DO test, don't you :-), it is time to create the distributable version
|
||||||
|
of your web application that can be deployed on the production server. The
|
||||||
|
following general steps are required:</p>
|
||||||
|
<ul>
|
||||||
|
<li><p>Issue the command <code>ant all</code> from the project source
|
||||||
|
directory, to rebuild everything from scratch one last time.
|
||||||
|
</p></li>
|
||||||
|
<li><p>Use the <code>cvs tag</code> command to create an identifier for
|
||||||
|
all of the source files utilized to create this release. This allows
|
||||||
|
you to reliably reconstruct a release (from sources) at a later
|
||||||
|
time.
|
||||||
|
</p></li>
|
||||||
|
<li><p>Issue the command <code>ant dist</code> to create a distributable
|
||||||
|
web application archive (WAR) file, as well as a JAR file containing
|
||||||
|
the corresponding source code.
|
||||||
|
</p></li>
|
||||||
|
<li><p>Package the contents of the <code>dist</code> directory using the
|
||||||
|
<strong>tar</strong> or <strong>zip</strong> utility, according to
|
||||||
|
the standard release procedures used by your organization.
|
||||||
|
</p></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,508 @@
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
General purpose build script for web applications and web services,
|
||||||
|
including enhanced support for deploying directly to a Tomcat
|
||||||
|
based server.
|
||||||
|
|
||||||
|
This build script assumes that the source code of your web application
|
||||||
|
is organized into the following subdirectories underneath the source
|
||||||
|
code directory from which you execute the build script:
|
||||||
|
|
||||||
|
docs Static documentation files to be copied to
|
||||||
|
the "docs" subdirectory of your distribution.
|
||||||
|
|
||||||
|
src Java source code (and associated resource files)
|
||||||
|
to be compiled to the "WEB-INF/classes"
|
||||||
|
subdirectory of your web application.
|
||||||
|
|
||||||
|
web Static HTML, JSP, and other content (such as
|
||||||
|
image files), including the WEB-INF subdirectory
|
||||||
|
and its configuration file contents.
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
<!-- A "project" describes a set of targets that may be requested
|
||||||
|
when Ant is executed. The "default" attribute defines the
|
||||||
|
target which is executed if no specific target is requested,
|
||||||
|
and the "basedir" attribute defines the current working directory
|
||||||
|
from which Ant executes the requested task. This is normally
|
||||||
|
set to the current working directory.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<project name="My Project" default="compile" basedir=".">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ===================== Property Definitions =========================== -->
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
Each of the following properties are used in the build script.
|
||||||
|
Values for these properties are set by the first place they are
|
||||||
|
defined, from the following list:
|
||||||
|
|
||||||
|
* Definitions on the "ant" command line (ant -Dfoo=bar compile).
|
||||||
|
|
||||||
|
* Definitions from a "build.properties" file in the top level
|
||||||
|
source directory of this application.
|
||||||
|
|
||||||
|
* Definitions from a "build.properties" file in the developer's
|
||||||
|
home directory.
|
||||||
|
|
||||||
|
* Default definitions in this build.xml file.
|
||||||
|
|
||||||
|
You will note below that property values can be composed based on the
|
||||||
|
contents of previously defined properties. This is a powerful technique
|
||||||
|
that helps you minimize the number of changes required when your development
|
||||||
|
environment is modified. Note that property composition is allowed within
|
||||||
|
"build.properties" files as well as in the "build.xml" script.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<property file="build.properties"/>
|
||||||
|
<property file="${user.home}/build.properties"/>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== File and Directory Names ======================== -->
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
These properties generally define file and directory names (or paths) that
|
||||||
|
affect where the build process stores its outputs.
|
||||||
|
|
||||||
|
app.name Base name of this application, used to
|
||||||
|
construct filenames and directories.
|
||||||
|
Defaults to "myapp".
|
||||||
|
|
||||||
|
app.path Context path to which this application should be
|
||||||
|
deployed (defaults to "/" plus the value of the
|
||||||
|
"app.name" property).
|
||||||
|
|
||||||
|
app.version Version number of this iteration of the application.
|
||||||
|
|
||||||
|
build.home The directory into which the "prepare" and
|
||||||
|
"compile" targets will generate their output.
|
||||||
|
Defaults to "build".
|
||||||
|
|
||||||
|
catalina.home The directory in which you have installed
|
||||||
|
a binary distribution of Tomcat. This will
|
||||||
|
be used by the "deploy" target.
|
||||||
|
|
||||||
|
dist.home The name of the base directory in which
|
||||||
|
distribution files are created.
|
||||||
|
Defaults to "dist".
|
||||||
|
|
||||||
|
manager.password The login password of a user that is assigned the
|
||||||
|
"manager-script" role (so that he or she can execute
|
||||||
|
commands via the "/manager" web application)
|
||||||
|
|
||||||
|
manager.url The URL of the "/manager" web application on the
|
||||||
|
Tomcat installation to which we will deploy web
|
||||||
|
applications and web services.
|
||||||
|
|
||||||
|
manager.username The login username of a user that is assigned the
|
||||||
|
"manager-script" role (so that he or she can execute
|
||||||
|
commands via the "/manager" web application)
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<property name="app.name" value="myapp"/>
|
||||||
|
<property name="app.path" value="/${app.name}"/>
|
||||||
|
<property name="app.version" value="0.1-dev"/>
|
||||||
|
<property name="build.home" value="${basedir}/build"/>
|
||||||
|
<property name="catalina.home" value="../../../.."/> <!-- UPDATE THIS! -->
|
||||||
|
<property name="dist.home" value="${basedir}/dist"/>
|
||||||
|
<property name="docs.home" value="${basedir}/docs"/>
|
||||||
|
<property name="manager.url" value="http://localhost:8080/manager/text"/>
|
||||||
|
<property name="src.home" value="${basedir}/src"/>
|
||||||
|
<property name="web.home" value="${basedir}/web"/>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== External Dependencies =========================== -->
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
Use property values to define the locations of external JAR files on which
|
||||||
|
your application will depend. In general, these values will be used for
|
||||||
|
two purposes:
|
||||||
|
* Inclusion on the classpath that is passed to the Javac compiler
|
||||||
|
* Being copied into the "/WEB-INF/lib" directory during execution
|
||||||
|
of the "deploy" target.
|
||||||
|
|
||||||
|
Because we will automatically include all of the Java classes that Tomcat
|
||||||
|
exposes to web applications, we will not need to explicitly list any of those
|
||||||
|
dependencies. You only need to worry about external dependencies for JAR
|
||||||
|
files that you are going to include inside your "/WEB-INF/lib" directory.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Dummy external dependency -->
|
||||||
|
<!--
|
||||||
|
<property name="foo.jar"
|
||||||
|
value="/path/to/foo.jar"/>
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== Compilation Classpath =========================== -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
Rather than relying on the CLASSPATH environment variable, Ant includes
|
||||||
|
features that makes it easy to dynamically construct the classpath you
|
||||||
|
need for each compilation. The example below constructs the compile
|
||||||
|
classpath to include the servlet.jar file, as well as the other components
|
||||||
|
that Tomcat makes available to web applications automatically, plus anything
|
||||||
|
that you explicitly added.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<path id="compile.classpath">
|
||||||
|
|
||||||
|
<!-- Include all JAR files that will be included in /WEB-INF/lib -->
|
||||||
|
<!-- *** CUSTOMIZE HERE AS REQUIRED BY YOUR APPLICATION *** -->
|
||||||
|
<!--
|
||||||
|
<pathelement location="${foo.jar}"/>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Include all elements that Tomcat exposes to applications -->
|
||||||
|
<fileset dir="${catalina.home}/bin">
|
||||||
|
<include name="*.jar"/>
|
||||||
|
</fileset>
|
||||||
|
<pathelement location="${catalina.home}/lib"/>
|
||||||
|
<fileset dir="${catalina.home}/lib">
|
||||||
|
<include name="*.jar"/>
|
||||||
|
</fileset>
|
||||||
|
|
||||||
|
</path>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ================== Custom Ant Task Definitions ======================= -->
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
These properties define custom tasks for the Ant build tool that interact
|
||||||
|
with the "/manager" web application installed with Tomcat. Before they
|
||||||
|
can be successfully utilized, you must perform the following steps:
|
||||||
|
|
||||||
|
- Copy the file "lib/catalina-ant.jar" from your Tomcat
|
||||||
|
installation into the "lib" directory of your Ant installation.
|
||||||
|
|
||||||
|
- Create a "build.properties" file in your application's top-level
|
||||||
|
source directory (or your user login home directory) that defines
|
||||||
|
appropriate values for the "manager.password", "manager.url", and
|
||||||
|
"manager.username" properties described above.
|
||||||
|
|
||||||
|
For more information about the Manager web application, and the functionality
|
||||||
|
of these tasks, see <http://localhost:8080/tomcat-docs/manager-howto.html>.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<taskdef resource="org/apache/catalina/ant/catalina.tasks"
|
||||||
|
classpathref="compile.classpath"/>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== Compilation Control Options ==================== -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
These properties control option settings on the Javac compiler when it
|
||||||
|
is invoked using the <javac> task.
|
||||||
|
|
||||||
|
compile.debug Should compilation include the debug option?
|
||||||
|
|
||||||
|
compile.deprecation Should compilation include the deprecation option?
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<property name="compile.debug" value="true"/>
|
||||||
|
<property name="compile.deprecation" value="false"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== All Target ====================================== -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
The "all" target is a shortcut for running the "clean" target followed
|
||||||
|
by the "compile" target, to force a complete recompile.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<target name="all" depends="clean,compile"
|
||||||
|
description="Clean build and dist directories, then compile"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== Clean Target ==================================== -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
The "clean" target deletes any previous "build" and "dist" directory,
|
||||||
|
so that you can be ensured the application can be built from scratch.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<target name="clean"
|
||||||
|
description="Delete old build and dist directories">
|
||||||
|
<delete dir="${build.home}"/>
|
||||||
|
<delete dir="${dist.home}"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== Compile Target ================================== -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
The "compile" target transforms source files (from your "src" directory)
|
||||||
|
into object files in the appropriate location in the build directory.
|
||||||
|
This example assumes that you will be including your classes in an
|
||||||
|
unpacked directory hierarchy under "/WEB-INF/classes".
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<target name="compile" depends="prepare"
|
||||||
|
description="Compile Java sources">
|
||||||
|
|
||||||
|
<!-- Compile Java classes as necessary -->
|
||||||
|
<mkdir dir="${build.home}/WEB-INF/classes"/>
|
||||||
|
<javac srcdir="${src.home}"
|
||||||
|
destdir="${build.home}/WEB-INF/classes"
|
||||||
|
debug="${compile.debug}"
|
||||||
|
deprecation="${compile.deprecation}">
|
||||||
|
<classpath refid="compile.classpath"/>
|
||||||
|
</javac>
|
||||||
|
|
||||||
|
<!-- Copy application resources -->
|
||||||
|
<copy todir="${build.home}/WEB-INF/classes">
|
||||||
|
<fileset dir="${src.home}" excludes="**/*.java"/>
|
||||||
|
</copy>
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== Dist Target ===================================== -->
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
The "dist" target creates a binary distribution of your application
|
||||||
|
in a directory structure ready to be archived in a tar.gz or zip file.
|
||||||
|
Note that this target depends on two others:
|
||||||
|
|
||||||
|
* "compile" so that the entire web application (including external
|
||||||
|
dependencies) will have been assembled
|
||||||
|
|
||||||
|
* "javadoc" so that the application Javadocs will have been created
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<target name="dist" depends="compile,javadoc"
|
||||||
|
description="Create binary distribution">
|
||||||
|
|
||||||
|
<!-- Copy documentation subdirectories -->
|
||||||
|
<mkdir dir="${dist.home}/docs"/>
|
||||||
|
<copy todir="${dist.home}/docs">
|
||||||
|
<fileset dir="${docs.home}"/>
|
||||||
|
</copy>
|
||||||
|
|
||||||
|
<!-- Create application JAR file -->
|
||||||
|
<jar jarfile="${dist.home}/${app.name}-${app.version}.war"
|
||||||
|
basedir="${build.home}"/>
|
||||||
|
|
||||||
|
<!-- Copy additional files to ${dist.home} as necessary -->
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== Install Target ================================== -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
The "install" target tells the specified Tomcat installation to dynamically
|
||||||
|
install this web application and make it available for execution. It does
|
||||||
|
*not* cause the existence of this web application to be remembered across
|
||||||
|
Tomcat restarts; if you restart the server, you will need to re-install all
|
||||||
|
this web application.
|
||||||
|
|
||||||
|
If you have already installed this application, and simply want Tomcat to
|
||||||
|
recognize that you have updated Java classes (or the web.xml file), use the
|
||||||
|
"reload" target instead.
|
||||||
|
|
||||||
|
NOTE: This target will only succeed if it is run from the same server that
|
||||||
|
Tomcat is running on.
|
||||||
|
|
||||||
|
NOTE: This is the logical opposite of the "remove" target.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<target name="install" depends="compile"
|
||||||
|
description="Install application to servlet container">
|
||||||
|
|
||||||
|
<deploy url="${manager.url}"
|
||||||
|
username="${manager.username}"
|
||||||
|
password="${manager.password}"
|
||||||
|
path="${app.path}"
|
||||||
|
localWar="file://${build.home}"/>
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== Javadoc Target ================================== -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
The "javadoc" target creates Javadoc API documentation for the Java
|
||||||
|
classes included in your application. Normally, this is only required
|
||||||
|
when preparing a distribution release, but is available as a separate
|
||||||
|
target in case the developer wants to create Javadocs independently.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<target name="javadoc" depends="compile"
|
||||||
|
description="Create Javadoc API documentation">
|
||||||
|
|
||||||
|
<mkdir dir="${dist.home}/docs/api"/>
|
||||||
|
<javadoc sourcepath="${src.home}"
|
||||||
|
destdir="${dist.home}/docs/api"
|
||||||
|
packagenames="*">
|
||||||
|
<classpath refid="compile.classpath"/>
|
||||||
|
</javadoc>
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ====================== List Target =================================== -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
The "list" target asks the specified Tomcat installation to list the
|
||||||
|
currently running web applications, either loaded at startup time or
|
||||||
|
installed dynamically. It is useful to determine whether or not the
|
||||||
|
application you are currently developing has been installed.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<target name="list"
|
||||||
|
description="List installed applications on servlet container">
|
||||||
|
|
||||||
|
<list url="${manager.url}"
|
||||||
|
username="${manager.username}"
|
||||||
|
password="${manager.password}"/>
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== Prepare Target ================================== -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
The "prepare" target is used to create the "build" destination directory,
|
||||||
|
and copy the static contents of your web application to it. If you need
|
||||||
|
to copy static files from external dependencies, you can customize the
|
||||||
|
contents of this task.
|
||||||
|
|
||||||
|
Normally, this task is executed indirectly when needed.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<target name="prepare">
|
||||||
|
|
||||||
|
<!-- Create build directories as needed -->
|
||||||
|
<mkdir dir="${build.home}"/>
|
||||||
|
<mkdir dir="${build.home}/WEB-INF"/>
|
||||||
|
<mkdir dir="${build.home}/WEB-INF/classes"/>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Copy static content of this web application -->
|
||||||
|
<copy todir="${build.home}">
|
||||||
|
<fileset dir="${web.home}"/>
|
||||||
|
</copy>
|
||||||
|
|
||||||
|
<!-- Copy external dependencies as required -->
|
||||||
|
<!-- *** CUSTOMIZE HERE AS REQUIRED BY YOUR APPLICATION *** -->
|
||||||
|
<mkdir dir="${build.home}/WEB-INF/lib"/>
|
||||||
|
<!--
|
||||||
|
<copy todir="${build.home}/WEB-INF/lib" file="${foo.jar}"/>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Copy static files from external dependencies as needed -->
|
||||||
|
<!-- *** CUSTOMIZE HERE AS REQUIRED BY YOUR APPLICATION *** -->
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== Reload Target =================================== -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
The "reload" signals the specified application Tomcat to shut itself down
|
||||||
|
and reload. This can be useful when the web application context is not
|
||||||
|
reloadable and you have updated classes or property files in the
|
||||||
|
/WEB-INF/classes directory or when you have added or updated jar files in the
|
||||||
|
/WEB-INF/lib directory.
|
||||||
|
|
||||||
|
NOTE: The /WEB-INF/web.xml web application configuration file is not reread
|
||||||
|
on a reload. If you have made changes to your web.xml file you must stop
|
||||||
|
then start the web application.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<target name="reload" depends="compile"
|
||||||
|
description="Reload application on servlet container">
|
||||||
|
|
||||||
|
<reload url="${manager.url}"
|
||||||
|
username="${manager.username}"
|
||||||
|
password="${manager.password}"
|
||||||
|
path="${app.path}"/>
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== Remove Target =================================== -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
The "remove" target tells the specified Tomcat installation to dynamically
|
||||||
|
remove this web application from service.
|
||||||
|
|
||||||
|
NOTE: This is the logical opposite of the "install" target.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<target name="remove"
|
||||||
|
description="Remove application on servlet container">
|
||||||
|
|
||||||
|
<undeploy url="${manager.url}"
|
||||||
|
username="${manager.username}"
|
||||||
|
password="${manager.password}"
|
||||||
|
path="${app.path}"/>
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,17 @@
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
This is a dummy README file for the sample
|
||||||
|
web application.
|
|
@ -0,0 +1,55 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="author" content="Ben Souther" />
|
||||||
|
<title>Sample Application</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h2>Sample Application</h2>
|
||||||
|
<p>
|
||||||
|
The example app has been packaged as a war file and can be downloaded
|
||||||
|
<a href="sample.war">here</a> (Note: make sure your browser doesn't
|
||||||
|
change file extension or append a new one).
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
The easiest way to run this application is simply to move the war file
|
||||||
|
to your <b>CATALINA_BASE/webapps</b> directory. A default Tomcat install
|
||||||
|
will automatically expand and deploy the application for you. You can
|
||||||
|
view it with the following URL (assuming that you're running tomcat on
|
||||||
|
port 8080 which is the default):
|
||||||
|
<br />
|
||||||
|
<a href="http://localhost:8080/sample">http://localhost:8080/sample</a>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
If you just want to browse the contents, you can unpack the war file
|
||||||
|
with the <b>jar</b> command.
|
||||||
|
</p>
|
||||||
|
<pre>
|
||||||
|
jar -xvf sample.war
|
||||||
|
</pre>
|
||||||
|
<p>
|
||||||
|
Note: <b>CATALINA_BASE</b> is usually the directory in which you
|
||||||
|
unpacked the Tomcat distribution. For more information on
|
||||||
|
<b>CATALINA_HOME</b>, <b>CATALINA_BASE</b> and the difference between
|
||||||
|
them see <b>RUNNING.txt</b> in the directory you unpacked your Tomcat
|
||||||
|
distribution.
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,83 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package mypackage;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.http.HttpServlet;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple servlet to validate that the Hello, World example can
|
||||||
|
* execute servlets. In the web application deployment descriptor,
|
||||||
|
* this servlet must be mapped to correspond to the link in the
|
||||||
|
* "index.html" file.
|
||||||
|
*
|
||||||
|
* @author Craig R. McClanahan <Craig.McClanahan@eng.sun.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
public final class Hello extends HttpServlet {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Respond to a GET request for the content produced by
|
||||||
|
* this servlet.
|
||||||
|
*
|
||||||
|
* @param request The servlet request we are processing
|
||||||
|
* @param response The servlet response we are producing
|
||||||
|
*
|
||||||
|
* @exception IOException if an input/output error occurs
|
||||||
|
* @exception ServletException if a servlet error occurs
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void doGet(HttpServletRequest request,
|
||||||
|
HttpServletResponse response)
|
||||||
|
throws IOException, ServletException {
|
||||||
|
|
||||||
|
response.setContentType("text/html");
|
||||||
|
response.setCharacterEncoding("UTF-8");
|
||||||
|
try (PrintWriter writer = response.getWriter()) {
|
||||||
|
|
||||||
|
writer.println("<!DOCTYPE html><html>");
|
||||||
|
writer.println("<head>");
|
||||||
|
writer.println("<meta charset=\"UTF-8\" />");
|
||||||
|
writer.println("<title>Sample Application Servlet Page</title>");
|
||||||
|
writer.println("</head>");
|
||||||
|
writer.println("<body>");
|
||||||
|
|
||||||
|
|
||||||
|
writer.println("<div style=\"float: left; padding: 10px;\">");
|
||||||
|
writer.println("<img src=\"images/tomcat.gif\" alt=\"\" />");
|
||||||
|
writer.println("</div>");
|
||||||
|
writer.println("<h1>Sample Application Servlet</h1>");
|
||||||
|
writer.println("<p>");
|
||||||
|
writer.println("This is the output of a servlet that is part of");
|
||||||
|
writer.println("the Hello, World application.");
|
||||||
|
writer.println("</p>");
|
||||||
|
|
||||||
|
writer.println("</body>");
|
||||||
|
writer.println("</html>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
|
||||||
|
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
|
||||||
|
version="3.1">
|
||||||
|
|
||||||
|
<display-name>Hello, World Application</display-name>
|
||||||
|
<description>
|
||||||
|
This is a simple web application with a source code organization
|
||||||
|
based on the recommendations of the Application Developer's Guide.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>HelloServlet</servlet-name>
|
||||||
|
<servlet-class>mypackage.Hello</servlet-class>
|
||||||
|
</servlet>
|
||||||
|
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>HelloServlet</servlet-name>
|
||||||
|
<url-pattern>/hello</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
|
</web-app>
|
|
@ -0,0 +1,37 @@
|
||||||
|
<%--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
--%>
|
||||||
|
<%@ page session="false" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<title>Sample Application JSP Page</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div style="float: left; padding: 10px;">
|
||||||
|
<img src="images/tomcat.gif" alt="" />
|
||||||
|
</div>
|
||||||
|
<h1>Sample Application JSP Page</h1>
|
||||||
|
This is the output of a JSP page that is part of the Hello, World
|
||||||
|
application.
|
||||||
|
|
||||||
|
|
||||||
|
<%= new String("Hello!") %>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
After Width: | Height: | Size: 2.0 KiB |
|
@ -0,0 +1,39 @@
|
||||||
|
<!DOCTYPE html><!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<title>Sample "Hello, World" Application</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div style="float: left; padding: 10px;">
|
||||||
|
<img src="images/tomcat.gif" alt="" />
|
||||||
|
</div>
|
||||||
|
<h1>Sample "Hello, World" Application</h1>
|
||||||
|
<p>This is the home page for a sample application used to illustrate the
|
||||||
|
source directory organization of a web application utilizing the principles
|
||||||
|
outlined in the Application Developer's Guide.
|
||||||
|
|
||||||
|
<p>To prove that they work, you can execute either of the following links:</p>
|
||||||
|
<ul>
|
||||||
|
<li>To a <a href="hello.jsp">JSP page</a>.</li>
|
||||||
|
<li>To a <a href="hello">servlet</a>.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,321 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Application Developer's Guide (8.0.53) - Source Organization</title><meta name="author" content="Craig R. McClanahan"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/appdev/source">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Application Developer's Guide</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">App Dev Guide Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Contents</h2><ul><li><a href="index.html">Contents</a></li><li><a href="introduction.html">Introduction</a></li><li><a href="installation.html">Installation</a></li><li><a href="deployment.html">Deployment</a></li><li><a href="source.html">Source Code</a></li><li><a href="processes.html">Processes</a></li><li><a href="sample/">Example App</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Source Organization</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Directory_Structure">Directory Structure</a><ol><li><a href="#External_Dependencies">External Dependencies</a></li></ol></li><li><a href="#Source_Code_Control">Source Code Control</a></li><li><a href="#BUILD.XML_Configuration_File">BUILD.XML Configuration File</a></li></ul>
|
||||||
|
</div><h3 id="Directory_Structure">Directory Structure</h3><div class="text">
|
||||||
|
|
||||||
|
<p><em>The description below uses the variable name $CATALINA_BASE to refer the
|
||||||
|
base directory against which most relative paths are resolved. If you have
|
||||||
|
not configured Tomcat for multiple instances by setting a CATALINA_BASE
|
||||||
|
directory, then $CATALINA_BASE will be set to the value of $CATALINA_HOME,
|
||||||
|
the directory into which you have installed Tomcat.</em></p>
|
||||||
|
|
||||||
|
<p>A key recommendation of this manual is to separate the directory
|
||||||
|
hierarchy containing your source code (described in this section) from
|
||||||
|
the directory hierarchy containing your deployable application
|
||||||
|
(described in the preceding section). Maintaining this separation has
|
||||||
|
the following advantages:</p>
|
||||||
|
<ul>
|
||||||
|
<li><p>The contents of the source directories can be more easily administered,
|
||||||
|
moved, and backed up if the "executable" version of the application
|
||||||
|
is not intermixed.
|
||||||
|
</p></li>
|
||||||
|
<li><p>Source code control is easier to manage on directories that contain
|
||||||
|
only source files.
|
||||||
|
</p></li>
|
||||||
|
<li><p>The files that make up an installable distribution of your
|
||||||
|
application are much easier to select when the deployment
|
||||||
|
hierarchy is separate.</p></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>As we will see, the <code>ant</code> development tool makes the creation
|
||||||
|
and processing of such directory hierarchies nearly painless.</p>
|
||||||
|
|
||||||
|
<p>The actual directory and file hierarchy used to contain the source code
|
||||||
|
of an application can be pretty much anything you like. However, the
|
||||||
|
following organization has proven to be quite generally applicable, and is
|
||||||
|
expected by the example <code>build.xml</code> configuration file that
|
||||||
|
is discussed below. All of these components exist under a top level
|
||||||
|
<em>project source directory</em> for your application:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>docs/</strong> - Documentation for your application, in whatever
|
||||||
|
format your development team is using.<br><br></li>
|
||||||
|
<li><strong>src/</strong> - Java source files that generate the servlets,
|
||||||
|
beans, and other Java classes that are unique to your application.
|
||||||
|
If your source code is organized in packages (<strong>highly</strong>
|
||||||
|
recommended), the package hierarchy should be reflected as a directory
|
||||||
|
structure underneath this directory.<br><br></li>
|
||||||
|
<li><strong>web/</strong> - The static content of your web site (HTML pages,
|
||||||
|
JSP pages, JavaScript files, CSS stylesheet files, and images) that will
|
||||||
|
be accessible to application clients. This directory will be the
|
||||||
|
<em>document root</em> of your web application, and any subdirectory
|
||||||
|
structure found here will be reflected in the request URIs required to
|
||||||
|
access those files.<br><br></li>
|
||||||
|
<li><strong>web/WEB-INF/</strong> - The special configuration files required
|
||||||
|
for your application, including the web application deployment descriptor
|
||||||
|
(<code>web.xml</code>, defined in the
|
||||||
|
<a href="https://wiki.apache.org/tomcat/Specifications">Servlet Specification</a>),
|
||||||
|
tag library descriptors for custom tag libraries
|
||||||
|
you have created, and other resource files you wish to include within
|
||||||
|
your web application. Even though this directory appears to be a
|
||||||
|
subdirectory of your <em>document root</em>, the Servlet Specification
|
||||||
|
prohibits serving the contents of this directory (or any file it contains)
|
||||||
|
directly to a client request. Therefore, this is a good place to store
|
||||||
|
configuration information that is sensitive (such as database connection
|
||||||
|
usernames and passwords), but is required for your application to
|
||||||
|
operate successfully.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>During the development process, two additional directories will be
|
||||||
|
created on a temporary basis:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>build/</strong> - When you execute a default build
|
||||||
|
(<code>ant</code>), this directory will contain an exact image
|
||||||
|
of the files in the web application archive for this application.
|
||||||
|
Tomcat allows you to deploy an application in an unpacked
|
||||||
|
directory like this, either by copying it to the
|
||||||
|
<code>$CATALINA_BASE/webapps</code> directory, or by <em>installing</em>
|
||||||
|
it via the "Manager" web application. The latter approach is very
|
||||||
|
useful during development, and will be illustrated below.
|
||||||
|
<br><br></li>
|
||||||
|
<li><strong>dist/</strong> - When you execute the <code>ant dist</code>
|
||||||
|
target, this directory will be created. It will create an exact image
|
||||||
|
of the binary distribution for your web application, including an license
|
||||||
|
information, documentation, and README files that you have prepared.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Note that these two directories should <strong>NOT</strong> be archived in
|
||||||
|
your source code control system, because they are deleted and recreated (from
|
||||||
|
scratch) as needed during development. For that reason, you should not edit
|
||||||
|
any source files in these directories if you want to maintain a permanent
|
||||||
|
record of the changes, because the changes will be lost the next time that a
|
||||||
|
build is performed.</p>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="External_Dependencies">External Dependencies</h4><div class="text">
|
||||||
|
|
||||||
|
<p>What do you do if your application requires JAR files (or other
|
||||||
|
resources) from external projects or packages? A common example is that
|
||||||
|
you need to include a JDBC driver in your web application, in order to
|
||||||
|
operate.</p>
|
||||||
|
|
||||||
|
<p>Different developers take different approaches to this problem.
|
||||||
|
Some will encourage checking a copy of the JAR files you depend on into
|
||||||
|
the source code control archives for every application that requires those
|
||||||
|
JAR files. However, this can cause significant management issues when you
|
||||||
|
use the same JAR in many applications - particular when faced with a need
|
||||||
|
to upgrade to a different version of that JAR file.</p>
|
||||||
|
|
||||||
|
<p>Therefore, this manual recommends that you <strong>NOT</strong> store
|
||||||
|
a copy of the packages you depend on inside the source control archives
|
||||||
|
of your applications. Instead, the external dependencies should be
|
||||||
|
integrated as part of the process of <strong>building</strong> your
|
||||||
|
application. In that way, you can always pick up the appropriate version
|
||||||
|
of the JAR files from wherever your development system administrator has
|
||||||
|
installed them, without having to worry about updating your application
|
||||||
|
every time the version of the dependent JAR file is changed.</p>
|
||||||
|
|
||||||
|
<p>In the example Ant <code>build.xml</code> file, we will demonstrate
|
||||||
|
how to define <em>build properties</em> that let you configure the locations
|
||||||
|
of the files to be copied, without having to modify <code>build.xml</code>
|
||||||
|
when these files change. The build properties used by a particular
|
||||||
|
developer can be customized on a per-application basis, or defaulted to
|
||||||
|
"standard" build properties stored in the developer's home directory.</p>
|
||||||
|
|
||||||
|
<p>In many cases, your development system administrator will have already
|
||||||
|
installed the required JAR files into the <code>lib</code> directory of Tomcat.
|
||||||
|
If this has been done, you need
|
||||||
|
to take no actions at all - the example <code>build.xml</code> file
|
||||||
|
automatically constructs a compile classpath that includes these files.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><h3 id="Source_Code_Control">Source Code Control</h3><div class="text">
|
||||||
|
|
||||||
|
<p>As mentioned earlier, it is highly recommended that you place all of the
|
||||||
|
source files that comprise your application under the management of a
|
||||||
|
source code control system like the Concurrent Version System (CVS). If you
|
||||||
|
elect to do this, every directory and file in the source hierarchy should be
|
||||||
|
registered and saved -- but none of the generated files. If you register
|
||||||
|
binary format files (such as images or JAR libraries), be sure to indicate
|
||||||
|
this to your source code control system.</p>
|
||||||
|
|
||||||
|
<p>We recommended (in the previous section) that you should not store the
|
||||||
|
contents of the <code>build/</code> and <code>dist/</code> directories
|
||||||
|
created by your development process in the source code control system. An
|
||||||
|
easy way to tell CVS to ignore these directories is to create a file named
|
||||||
|
<code>.cvsignore</code> (note the leading period) in your top-level source
|
||||||
|
directory, with the following contents:</p>
|
||||||
|
<div class="codeBox"><pre><code>build
|
||||||
|
dist
|
||||||
|
build.properties</code></pre></div>
|
||||||
|
|
||||||
|
<p>The reason for mentioning <code>build.properties</code> here will be
|
||||||
|
explained in the <a href="processes.html">Processes</a> section.</p>
|
||||||
|
|
||||||
|
<p>Detailed instructions for your source code control environment are beyond
|
||||||
|
the scope of this manual. However, the following steps are followed when
|
||||||
|
using a command-line CVS client:</p>
|
||||||
|
<ul>
|
||||||
|
<li>To refresh the state of your source code to that stored in the
|
||||||
|
the source repository, go to your project source directory, and
|
||||||
|
execute <code>cvs update -dP</code>.
|
||||||
|
<br><br></li>
|
||||||
|
<li>When you create a new subdirectory in the source code hierarchy, register
|
||||||
|
it in CVS with a command like <code>cvs add {subdirname}</code>.
|
||||||
|
<br><br></li>
|
||||||
|
<li>When you first create a new source code file, navigate to the directory
|
||||||
|
that contains it, and register the new file with a command like
|
||||||
|
<code>cvs add {filename}</code>.
|
||||||
|
<br><br></li>
|
||||||
|
<li>If you no longer need a particular source code file, navigate to the
|
||||||
|
containing directory and remove the file. Then, deregister it in CVS
|
||||||
|
with a command like <code>cvs remove {filename}</code>.
|
||||||
|
<br><br></li>
|
||||||
|
<li>While you are creating, modifying, and deleting source files, changes
|
||||||
|
are not yet reflected in the server repository. To save your changes in
|
||||||
|
their current state, go to the project source directory
|
||||||
|
and execute <code>cvs commit</code>. You will be asked to write a brief
|
||||||
|
description of the changes you have just completed, which will be stored
|
||||||
|
with the new version of any updated source file.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>CVS, like other source code control systems, has many additional features
|
||||||
|
(such as the ability to tag the files that made up a particular release, and
|
||||||
|
support for multiple development branches that can later be merged). See the
|
||||||
|
links and references in the <a href="introduction.html">Introduction</a> for
|
||||||
|
more information.</p>
|
||||||
|
|
||||||
|
</div><h3 id="BUILD.XML_Configuration_File">BUILD.XML Configuration File</h3><div class="text">
|
||||||
|
|
||||||
|
<p>We will be using the <strong>ant</strong> tool to manage the compilation of
|
||||||
|
our Java source code files, and creation of the deployment hierarchy. Ant
|
||||||
|
operates under the control of a build file, normally called
|
||||||
|
<code>build.xml</code>, that defines the processing steps required. This
|
||||||
|
file is stored in the top-level directory of your source code hierarchy, and
|
||||||
|
should be checked in to your source code control system.</p>
|
||||||
|
|
||||||
|
<p>Like a Makefile, the <code>build.xml</code> file provides several
|
||||||
|
"targets" that support optional development activities (such as creating
|
||||||
|
the associated Javadoc documentation, erasing the deployment home directory
|
||||||
|
so you can build your project from scratch, or creating the web application
|
||||||
|
archive file so you can distribute your application. A well-constructed
|
||||||
|
<code>build.xml</code> file will contain internal documentation describing
|
||||||
|
the targets that are designed for use by the developer, versus those targets
|
||||||
|
used internally. To ask Ant to display the project documentation, change to
|
||||||
|
the directory containing the <code>build.xml</code> file and type:</p>
|
||||||
|
<div class="codeBox"><pre><code>ant -projecthelp</code></pre></div>
|
||||||
|
|
||||||
|
<p>To give you a head start, a <a href="build.xml.txt">basic build.xml file</a>
|
||||||
|
is provided that you can customize and install in the project source directory
|
||||||
|
for your application. This file includes comments that describe the various
|
||||||
|
targets that can be executed. Briefly, the following targets are generally
|
||||||
|
provided:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>clean</strong> - This target deletes any existing
|
||||||
|
<code>build</code> and <code>dist</code> directories, so that they
|
||||||
|
can be reconstructed from scratch. This allows you to guarantee that
|
||||||
|
you have not made source code modifications that will result in
|
||||||
|
problems at runtime due to not recompiling all affected classes.
|
||||||
|
<br><br></li>
|
||||||
|
<li><strong>compile</strong> - This target is used to compile any source code
|
||||||
|
that has been changed since the last time compilation took place. The
|
||||||
|
resulting class files are created in the <code>WEB-INF/classes</code>
|
||||||
|
subdirectory of your <code>build</code> directory, exactly where the
|
||||||
|
structure of a web application requires them to be. Because
|
||||||
|
this command is executed so often during development, it is normally
|
||||||
|
made the "default" target so that a simple <code>ant</code> command will
|
||||||
|
execute it.
|
||||||
|
<br><br></li>
|
||||||
|
<li><strong>all</strong> - This target is a short cut for running the
|
||||||
|
<code>clean</code> target, followed by the <code>compile</code> target.
|
||||||
|
Thus, it guarantees that you will recompile the entire application, to
|
||||||
|
ensure that you have not unknowingly introduced any incompatible changes.
|
||||||
|
<br><br></li>
|
||||||
|
<li><strong>javadoc</strong> - This target creates Javadoc API documentation
|
||||||
|
for the Java classes in this web application. The example
|
||||||
|
<code>build.xml</code> file assumes you want to include the API
|
||||||
|
documentation with your app distribution, so it generates the docs
|
||||||
|
in a subdirectory of the <code>dist</code> directory. Because you normally
|
||||||
|
do not need to generate the Javadocs on every compilation, this target is
|
||||||
|
usually a dependency of the <code>dist</code> target, but not of the
|
||||||
|
<code>compile</code> target.
|
||||||
|
<br><br></li>
|
||||||
|
<li><strong>dist</strong> - This target creates a distribution directory for
|
||||||
|
your application, including any required documentation, the Javadocs for
|
||||||
|
your Java classes, and a web application archive (WAR) file that will be
|
||||||
|
delivered to system administrators who wish to install your application.
|
||||||
|
Because this target also depends on the <code>deploy</code> target, the
|
||||||
|
web application archive will have also picked up any external dependencies
|
||||||
|
that were included at deployment time.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>For interactive development and testing of your web application using
|
||||||
|
Tomcat, the following additional targets are defined:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>install</strong> - Tell the currently running Tomcat to make
|
||||||
|
the application you are developing immediately available for execution
|
||||||
|
and testing. This action does not require Tomcat to be restarted, but
|
||||||
|
it is also not remembered after Tomcat is restarted the next time.
|
||||||
|
<br><br></li>
|
||||||
|
<li><strong>reload</strong> - Once the application is installed, you can
|
||||||
|
continue to make changes and recompile using the <code>compile</code>
|
||||||
|
target. Tomcat will automatically recognize changes made to JSP pages,
|
||||||
|
but not to servlet or JavaBean classes - this command will tell Tomcat
|
||||||
|
to restart the currently installed application so that such changes are
|
||||||
|
recognized.
|
||||||
|
<br><br></li>
|
||||||
|
<li><strong>remove</strong> - When you have completed your development and
|
||||||
|
testing activities, you can optionally tell Tomcat to remove this
|
||||||
|
application from service.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Using the development and testing targets requires some additional
|
||||||
|
one-time setup that is described on the next page.</p>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,166 @@
|
||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!DOCTYPE web-app
|
||||||
|
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
|
||||||
|
"http://java.sun.com/dtd/web-app_2_3.dtd">
|
||||||
|
|
||||||
|
<web-app>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- General description of your web application -->
|
||||||
|
|
||||||
|
<display-name>My Web Application</display-name>
|
||||||
|
<description>
|
||||||
|
This is version X.X of an application to perform
|
||||||
|
a wild and wonderful task, based on servlets and
|
||||||
|
JSP pages. It was written by Dave Developer
|
||||||
|
(dave@mycompany.com), who should be contacted for
|
||||||
|
more information.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Context initialization parameters that define shared
|
||||||
|
String constants used within your application, which
|
||||||
|
can be customized by the system administrator who is
|
||||||
|
installing your application. The values actually
|
||||||
|
assigned to these parameters can be retrieved in a
|
||||||
|
servlet or JSP page by calling:
|
||||||
|
|
||||||
|
String value =
|
||||||
|
getServletContext().getInitParameter("name");
|
||||||
|
|
||||||
|
where "name" matches the <param-name> element of
|
||||||
|
one of these initialization parameters.
|
||||||
|
|
||||||
|
You can define any number of context initialization
|
||||||
|
parameters, including zero.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<context-param>
|
||||||
|
<param-name>webmaster</param-name>
|
||||||
|
<param-value>myaddress@mycompany.com</param-value>
|
||||||
|
<description>
|
||||||
|
The EMAIL address of the administrator to whom questions
|
||||||
|
and comments about this application should be addressed.
|
||||||
|
</description>
|
||||||
|
</context-param>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Servlet definitions for the servlets that make up
|
||||||
|
your web application, including initialization
|
||||||
|
parameters. With Tomcat, you can also send requests
|
||||||
|
to servlets not listed here with a request like this:
|
||||||
|
|
||||||
|
http://localhost:8080/{context-path}/servlet/{classname}
|
||||||
|
|
||||||
|
but this usage is not guaranteed to be portable. It also
|
||||||
|
makes relative references to images and other resources
|
||||||
|
required by your servlet more complicated, so defining
|
||||||
|
all of your servlets (and defining a mapping to them with
|
||||||
|
a servlet-mapping element) is recommended.
|
||||||
|
|
||||||
|
Servlet initialization parameters can be retrieved in a
|
||||||
|
servlet or JSP page by calling:
|
||||||
|
|
||||||
|
String value =
|
||||||
|
getServletConfig().getInitParameter("name");
|
||||||
|
|
||||||
|
where "name" matches the <param-name> element of
|
||||||
|
one of these initialization parameters.
|
||||||
|
|
||||||
|
You can define any number of servlets, including zero.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>controller</servlet-name>
|
||||||
|
<description>
|
||||||
|
This servlet plays the "controller" role in the MVC architecture
|
||||||
|
used in this application. It is generally mapped to the ".do"
|
||||||
|
filename extension with a servlet-mapping element, and all form
|
||||||
|
submits in the app will be submitted to a request URI like
|
||||||
|
"saveCustomer.do", which will therefore be mapped to this servlet.
|
||||||
|
|
||||||
|
The initialization parameter names for this servlet are the
|
||||||
|
"servlet path" that will be received by this servlet (after the
|
||||||
|
filename extension is removed). The corresponding value is the
|
||||||
|
name of the action class that will be used to process this request.
|
||||||
|
</description>
|
||||||
|
<servlet-class>com.mycompany.mypackage.ControllerServlet</servlet-class>
|
||||||
|
<init-param>
|
||||||
|
<param-name>listOrders</param-name>
|
||||||
|
<param-value>com.mycompany.myactions.ListOrdersAction</param-value>
|
||||||
|
</init-param>
|
||||||
|
<init-param>
|
||||||
|
<param-name>saveCustomer</param-name>
|
||||||
|
<param-value>com.mycompany.myactions.SaveCustomerAction</param-value>
|
||||||
|
</init-param>
|
||||||
|
<!-- Load this servlet at server startup time -->
|
||||||
|
<load-on-startup>5</load-on-startup>
|
||||||
|
</servlet>
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>graph</servlet-name>
|
||||||
|
<description>
|
||||||
|
This servlet produces GIF images that are dynamically generated
|
||||||
|
graphs, based on the input parameters included on the request.
|
||||||
|
It is generally mapped to a specific request URI like "/graph".
|
||||||
|
</description>
|
||||||
|
</servlet>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Define mappings that are used by the servlet container to
|
||||||
|
translate a particular request URI (context-relative) to a
|
||||||
|
particular servlet. The examples below correspond to the
|
||||||
|
servlet descriptions above. Thus, a request URI like:
|
||||||
|
|
||||||
|
http://localhost:8080/{contextpath}/graph
|
||||||
|
|
||||||
|
will be mapped to the "graph" servlet, while a request like:
|
||||||
|
|
||||||
|
http://localhost:8080/{contextpath}/saveCustomer.do
|
||||||
|
|
||||||
|
will be mapped to the "controller" servlet.
|
||||||
|
|
||||||
|
You may define any number of servlet mappings, including zero.
|
||||||
|
It is also legal to define more than one mapping for the same
|
||||||
|
servlet, if you wish to.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>controller</servlet-name>
|
||||||
|
<url-pattern>*.do</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>graph</servlet-name>
|
||||||
|
<url-pattern>/graph</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Define the default session timeout for your application,
|
||||||
|
in minutes. From a servlet or JSP page, you can modify
|
||||||
|
the timeout for a particular session dynamically by using
|
||||||
|
HttpSession.getMaxInactiveInterval(). -->
|
||||||
|
|
||||||
|
<session-config>
|
||||||
|
<session-timeout>30</session-timeout> <!-- 30 minutes -->
|
||||||
|
</session-config>
|
||||||
|
|
||||||
|
|
||||||
|
</web-app>
|
|
@ -0,0 +1,190 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="./images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 (8.0.53) - Apache Portable Runtime (APR) based Native library for Tomcat</title><meta name="author" content="Remy Maucherat"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/apr">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="./images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="./images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="index.html">Docs Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>User Guide</h2><ul><li><a href="introduction.html">1) Introduction</a></li><li><a href="setup.html">2) Setup</a></li><li><a href="appdev/index.html">3) First webapp</a></li><li><a href="deployer-howto.html">4) Deployer</a></li><li><a href="manager-howto.html">5) Manager</a></li><li><a href="host-manager-howto.html">6) Host Manager</a></li><li><a href="realm-howto.html">7) Realms and AAA</a></li><li><a href="security-manager-howto.html">8) Security Manager</a></li><li><a href="jndi-resources-howto.html">9) JNDI Resources</a></li><li><a href="jndi-datasource-examples-howto.html">10) JDBC DataSources</a></li><li><a href="class-loader-howto.html">11) Classloading</a></li><li><a href="jasper-howto.html">12) JSPs</a></li><li><a href="ssl-howto.html">13) SSL/TLS</a></li><li><a href="ssi-howto.html">14) SSI</a></li><li><a href="cgi-howto.html">15) CGI</a></li><li><a href="proxy-howto.html">16) Proxy Support</a></li><li><a href="mbeans-descriptors-howto.html">17) MBeans Descriptors</a></li><li><a href="default-servlet.html">18) Default Servlet</a></li><li><a href="cluster-howto.html">19) Clustering</a></li><li><a href="balancer-howto.html">20) Load Balancer</a></li><li><a href="connectors.html">21) Connectors</a></li><li><a href="monitoring.html">22) Monitoring and Management</a></li><li><a href="logging.html">23) Logging</a></li><li><a href="apr.html">24) APR/Native</a></li><li><a href="virtual-hosting-howto.html">25) Virtual Hosting</a></li><li><a href="aio.html">26) Advanced IO</a></li><li><a href="extras.html">27) Additional Components</a></li><li><a href="maven-jars.html">28) Mavenized</a></li><li><a href="security-howto.html">29) Security Considerations</a></li><li><a href="windows-service-howto.html">30) Windows Service</a></li><li><a href="windows-auth-howto.html">31) Windows Authentication</a></li><li><a href="jdbc-pool.html">32) Tomcat's JDBC Pool</a></li><li><a href="web-socket-howto.html">33) WebSocket</a></li><li><a href="rewrite.html">34) Rewrite</a></li></ul></div><div><h2>Reference</h2><ul><li><a href="RELEASE-NOTES.txt">Release Notes</a></li><li><a href="config/index.html">Configuration</a></li><li><a href="api/index.html">Tomcat Javadocs</a></li><li><a href="servletapi/index.html">Servlet Javadocs</a></li><li><a href="jspapi/index.html">JSP 2.3 Javadocs</a></li><li><a href="elapi/index.html">EL 3.0 Javadocs</a></li><li><a href="websocketapi/index.html">WebSocket 1.1 Javadocs</a></li><li><a href="https://tomcat.apache.org/connectors-doc/">JK 1.2 Documentation</a></li></ul></div><div><h2>Apache Tomcat Development</h2><ul><li><a href="building.html">Building</a></li><li><a href="changelog.html">Changelog</a></li><li><a href="https://wiki.apache.org/tomcat/TomcatVersions">Status</a></li><li><a href="developers.html">Developers</a></li><li><a href="architecture/index.html">Architecture</a></li><li><a href="funcspecs/index.html">Functional Specs.</a></li><li><a href="tribes/introduction.html">Tribes</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Apache Portable Runtime (APR) based Native library for Tomcat</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Installation">Installation</a><ol><li><a href="#Windows">Windows</a></li><li><a href="#Linux">Linux</a></li></ol></li><li><a href="#APR_Components">APR Components</a></li><li><a href="#APR_Lifecycle_Listener_Configuration">APR Lifecycle Listener Configuration</a><ol><li><a href="#AprLifecycleListener">AprLifecycleListener</a></li></ol></li><li><a href="#APR_Connectors_Configuration">APR Connectors Configuration</a><ol><li><a href="#HTTP/HTTPS">HTTP/HTTPS</a></li><li><a href="#AJP">AJP</a></li></ol></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Tomcat can use the <a href="https://apr.apache.org/">Apache Portable Runtime</a> to
|
||||||
|
provide superior scalability, performance, and better integration with native server
|
||||||
|
technologies. The Apache Portable Runtime is a highly portable library that is at
|
||||||
|
the heart of Apache HTTP Server 2.x. APR has many uses, including access to advanced IO
|
||||||
|
functionality (such as sendfile, epoll and OpenSSL), OS level functionality (random number
|
||||||
|
generation, system status, etc), and native process handling (shared memory, NT
|
||||||
|
pipes and Unix sockets).
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
These features allows making Tomcat a general purpose webserver, will enable much better
|
||||||
|
integration with other native web technologies, and overall make Java much more viable as
|
||||||
|
a full fledged webserver platform rather than simply a backend focused technology.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div><h3 id="Installation">Installation</h3><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
APR support requires three main native components to be installed:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>APR library</li>
|
||||||
|
<li>JNI wrappers for APR used by Tomcat (libtcnative)</li>
|
||||||
|
<li>OpenSSL libraries</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Windows">Windows</h4><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Windows binaries are provided for tcnative-1, which is a statically compiled .dll which includes
|
||||||
|
OpenSSL and APR. It can be downloaded from <a href="https://tomcat.apache.org/download-native.cgi">here</a>
|
||||||
|
as 32bit or AMD x86-64 binaries.
|
||||||
|
In security conscious production environments, it is recommended to use separate shared dlls
|
||||||
|
for OpenSSL, APR, and libtcnative-1, and update them as needed according to security bulletins.
|
||||||
|
Windows OpenSSL binaries are linked from the <a href="https://www.openssl.org">Official OpenSSL
|
||||||
|
website</a> (see related/binaries).
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Linux">Linux</h4><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Most Linux distributions will ship packages for APR and OpenSSL. The JNI wrapper (libtcnative) will
|
||||||
|
then have to be compiled. It depends on APR, OpenSSL, and the Java headers.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Requirements:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>APR 1.2+ development headers (libapr1-dev package)</li>
|
||||||
|
<li>OpenSSL 0.9.7+ development headers (libssl-dev package)</li>
|
||||||
|
<li>JNI headers from Java compatible JDK 1.4+</li>
|
||||||
|
<li>GNU development environment (gcc, make)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The wrapper library sources are located in the Tomcat binary bundle, in the
|
||||||
|
<code>bin/tomcat-native.tar.gz</code> archive.
|
||||||
|
Once the build environment is installed and the source archive is extracted, the wrapper library
|
||||||
|
can be compiled using (from the folder containing the configure script):
|
||||||
|
</p>
|
||||||
|
<div class="codeBox"><pre><code>./configure && make && make install</code></pre></div>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><h3 id="APR_Components">APR Components</h3><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Once the libraries are properly installed and available to Java (if loading fails, the library path
|
||||||
|
will be displayed), the Tomcat connectors will automatically use APR. Configuration of the connectors
|
||||||
|
is similar to the regular connectors, but have a few extra attributes which are used to configure
|
||||||
|
APR components. Note that the defaults should be well tuned for most use cases, and additional
|
||||||
|
tweaking shouldn't be required.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
When APR is enabled, the following features are also enabled in Tomcat:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>Secure session ID generation by default on all platforms (platforms other than Linux required
|
||||||
|
random number generation using a configured entropy)</li>
|
||||||
|
<li>OS level statistics on memory usage and CPU usage by the Tomcat process are displayed by
|
||||||
|
the status servlet</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="APR_Lifecycle_Listener_Configuration">APR Lifecycle Listener Configuration</h3><div class="text">
|
||||||
|
<div class="subsection"><h4 id="AprLifecycleListener">AprLifecycleListener</h4><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">SSLEngine</code></td><td>
|
||||||
|
<p>
|
||||||
|
Name of the SSLEngine to use. off: Do not use SSL, on: Use SSL but no specific ENGINE.
|
||||||
|
The default value is <b>on</b>.
|
||||||
|
This initializes the native SSL engine, then enable the use of this engine in the connector
|
||||||
|
using the <code>SSLEnabled</code> attribute. Example:
|
||||||
|
</p>
|
||||||
|
<div class="codeBox"><pre><code><Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /></code></pre></div>
|
||||||
|
|
||||||
|
<p>See the <a href="http://www.openssl.org">Official OpenSSL
|
||||||
|
website</a> for more details on SSL hardware engines and manufacturers.
|
||||||
|
</p>
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
</div><h3 id="APR_Connectors_Configuration">APR Connectors Configuration</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="HTTP/HTTPS">HTTP/HTTPS</h4><div class="text">
|
||||||
|
|
||||||
|
<p>For HTTP configuration, see the <a href="config/http.html">HTTP</a>
|
||||||
|
connector configuration documentation.</p>
|
||||||
|
|
||||||
|
<p>For HTTPS configuration, see the
|
||||||
|
<a href="config/http.html#SSL_Support">HTTPS</a> connector configuration
|
||||||
|
documentation.</p>
|
||||||
|
|
||||||
|
<p>An example SSL Connector declaration is:</p>
|
||||||
|
<div class="codeBox"><pre><code><Connector port="443" maxHttpHeaderSize="8192"
|
||||||
|
maxThreads="150"
|
||||||
|
enableLookups="false" disableUploadTimeout="true"
|
||||||
|
acceptCount="100" scheme="https" secure="true"
|
||||||
|
SSLEnabled="true"
|
||||||
|
SSLCertificateFile="${catalina.base}/conf/localhost.crt"
|
||||||
|
SSLCertificateKeyFile="${catalina.base}/conf/localhost.key" /></code></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="AJP">AJP</h4><div class="text">
|
||||||
|
|
||||||
|
<p>For AJP configuration, see the <a href="config/ajp.html">AJP</a>
|
||||||
|
connector configuration documentation.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="./comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,77 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Architecture (8.0.53) - Table of Contents</title><meta name="author" content="Yoav Shapira"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/architecture/index">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Architecture</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Architecture Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Contents</h2><ul><li><a href="index.html">Contents</a></li><li><a href="overview.html">Overview</a></li><li><a href="startup.html">Server Startup</a></li><li><a href="requestProcess.html">Request Process</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Table of Contents</h2><h3 id="Preface">Preface</h3><div class="text">
|
||||||
|
|
||||||
|
<p>This section of the Tomcat documentation attempts to explain
|
||||||
|
the architecture and design of the Tomcat server. It includes significant
|
||||||
|
contributions from several tomcat developers:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>Yoav Shapira
|
||||||
|
(<a href="mailto:yoavs@apache.org">yoavs@apache.org</a>)</li>
|
||||||
|
<li>Jeanfrancois Arcand
|
||||||
|
(<a href="mailto:jfarcand@apache.org">jfarcand@apache.org</a>)</li>
|
||||||
|
<li>Filip Hanik
|
||||||
|
(<a href="mailto:fhanik@apache.org">fhanik@apache.org</a>)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
|
||||||
|
<p>The information presented is divided into the following sections:</p>
|
||||||
|
<ul>
|
||||||
|
<li><a href="overview.html"><strong>Overview</strong></a> -
|
||||||
|
An overview of the Tomcat server architecture with key terms
|
||||||
|
and concepts.</li>
|
||||||
|
<li><a href="startup.html"><strong>Server Startup</strong></a> -
|
||||||
|
A detailed description, with sequence diagrams, of how the Tomcat
|
||||||
|
server starts up.</li>
|
||||||
|
<li><a href="requestProcess.html"><strong>Request Process Flow</strong></a> -
|
||||||
|
A detailed description of how Tomcat handles a request.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,146 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Architecture (8.0.53) - Architecture Overview</title><meta name="author" content="Yoav Shapira"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/architecture/overview">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Architecture</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Architecture Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Contents</h2><ul><li><a href="index.html">Contents</a></li><li><a href="overview.html">Overview</a></li><li><a href="startup.html">Server Startup</a></li><li><a href="requestProcess.html">Request Process</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Architecture Overview</h2><h3 id="Overview">Overview</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
This page provides an overview of the Tomcat server architecture.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Terms">Terms</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Server">Server</h4><div class="text">
|
||||||
|
<p>
|
||||||
|
In the Tomcat world, a
|
||||||
|
<a href="../config/server.html">Server</a> represents the whole container.
|
||||||
|
Tomcat provides a default implementation of the
|
||||||
|
<a href="../api/org/apache/catalina/Server.html">Server interface</a>
|
||||||
|
which is rarely customized by users.
|
||||||
|
</p>
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Service">Service</h4><div class="text">
|
||||||
|
<p>
|
||||||
|
A <a href="../config/service.html">Service</a> is an intermediate component
|
||||||
|
which lives inside a Server and ties one or more Connectors to exactly one
|
||||||
|
Engine. The Service element is rarely customized by users, as the default
|
||||||
|
implementation is simple and sufficient:
|
||||||
|
<a href="../api/org/apache/catalina/Service.html">Service interface</a>.
|
||||||
|
</p>
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Engine">Engine</h4><div class="text">
|
||||||
|
<p>
|
||||||
|
An
|
||||||
|
<a href="../config/engine.html">Engine</a> represents request processing
|
||||||
|
pipeline for a specific Service. As a Service may have multiple Connectors,
|
||||||
|
the Engine receives and processes all requests from these connectors, handing
|
||||||
|
the response back to the appropriate connector for transmission to the client.
|
||||||
|
The <a href="../api/org/apache/catalina/Engine.html">Engine interface</a>
|
||||||
|
may be implemented to supply custom Engines, though this is uncommon.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Note that the Engine may be used for Tomcat server clustering via the
|
||||||
|
jvmRoute parameter. Read the Clustering documentation for more information.
|
||||||
|
</p>
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Host">Host</h4><div class="text">
|
||||||
|
<p>
|
||||||
|
A <a href="../config/host.html">Host</a> is an association of a network name,
|
||||||
|
e.g. www.yourcompany.com, to the Tomcat server. An Engine may contain
|
||||||
|
multiple hosts, and the Host element also supports network aliases such as
|
||||||
|
yourcompany.com and abc.yourcompany.com. Users rarely create custom
|
||||||
|
<a href="../api/org/apache/catalina/Host.html">Hosts</a>
|
||||||
|
because the
|
||||||
|
<a href="../api/org/apache/catalina/core/StandardHost.html">StandardHost
|
||||||
|
implementation</a> provides significant additional functionality.
|
||||||
|
</p>
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Connector">Connector</h4><div class="text">
|
||||||
|
<p>
|
||||||
|
A Connector handles communications with the client. There are multiple
|
||||||
|
connectors available with Tomcat. These include the
|
||||||
|
<a href="../config/http.html">HTTP connector</a> which is used for
|
||||||
|
most HTTP traffic, especially when running Tomcat as a standalone server,
|
||||||
|
and the <a href="../config/ajp.html">AJP connector</a> which implements
|
||||||
|
the AJP protocol used when connecting Tomcat to a web server such as
|
||||||
|
Apache HTTPD server. Creating a customized connector is a significant
|
||||||
|
effort.
|
||||||
|
</p>
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Context">Context</h4><div class="text">
|
||||||
|
<p>
|
||||||
|
A
|
||||||
|
<a href="../config/context.html">Context</a>
|
||||||
|
represents a web application. A Host may contain multiple
|
||||||
|
contexts, each with a unique path. The
|
||||||
|
<a href="../api/org/apache/catalina/Context.html">Context
|
||||||
|
interface</a> may be implemented to create custom Contexts, but
|
||||||
|
this is rarely the case because the
|
||||||
|
<a href="../api/org/apache/catalina/core/StandardContext.html">
|
||||||
|
StandardContext</a> provides significant additional functionality.
|
||||||
|
</p>
|
||||||
|
</div></div>
|
||||||
|
</div><h3 id="Comments">Comments</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
Tomcat is designed to be a fast and efficient implementation of the
|
||||||
|
Servlet Specification. Tomcat came about as the reference implementation
|
||||||
|
of this specification, and has remained rigorous in adhering to the
|
||||||
|
specification. At the same time, significant attention has been paid
|
||||||
|
to Tomcat's performance and it is now on par with other servlet containers,
|
||||||
|
including commercial ones.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
In recent releases of Tomcat, mostly starting with Tomcat 5,
|
||||||
|
we have begun efforts to make more aspects of Tomcat manageable via
|
||||||
|
JMX. In addition, the Manager and Admin webapps have been greatly
|
||||||
|
enhanced and improved. Manageability is a primary area of concern
|
||||||
|
for us as the product matures and the specification becomes more
|
||||||
|
stable.
|
||||||
|
</p>
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,85 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Architecture (8.0.53) - Request Process Flow</title><meta name="author" content="Yoav Shapira"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/architecture/requestProcess">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Architecture</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Architecture Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Contents</h2><ul><li><a href="index.html">Contents</a></li><li><a href="overview.html">Overview</a></li><li><a href="startup.html">Server Startup</a></li><li><a href="requestProcess.html">Request Process</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Request Process Flow</h2><h3 id="Request_Process_Flow">Request Process Flow</h3><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This page describes the process used by Tomcat to handle
|
||||||
|
an incoming request. This process is largely defined by
|
||||||
|
the Servlet Specification, which outlines the order
|
||||||
|
of events that must take place.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="description">description</h4><div class="text">
|
||||||
|
<p>
|
||||||
|
TODO
|
||||||
|
</p>
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="diagrams">diagrams</h4><div class="text">
|
||||||
|
<p>
|
||||||
|
A UML sequence diagram of the request process is available
|
||||||
|
<a href="requestProcess/request-process.png">here.</a>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
A UML sequence diagram of the authentication process is available
|
||||||
|
<a href="requestProcess/authentication-process.png">here.</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="comments">comments</h4><div class="text">
|
||||||
|
<p>
|
||||||
|
The Servlet Specification provides many opportunities for
|
||||||
|
listening in (using Listeners) or modifying (using Filters)
|
||||||
|
the request handling process even before the request arrives
|
||||||
|
at the servlet that will handle it.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 107 KiB |
|
@ -0,0 +1,84 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Architecture (8.0.53) - Startup</title><meta name="author" content="Yoav Shapira"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/architecture/startup">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Architecture</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Architecture Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Contents</h2><ul><li><a href="index.html">Contents</a></li><li><a href="overview.html">Overview</a></li><li><a href="startup.html">Server Startup</a></li><li><a href="requestProcess.html">Request Process</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Startup</h2><h3 id="Server_Startup">Server Startup</h3><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This page describes how the Tomcat server starts up. There are several
|
||||||
|
different ways to start tomcat, including:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>From the command line.</li>
|
||||||
|
<li>From a Java program as an embedded server.</li>
|
||||||
|
<li>Automatically as a Windows service.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="description">description</h4><div class="text">
|
||||||
|
<p>
|
||||||
|
A text description of the startup procedure is available
|
||||||
|
<a href="startup/serverStartup.txt">here.</a>
|
||||||
|
</p>
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="diagram">diagram</h4><div class="text">
|
||||||
|
<p>
|
||||||
|
A UML sequence diagram of the startup procedure is available
|
||||||
|
<a href="startup/serverStartup.pdf">here.</a>
|
||||||
|
</p>
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="comments">comments</h4><div class="text">
|
||||||
|
<p>
|
||||||
|
The startup process can be customized in many ways, both
|
||||||
|
by modifying Tomcat code and by implementing your own
|
||||||
|
LifecycleListeners which are then registered in the server.xml
|
||||||
|
configuration file.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,139 @@
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
Tomcat Startup Sequence
|
||||||
|
|
||||||
|
Sequence 1. Start from Command Line
|
||||||
|
Class: org.apache.catalina.startup.Bootstrap
|
||||||
|
What it does:
|
||||||
|
a) Set up classloaders
|
||||||
|
commonLoader (common)-> System Loader
|
||||||
|
sharedLoader (shared)-> commonLoader -> System Loader
|
||||||
|
catalinaLoader(server) -> commonLoader -> System Loader
|
||||||
|
(by default the commonLoader is used for the
|
||||||
|
sharedLoader and the serverLoader)
|
||||||
|
b) Load startup class (reflection)
|
||||||
|
org.apache.catalina.startup.Catalina
|
||||||
|
setParentClassloader -> sharedLoader
|
||||||
|
Thread.contextClassloader -> catalinaLoader
|
||||||
|
c) Bootstrap.daemon.init() complete
|
||||||
|
|
||||||
|
Sequence 2. Process command line argument (start, stop)
|
||||||
|
Class: org.apache.catalina.startup.Bootstrap (assume command->start)
|
||||||
|
What it does:
|
||||||
|
a) Catalina.setAwait(true);
|
||||||
|
b) Catalina.load()
|
||||||
|
b1) initDirs() -> set properties like
|
||||||
|
catalina.home
|
||||||
|
catalina.base == catalina.home (most cases)
|
||||||
|
b2) initNaming
|
||||||
|
setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY,
|
||||||
|
org.apache.naming.java.javaURLContextFactory ->default)
|
||||||
|
b3) createStartDigester()
|
||||||
|
Configures a digester for the main server.xml elements like
|
||||||
|
org.apache.catalina.core.StandardServer (can change of course :)
|
||||||
|
org.apache.catalina.deploy.NamingResources
|
||||||
|
Stores naming resources in the J2EE JNDI tree
|
||||||
|
org.apache.catalina.LifecycleListener
|
||||||
|
implements events for start/stop of major components
|
||||||
|
org.apache.catalina.core.StandardService
|
||||||
|
The single entry for a set of connectors,
|
||||||
|
so that a container can listen to multiple connectors
|
||||||
|
ie, single entry
|
||||||
|
org.apache.catalina.Connector
|
||||||
|
Connectors to listen for incoming requests only
|
||||||
|
It also adds the following rulesets to the digester
|
||||||
|
NamingRuleSet
|
||||||
|
EngineRuleSet
|
||||||
|
HostRuleSet
|
||||||
|
ContextRuleSet
|
||||||
|
b4) Load the server.xml and parse it using the digester
|
||||||
|
Parsing the server.xml using the digester is an automatic
|
||||||
|
XML-object mapping tool, that will create the objects defined in server.xml
|
||||||
|
Startup of the actual container has not started yet.
|
||||||
|
b5) Assigns System.out and System.err to the SystemLogHandler class
|
||||||
|
b6) Calls initialize on all components, this makes each object register itself with the
|
||||||
|
JMX agent.
|
||||||
|
During the process call the Connectors also initialize the adapters.
|
||||||
|
The adapters are the components that do the request pre-processing.
|
||||||
|
Typical adapters are HTTP1.1 (default if no protocol is specified,
|
||||||
|
org.apache.coyote.http11.Http11NioProtocol)
|
||||||
|
AJP1.3 for mod_jk etc.
|
||||||
|
|
||||||
|
c) Catalina.start()
|
||||||
|
c1) Starts the NamingContext and binds all JNDI references into it
|
||||||
|
c2) Starts the services under <Server> which are:
|
||||||
|
StandardService -> starts Engine (ContainerBase -> Realm,Cluster etc)
|
||||||
|
c3) StandardHost (started by the service)
|
||||||
|
Configures a ErrorReportValvem to do proper HTML output for different HTTP
|
||||||
|
errors codes
|
||||||
|
Starts the Valves in the pipeline (at least the ErrorReportValve)
|
||||||
|
Configures the StandardHostValve,
|
||||||
|
this valves ties the Webapp Class loader to the thread context
|
||||||
|
it also finds the session for the request
|
||||||
|
and invokes the context pipeline
|
||||||
|
Starts the HostConfig component
|
||||||
|
This component deploys all the webapps
|
||||||
|
(webapps & conf/Catalina/localhost/*.xml)
|
||||||
|
HostConfig will create a Digester for your context, this digester
|
||||||
|
will then invoke ContextConfig.start()
|
||||||
|
The ContextConfig.start() will process the default web.xml (conf/web.xml)
|
||||||
|
and then process the applications web.xml (WEB-INF/web.xml)
|
||||||
|
|
||||||
|
c4) During the lifetime of the container (StandardEngine) there is a background thread that
|
||||||
|
keeps checking if the context has changed. If a context changes (timestamp of war file,
|
||||||
|
context xml file, web.xml) then a reload is issued (stop/remove/deploy/start)
|
||||||
|
|
||||||
|
d) Tomcat receives a request on an HTTP port
|
||||||
|
d1) The request is received by a separate thread which is waiting in the ThreadPoolExecutor
|
||||||
|
class. It is waiting for a request in a regular ServerSocket.accept() method.
|
||||||
|
When a request is received, this thread wakes up.
|
||||||
|
d2) The ThreadPoolExecutor assigns the a TaskThread to handle the request.
|
||||||
|
It also supplies a JMX object name to the catalina container (not used I believe)
|
||||||
|
d3) The processor to handle the request in this case is Coyote Http11Processor,
|
||||||
|
and the process method is invoked.
|
||||||
|
This same processor is also continuing to check the input stream of the socket
|
||||||
|
until the keep alive point is reached or the connection is disconnected.
|
||||||
|
d4) The HTTP request is parsed using an internal buffer class (Http11InputBuffer)
|
||||||
|
The buffer class parses the request line, the headers, etc and store the result in a
|
||||||
|
Coyote request (not an HTTP request) This request contains all the HTTP info, such
|
||||||
|
as servername, port, scheme, etc.
|
||||||
|
d5) The processor contains a reference to an Adapter, in this case it is the
|
||||||
|
CoyoteAdapter. Once the request has been parsed, the Http11Processor
|
||||||
|
invokes service() on the adapter. In the service method, the Request contains a
|
||||||
|
CoyoteRequest and CoyoteResponse (null for the first time)
|
||||||
|
The CoyoteRequest(Response) implements HttpRequest(Response) and HttpServletRequest(Response)
|
||||||
|
The adapter parses and associates everything with the request, cookies, the context through a
|
||||||
|
Mapper, etc
|
||||||
|
d6) When the parsing is finished, the CoyoteAdapter invokes its container (StandardEngine)
|
||||||
|
and invokes the invoke(request,response) method.
|
||||||
|
This initiates the HTTP request into the Catalina container starting at the engine level
|
||||||
|
d7) The StandardEngine.invoke() simply invokes the container pipeline.invoke()
|
||||||
|
d8) By default the engine only has one valve the StandardEngineValve, this valve simply
|
||||||
|
invokes the invoke() method on the Host pipeline (StandardHost.getPipeLine())
|
||||||
|
d9) the StandardHost has two valves by default, the StandardHostValve and the ErrorReportValve
|
||||||
|
d10) The standard host valve associates the correct class loader with the current thread
|
||||||
|
It also retrieves the Manager and the session associated with the request (if there is one)
|
||||||
|
If there is a session access() is called to keep the session alive
|
||||||
|
d11) After that the StandardHostValve invokes the pipeline on the context associated
|
||||||
|
with the request.
|
||||||
|
d12) The first valve that gets invoked by the Context pipeline is the FormAuthenticator
|
||||||
|
valve. Then the StandardContextValve gets invoke.
|
||||||
|
The StandardContextValve invokes any context listeners associated with the context.
|
||||||
|
Next it invokes the pipeline on the Wrapper component (StandardWrapperValve)
|
||||||
|
d13) During the invocation of the StandardWrapperValve, the JSP wrapper (Jasper) gets invoked
|
||||||
|
This results in the actual compilation of the JSP.
|
||||||
|
And then invokes the actual servlet.
|
||||||
|
e) Invocation of the servlet class
|
|
@ -0,0 +1,61 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="./images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 (8.0.53) - Load Balancer HOW-TO</title><meta name="author" content="Yoav Shapira"><meta name="author" content="Remy Maucherat"><meta name="author" content="Andy Oliver"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/balancer-howto">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="./images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="./images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="index.html">Docs Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>User Guide</h2><ul><li><a href="introduction.html">1) Introduction</a></li><li><a href="setup.html">2) Setup</a></li><li><a href="appdev/index.html">3) First webapp</a></li><li><a href="deployer-howto.html">4) Deployer</a></li><li><a href="manager-howto.html">5) Manager</a></li><li><a href="host-manager-howto.html">6) Host Manager</a></li><li><a href="realm-howto.html">7) Realms and AAA</a></li><li><a href="security-manager-howto.html">8) Security Manager</a></li><li><a href="jndi-resources-howto.html">9) JNDI Resources</a></li><li><a href="jndi-datasource-examples-howto.html">10) JDBC DataSources</a></li><li><a href="class-loader-howto.html">11) Classloading</a></li><li><a href="jasper-howto.html">12) JSPs</a></li><li><a href="ssl-howto.html">13) SSL/TLS</a></li><li><a href="ssi-howto.html">14) SSI</a></li><li><a href="cgi-howto.html">15) CGI</a></li><li><a href="proxy-howto.html">16) Proxy Support</a></li><li><a href="mbeans-descriptors-howto.html">17) MBeans Descriptors</a></li><li><a href="default-servlet.html">18) Default Servlet</a></li><li><a href="cluster-howto.html">19) Clustering</a></li><li><a href="balancer-howto.html">20) Load Balancer</a></li><li><a href="connectors.html">21) Connectors</a></li><li><a href="monitoring.html">22) Monitoring and Management</a></li><li><a href="logging.html">23) Logging</a></li><li><a href="apr.html">24) APR/Native</a></li><li><a href="virtual-hosting-howto.html">25) Virtual Hosting</a></li><li><a href="aio.html">26) Advanced IO</a></li><li><a href="extras.html">27) Additional Components</a></li><li><a href="maven-jars.html">28) Mavenized</a></li><li><a href="security-howto.html">29) Security Considerations</a></li><li><a href="windows-service-howto.html">30) Windows Service</a></li><li><a href="windows-auth-howto.html">31) Windows Authentication</a></li><li><a href="jdbc-pool.html">32) Tomcat's JDBC Pool</a></li><li><a href="web-socket-howto.html">33) WebSocket</a></li><li><a href="rewrite.html">34) Rewrite</a></li></ul></div><div><h2>Reference</h2><ul><li><a href="RELEASE-NOTES.txt">Release Notes</a></li><li><a href="config/index.html">Configuration</a></li><li><a href="api/index.html">Tomcat Javadocs</a></li><li><a href="servletapi/index.html">Servlet Javadocs</a></li><li><a href="jspapi/index.html">JSP 2.3 Javadocs</a></li><li><a href="elapi/index.html">EL 3.0 Javadocs</a></li><li><a href="websocketapi/index.html">WebSocket 1.1 Javadocs</a></li><li><a href="https://tomcat.apache.org/connectors-doc/">JK 1.2 Documentation</a></li></ul></div><div><h2>Apache Tomcat Development</h2><ul><li><a href="building.html">Building</a></li><li><a href="changelog.html">Changelog</a></li><li><a href="https://wiki.apache.org/tomcat/TomcatVersions">Status</a></li><li><a href="developers.html">Developers</a></li><li><a href="architecture/index.html">Architecture</a></li><li><a href="funcspecs/index.html">Functional Specs.</a></li><li><a href="tribes/introduction.html">Tribes</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Load Balancer HOW-TO</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Using_the_JK_1.2.x_native_connector">Using the JK 1.2.x native connector</a></li><li><a href="#Using_Apache_HTTP_Server_2.x_with_mod_proxy">Using Apache HTTP Server 2.x with mod_proxy</a></li></ul>
|
||||||
|
</div><h3 id="Using_the_JK_1.2.x_native_connector">Using the JK 1.2.x native connector</h3><div class="text">
|
||||||
|
|
||||||
|
Please refer to the JK 1.2.x documentation.
|
||||||
|
|
||||||
|
</div><h3 id="Using_Apache_HTTP_Server_2.x_with_mod_proxy">Using Apache HTTP Server 2.x with mod_proxy</h3><div class="text">
|
||||||
|
|
||||||
|
Please refer to the mod_proxy documentation for Apache HTTP Server 2.2. This supports either
|
||||||
|
HTTP or AJP load balancing. This new version of mod_proxy is also usable with
|
||||||
|
Apache HTTP Server 2.0, but mod_proxy will have to be compiled separately using the code
|
||||||
|
from Apache HTTP Server 2.2.
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="./comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,278 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="./images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 (8.0.53) - Building Tomcat</title><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/building">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="./images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="./images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="index.html">Docs Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>User Guide</h2><ul><li><a href="introduction.html">1) Introduction</a></li><li><a href="setup.html">2) Setup</a></li><li><a href="appdev/index.html">3) First webapp</a></li><li><a href="deployer-howto.html">4) Deployer</a></li><li><a href="manager-howto.html">5) Manager</a></li><li><a href="host-manager-howto.html">6) Host Manager</a></li><li><a href="realm-howto.html">7) Realms and AAA</a></li><li><a href="security-manager-howto.html">8) Security Manager</a></li><li><a href="jndi-resources-howto.html">9) JNDI Resources</a></li><li><a href="jndi-datasource-examples-howto.html">10) JDBC DataSources</a></li><li><a href="class-loader-howto.html">11) Classloading</a></li><li><a href="jasper-howto.html">12) JSPs</a></li><li><a href="ssl-howto.html">13) SSL/TLS</a></li><li><a href="ssi-howto.html">14) SSI</a></li><li><a href="cgi-howto.html">15) CGI</a></li><li><a href="proxy-howto.html">16) Proxy Support</a></li><li><a href="mbeans-descriptors-howto.html">17) MBeans Descriptors</a></li><li><a href="default-servlet.html">18) Default Servlet</a></li><li><a href="cluster-howto.html">19) Clustering</a></li><li><a href="balancer-howto.html">20) Load Balancer</a></li><li><a href="connectors.html">21) Connectors</a></li><li><a href="monitoring.html">22) Monitoring and Management</a></li><li><a href="logging.html">23) Logging</a></li><li><a href="apr.html">24) APR/Native</a></li><li><a href="virtual-hosting-howto.html">25) Virtual Hosting</a></li><li><a href="aio.html">26) Advanced IO</a></li><li><a href="extras.html">27) Additional Components</a></li><li><a href="maven-jars.html">28) Mavenized</a></li><li><a href="security-howto.html">29) Security Considerations</a></li><li><a href="windows-service-howto.html">30) Windows Service</a></li><li><a href="windows-auth-howto.html">31) Windows Authentication</a></li><li><a href="jdbc-pool.html">32) Tomcat's JDBC Pool</a></li><li><a href="web-socket-howto.html">33) WebSocket</a></li><li><a href="rewrite.html">34) Rewrite</a></li></ul></div><div><h2>Reference</h2><ul><li><a href="RELEASE-NOTES.txt">Release Notes</a></li><li><a href="config/index.html">Configuration</a></li><li><a href="api/index.html">Tomcat Javadocs</a></li><li><a href="servletapi/index.html">Servlet Javadocs</a></li><li><a href="jspapi/index.html">JSP 2.3 Javadocs</a></li><li><a href="elapi/index.html">EL 3.0 Javadocs</a></li><li><a href="websocketapi/index.html">WebSocket 1.1 Javadocs</a></li><li><a href="https://tomcat.apache.org/connectors-doc/">JK 1.2 Documentation</a></li></ul></div><div><h2>Apache Tomcat Development</h2><ul><li><a href="building.html">Building</a></li><li><a href="changelog.html">Changelog</a></li><li><a href="https://wiki.apache.org/tomcat/TomcatVersions">Status</a></li><li><a href="developers.html">Developers</a></li><li><a href="architecture/index.html">Architecture</a></li><li><a href="funcspecs/index.html">Functional Specs.</a></li><li><a href="tribes/introduction.html">Tribes</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Building Tomcat</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Download_a_Java_Development_Kit_(JDK)_version_7">Download a Java Development Kit (JDK) version 7</a></li><li><a href="#Install_Apache_Ant_1.9.8_or_later">Install Apache Ant 1.9.8 or later</a></li><li><a href="#Checkout_or_obtain_the_Tomcat_source_code">Checkout or obtain the Tomcat source code</a></li><li><a href="#Configure_download_area">Configure download area</a></li><li><a href="#Building_Tomcat">Building Tomcat</a></li><li><a href="#Building_with_Eclipse">Building with Eclipse</a></li><li><a href="#Building_with_other_IDEs">Building with other IDEs</a></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Building Apache Tomcat from source is very easy, and is the first step to
|
||||||
|
contributing to Tomcat. The complete and comprehensive instructions are
|
||||||
|
provided in the file <a href="BUILDING.txt">BUILDING.txt</a>.
|
||||||
|
The following is a quick step by step guide.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div><h3 id="Download_a_Java_Development_Kit_(JDK)_version_7">Download a Java Development Kit (JDK) version 7</h3><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Building Apache Tomcat requires a JDK (version 7) to be installed. You can download one from<br>
|
||||||
|
<a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">http://www.oracle.com/technetwork/java/javase/downloads/index.html</a><br>
|
||||||
|
<a href="http://openjdk.java.net/install/index.html">http://openjdk.java.net/install/index.html</a><br>
|
||||||
|
or another JDK vendor.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<b>IMPORTANT</b>: Set an environment variable JAVA_HOME to the pathname of the
|
||||||
|
directory into which you installed the JDK release.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div><h3 id="Install_Apache_Ant_1.9.8_or_later">Install Apache Ant 1.9.8 or later</h3><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Download a binary distribution of Ant 1.9.8 or later from
|
||||||
|
<a href="https://ant.apache.org/bindownload.cgi">here</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Unpack the binary distribution into a convenient location so that the
|
||||||
|
Ant release resides in its own directory (conventionally named
|
||||||
|
<code>apache-ant-1.9.x</code>). For the remainder of this guide,
|
||||||
|
the symbolic name <code>${ant.home}</code> is used to refer to the full pathname of
|
||||||
|
the Ant installation directory.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<b>IMPORTANT</b>: Create an ANT_HOME environment variable to point the directory <code>${ant.home}</code>,
|
||||||
|
and modify the PATH environment variable to include directory
|
||||||
|
<code>${ant.home}/bin</code> in its list. This makes the <code>ant</code> command line script
|
||||||
|
available, which will be used to actually perform the build.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div><h3 id="Checkout_or_obtain_the_Tomcat_source_code">Checkout or obtain the Tomcat source code</h3><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Tomcat SVN repository URL:
|
||||||
|
<a href="https://svn.apache.org/repos/asf/tomcat/tc8.0.x/trunk/">https://svn.apache.org/repos/asf/tomcat/tc8.0.x/trunk/</a>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Tomcat source packages:
|
||||||
|
<a href="https://tomcat.apache.org/download-80.cgi">https://tomcat.apache.org/download-80.cgi</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Checkout the source using SVN, selecting a tag for released version or
|
||||||
|
trunk for the current development code, or download and unpack a
|
||||||
|
source package. For the remainder of this guide, the symbolic name
|
||||||
|
<code>${tomcat.source}</code> is used to refer to the
|
||||||
|
location where the source has been placed.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div><h3 id="Configure_download_area">Configure download area</h3><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Building Tomcat involves downloading a number of libraries that it depends on.
|
||||||
|
It is strongly recommended to configure download area for those libraries.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
By default the build is configured to download the dependencies into the
|
||||||
|
<code>${user.home}/tomcat-build-libs</code> directory. You can change this
|
||||||
|
(see below) but it must be an absolute path.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The build is controlled by creating a
|
||||||
|
<code>${tomcat.source}/build.properties</code> file. It can be used to
|
||||||
|
redefine any property that is present in <code>build.properties.default</code>
|
||||||
|
and <code>build.xml</code> files. The <code>build.properties</code> file
|
||||||
|
does not exist by default. You have to create it.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The download area is defined by property <code>base.path</code>. For example:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="codeBox"><pre><code># ----- Default Base Path for Dependent Packages -----
|
||||||
|
# Replace this path with the directory path where
|
||||||
|
# dependencies binaries should be downloaded.
|
||||||
|
base.path=/home/me/some-place-to-download-to</code></pre></div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Different versions of Tomcat are allowed to share the same download area.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Another example:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="codeBox"><pre><code>base.path=${user.dir}/../libraries-tomcat8.0</code></pre></div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Users who access the Internet through a proxy must use the properties
|
||||||
|
file to indicate to Ant the proxy configuration:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="codeBox"><pre><code># ----- Proxy setup -----
|
||||||
|
proxy.host=proxy.domain
|
||||||
|
proxy.port=8080
|
||||||
|
proxy.use=on</code></pre></div>
|
||||||
|
|
||||||
|
</div><h3 id="Building_Tomcat">Building Tomcat</h3><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Use the following commands to build Tomcat:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<code>cd ${tomcat.source}</code><br>
|
||||||
|
<code>ant</code>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Once the build has completed successfully, a usable Tomcat installation will have been
|
||||||
|
produced in the <code>${tomcat.source}/output/build</code> directory, and can be started
|
||||||
|
and stopped with the usual scripts.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Building_with_Eclipse">Building with Eclipse</h3><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<b>IMPORTANT:</b> This is not a supported means of building Tomcat; this information is
|
||||||
|
provided without warranty :-).
|
||||||
|
The only supported means of building Tomcat is with the Ant build described above.
|
||||||
|
However, some developers like to work on Java code with a Java IDE,
|
||||||
|
and the following steps have been used by some developers.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<b>NOTE:</b> This will not let you build everything under Eclipse;
|
||||||
|
the build process requires use of Ant for the many stages that aren't
|
||||||
|
simple Java compilations.
|
||||||
|
However, it will allow you to view and edit the Java code,
|
||||||
|
get warnings, reformat code, perform refactorings, run Tomcat
|
||||||
|
under the IDE, and so on.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<b>WARNING:</b> Do not forget to create and configure
|
||||||
|
<code>${tomcat.source}/build.properties</code> file as described above
|
||||||
|
before running any Ant targets.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Sample Eclipse project files and launch targets are provided in the
|
||||||
|
<code>res/ide-support/eclipse</code> directory of the source tree.
|
||||||
|
The instructions below will automatically copy these into the required locations.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
An Ant target is provided as a convenience to download all binary dependencies, and to create
|
||||||
|
the Eclipse project and classpath files in the root of the source tree.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<code>cd ${tomcat.source}</code><br>
|
||||||
|
<code>ant ide-eclipse</code>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Start Eclipse and create a new Workspace.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Open the <em>Preferences</em> dialog and then select <em>Java->Build Path->Classpath
|
||||||
|
Variables</em> to add two new <em>Classpath Variables</em>:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<table class="defaultTable">
|
||||||
|
<tr><td>TOMCAT_LIBS_BASE</td><td>The same location as the <code>base.path</code>
|
||||||
|
setting in <code>build.properties</code>, where the binary dependencies have been downloaded</td></tr>
|
||||||
|
<tr><td>ANT_HOME</td><td>the base path of Ant 1.9.8 or later</td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Use <em>File->Import</em> and choose <em>Existing Projects into Workspace</em>.
|
||||||
|
From there choose the root directory of the Tomcat source tree (<code>${tomcat.source}</code>)
|
||||||
|
and import the Tomcat project located there.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<code>start-tomcat</code> and <code>stop-tomcat</code> launch configurations are provided in
|
||||||
|
<code>res/ide-support/eclipse</code> and will be available in the <em>Run->Run Configurations</em>
|
||||||
|
dialog. Use these to start and stop Tomcat from Eclipse.
|
||||||
|
If you want to configure these yourself (or are using a different IDE)
|
||||||
|
then use <code>org.apache.catalina.startup.Bootstrap</code> as the main class,
|
||||||
|
<code>start</code>/<code>stop</code> etc. as program arguments, and specify <code>-Dcatalina.home=...</code>
|
||||||
|
(with the name of your build directory) as VM arguments.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Tweaking a few formatting preferences will make it much easier to keep consistent with Tomcat
|
||||||
|
coding conventions (and have your contributions accepted):
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<table class="defaultTable">
|
||||||
|
<tr><td>Java -> Code Style -> Formatter -> Edit...</td>
|
||||||
|
<td>Tab policy: Spaces only<br>Tab and Indentation size: 4</td></tr>
|
||||||
|
<tr><td>General -> Editors -> Text Editors</td>
|
||||||
|
<td>Displayed tab width: 2<br>Insert spaces for tabs<br>Show whitespace characters (optional)</td></tr>
|
||||||
|
<tr><td>XML -> XML Files -> Editor</td><td>Indent using spaces<br>Indentation size: 2</td></tr>
|
||||||
|
<tr><td>Ant -> Editor -> Formatter</td><td>Tab size: 2<br>Use tab character instead of spaces: unchecked</td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The recommended configuration of Compiler Warnings is documented in
|
||||||
|
<code>res/ide-support/eclipse/java-compiler-errors-warnings.txt</code> file.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div><h3 id="Building_with_other_IDEs">Building with other IDEs</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
The same general approach should work for most IDEs; it has been reported
|
||||||
|
to work in IntelliJ IDEA, for example.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="./comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,154 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="./images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 (8.0.53) - CGI How To</title><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/cgi-howto">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="./images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="./images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="index.html">Docs Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>User Guide</h2><ul><li><a href="introduction.html">1) Introduction</a></li><li><a href="setup.html">2) Setup</a></li><li><a href="appdev/index.html">3) First webapp</a></li><li><a href="deployer-howto.html">4) Deployer</a></li><li><a href="manager-howto.html">5) Manager</a></li><li><a href="host-manager-howto.html">6) Host Manager</a></li><li><a href="realm-howto.html">7) Realms and AAA</a></li><li><a href="security-manager-howto.html">8) Security Manager</a></li><li><a href="jndi-resources-howto.html">9) JNDI Resources</a></li><li><a href="jndi-datasource-examples-howto.html">10) JDBC DataSources</a></li><li><a href="class-loader-howto.html">11) Classloading</a></li><li><a href="jasper-howto.html">12) JSPs</a></li><li><a href="ssl-howto.html">13) SSL/TLS</a></li><li><a href="ssi-howto.html">14) SSI</a></li><li><a href="cgi-howto.html">15) CGI</a></li><li><a href="proxy-howto.html">16) Proxy Support</a></li><li><a href="mbeans-descriptors-howto.html">17) MBeans Descriptors</a></li><li><a href="default-servlet.html">18) Default Servlet</a></li><li><a href="cluster-howto.html">19) Clustering</a></li><li><a href="balancer-howto.html">20) Load Balancer</a></li><li><a href="connectors.html">21) Connectors</a></li><li><a href="monitoring.html">22) Monitoring and Management</a></li><li><a href="logging.html">23) Logging</a></li><li><a href="apr.html">24) APR/Native</a></li><li><a href="virtual-hosting-howto.html">25) Virtual Hosting</a></li><li><a href="aio.html">26) Advanced IO</a></li><li><a href="extras.html">27) Additional Components</a></li><li><a href="maven-jars.html">28) Mavenized</a></li><li><a href="security-howto.html">29) Security Considerations</a></li><li><a href="windows-service-howto.html">30) Windows Service</a></li><li><a href="windows-auth-howto.html">31) Windows Authentication</a></li><li><a href="jdbc-pool.html">32) Tomcat's JDBC Pool</a></li><li><a href="web-socket-howto.html">33) WebSocket</a></li><li><a href="rewrite.html">34) Rewrite</a></li></ul></div><div><h2>Reference</h2><ul><li><a href="RELEASE-NOTES.txt">Release Notes</a></li><li><a href="config/index.html">Configuration</a></li><li><a href="api/index.html">Tomcat Javadocs</a></li><li><a href="servletapi/index.html">Servlet Javadocs</a></li><li><a href="jspapi/index.html">JSP 2.3 Javadocs</a></li><li><a href="elapi/index.html">EL 3.0 Javadocs</a></li><li><a href="websocketapi/index.html">WebSocket 1.1 Javadocs</a></li><li><a href="https://tomcat.apache.org/connectors-doc/">JK 1.2 Documentation</a></li></ul></div><div><h2>Apache Tomcat Development</h2><ul><li><a href="building.html">Building</a></li><li><a href="changelog.html">Changelog</a></li><li><a href="https://wiki.apache.org/tomcat/TomcatVersions">Status</a></li><li><a href="developers.html">Developers</a></li><li><a href="architecture/index.html">Architecture</a></li><li><a href="funcspecs/index.html">Functional Specs.</a></li><li><a href="tribes/introduction.html">Tribes</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>CGI How To</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Installation">Installation</a></li><li><a href="#Configuration">Configuration</a></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
|
||||||
|
<p>The CGI (Common Gateway Interface) defines a way for a web server to
|
||||||
|
interact with external content-generating programs, which are often
|
||||||
|
referred to as CGI programs or CGI scripts.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>Within Tomcat, CGI support can be added when you are using Tomcat as your
|
||||||
|
HTTP server and require CGI support. Typically this is done
|
||||||
|
during development when you don't want to run a web server like
|
||||||
|
Apache httpd.
|
||||||
|
Tomcat's CGI support is largely compatible with Apache httpd's,
|
||||||
|
but there are some limitations (e.g., only one cgi-bin directory).
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>CGI support is implemented using the servlet class
|
||||||
|
<code>org.apache.catalina.servlets.CGIServlet</code>. Traditionally,
|
||||||
|
this servlet is mapped to the URL pattern "/cgi-bin/*".</p>
|
||||||
|
|
||||||
|
<p>By default CGI support is disabled in Tomcat.</p>
|
||||||
|
</div><h3 id="Installation">Installation</h3><div class="text">
|
||||||
|
|
||||||
|
<p><strong>CAUTION</strong> - CGI scripts are used to execute programs
|
||||||
|
external to the Tomcat JVM. If you are using the Java SecurityManager this
|
||||||
|
will bypass your security policy configuration in <code>catalina.policy.</code></p>
|
||||||
|
|
||||||
|
<p>To enable CGI support:</p>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li><p>There are commented-out sample servlet and servlet-mapping elements for
|
||||||
|
CGI servlet in the default <code>$CATALINA_BASE/conf/web.xml</code> file.
|
||||||
|
To enable CGI support in your web application, copy that servlet and
|
||||||
|
servlet-mapping declarations into <code>WEB-INF/web.xml</code> file of your
|
||||||
|
web application.</p>
|
||||||
|
|
||||||
|
<p>Uncommenting the servlet and servlet-mapping in
|
||||||
|
<code>$CATALINA_BASE/conf/web.xml</code> file enables CGI for all installed
|
||||||
|
web applications at once.</p>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li><p>Set <code>privileged="true"</code> on the Context element for your
|
||||||
|
web application.</p>
|
||||||
|
|
||||||
|
<p>Only Contexts which are marked as privileged are allowed to use the
|
||||||
|
CGI servlet. Note that modifying the global <code>$CATALINA_BASE/conf/context.xml</code>
|
||||||
|
file affects all web applications. See
|
||||||
|
<a href="config/context.html">Context documentation</a> for details.</p>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
</div><h3 id="Configuration">Configuration</h3><div class="text">
|
||||||
|
|
||||||
|
<p>There are several servlet init parameters which can be used to
|
||||||
|
configure the behaviour of the CGI servlet.</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>cgiPathPrefix</strong> - The CGI search path will start at
|
||||||
|
the web application root directory + File.separator + this prefix.
|
||||||
|
By default there is no value, which results in the web application root
|
||||||
|
directory being used as the search path. The recommended value is
|
||||||
|
<code>WEB-INF/cgi</code></li>
|
||||||
|
<li><strong>enableCmdLineArguments</strong> - Are command line parameters
|
||||||
|
generated from the query string as per section 4.4 of 3875 RFC? The default is
|
||||||
|
<code>true</code>.</li>
|
||||||
|
<li><strong>environment-variable-</strong> - An environment to be set for the
|
||||||
|
execution environment of the CGI script. The name of variable is taken from the
|
||||||
|
parameter name. To configure an environment variable named FOO, configure a
|
||||||
|
parameter named environment-variable-FOO. The parameter value is used as the
|
||||||
|
environment variable value. The default is no environment variables.</li>
|
||||||
|
<li><strong>executable</strong> - The name of the executable to be used to
|
||||||
|
run the script. You may explicitly set this parameter to be an empty string
|
||||||
|
if your script is itself executable (e.g. an exe file). Default is
|
||||||
|
<code>perl</code>.</li>
|
||||||
|
<li><strong>executable-arg-1</strong>, <strong>executable-arg-2</strong>,
|
||||||
|
and so on - additional arguments for the executable. These precede the
|
||||||
|
CGI script name. By default there are no additional arguments.</li>
|
||||||
|
<li><strong>envHttpHeaders</strong> - A regular expression used to select the
|
||||||
|
HTTP headers passed to the CGI process as environment variables. Note that
|
||||||
|
headers are converted to upper case before matching and that the entire header
|
||||||
|
name must match the pattern. Default is
|
||||||
|
<code>ACCEPT[-0-9A-Z]*|CACHE-CONTROL|COOKIE|HOST|IF-[-0-9A-Z]*|REFERER|USER-AGENT</code>
|
||||||
|
</li>
|
||||||
|
<li><strong>parameterEncoding</strong> - Name of the parameter encoding
|
||||||
|
to be used with the CGI servlet. Default is
|
||||||
|
<code>System.getProperty("file.encoding","UTF-8")</code>. That is the system
|
||||||
|
default encoding, or UTF-8 if that system property is not available.</li>
|
||||||
|
<li><strong>passShellEnvironment</strong> - Should the shell environment
|
||||||
|
variables from Tomcat process (if any) be passed to the CGI script? Default is
|
||||||
|
<code>false</code>.</li>
|
||||||
|
<li><strong>stderrTimeout</strong> - The time (in milliseconds) to wait for
|
||||||
|
the reading of stderr to complete before terminating the CGI process. Default
|
||||||
|
is <code>2000</code>.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>The CGI script executed depends on the configuration of the CGI Servlet and
|
||||||
|
how the request is mapped to the CGI Servlet. The CGI search path starts at the
|
||||||
|
web application root directory + File.separator + cgiPathPrefix. The
|
||||||
|
<strong>pathInfo</strong> is then searched unless it is <code>null</code> - in
|
||||||
|
which case the <strong>servletPath</strong> is searched.</p>
|
||||||
|
|
||||||
|
<p>The search starts with the first path segment and expands one path segment
|
||||||
|
at a time until no path segments are left (resulting in a 404) or a script is
|
||||||
|
found. Any remaining path segments are passed to the script in the
|
||||||
|
<strong>PATH_INFO</strong> environment variable.</p>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="./comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,262 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="./images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 (8.0.53) - Class Loader HOW-TO</title><meta name="author" content="Craig R. McClanahan"><meta name="author" content="Yoav Shapira"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/class-loader-howto">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="./images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="./images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="index.html">Docs Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>User Guide</h2><ul><li><a href="introduction.html">1) Introduction</a></li><li><a href="setup.html">2) Setup</a></li><li><a href="appdev/index.html">3) First webapp</a></li><li><a href="deployer-howto.html">4) Deployer</a></li><li><a href="manager-howto.html">5) Manager</a></li><li><a href="host-manager-howto.html">6) Host Manager</a></li><li><a href="realm-howto.html">7) Realms and AAA</a></li><li><a href="security-manager-howto.html">8) Security Manager</a></li><li><a href="jndi-resources-howto.html">9) JNDI Resources</a></li><li><a href="jndi-datasource-examples-howto.html">10) JDBC DataSources</a></li><li><a href="class-loader-howto.html">11) Classloading</a></li><li><a href="jasper-howto.html">12) JSPs</a></li><li><a href="ssl-howto.html">13) SSL/TLS</a></li><li><a href="ssi-howto.html">14) SSI</a></li><li><a href="cgi-howto.html">15) CGI</a></li><li><a href="proxy-howto.html">16) Proxy Support</a></li><li><a href="mbeans-descriptors-howto.html">17) MBeans Descriptors</a></li><li><a href="default-servlet.html">18) Default Servlet</a></li><li><a href="cluster-howto.html">19) Clustering</a></li><li><a href="balancer-howto.html">20) Load Balancer</a></li><li><a href="connectors.html">21) Connectors</a></li><li><a href="monitoring.html">22) Monitoring and Management</a></li><li><a href="logging.html">23) Logging</a></li><li><a href="apr.html">24) APR/Native</a></li><li><a href="virtual-hosting-howto.html">25) Virtual Hosting</a></li><li><a href="aio.html">26) Advanced IO</a></li><li><a href="extras.html">27) Additional Components</a></li><li><a href="maven-jars.html">28) Mavenized</a></li><li><a href="security-howto.html">29) Security Considerations</a></li><li><a href="windows-service-howto.html">30) Windows Service</a></li><li><a href="windows-auth-howto.html">31) Windows Authentication</a></li><li><a href="jdbc-pool.html">32) Tomcat's JDBC Pool</a></li><li><a href="web-socket-howto.html">33) WebSocket</a></li><li><a href="rewrite.html">34) Rewrite</a></li></ul></div><div><h2>Reference</h2><ul><li><a href="RELEASE-NOTES.txt">Release Notes</a></li><li><a href="config/index.html">Configuration</a></li><li><a href="api/index.html">Tomcat Javadocs</a></li><li><a href="servletapi/index.html">Servlet Javadocs</a></li><li><a href="jspapi/index.html">JSP 2.3 Javadocs</a></li><li><a href="elapi/index.html">EL 3.0 Javadocs</a></li><li><a href="websocketapi/index.html">WebSocket 1.1 Javadocs</a></li><li><a href="https://tomcat.apache.org/connectors-doc/">JK 1.2 Documentation</a></li></ul></div><div><h2>Apache Tomcat Development</h2><ul><li><a href="building.html">Building</a></li><li><a href="changelog.html">Changelog</a></li><li><a href="https://wiki.apache.org/tomcat/TomcatVersions">Status</a></li><li><a href="developers.html">Developers</a></li><li><a href="architecture/index.html">Architecture</a></li><li><a href="funcspecs/index.html">Functional Specs.</a></li><li><a href="tribes/introduction.html">Tribes</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Class Loader HOW-TO</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Overview">Overview</a></li><li><a href="#Class_Loader_Definitions">Class Loader Definitions</a></li><li><a href="#XML_Parsers_and_Java">XML Parsers and Java</a></li><li><a href="#Running_under_a_security_manager">Running under a security manager</a></li></ul>
|
||||||
|
</div><h3 id="Overview">Overview</h3><div class="text">
|
||||||
|
|
||||||
|
<p>Like many server applications, Tomcat installs a variety of class loaders
|
||||||
|
(that is, classes that implement <code>java.lang.ClassLoader</code>) to allow
|
||||||
|
different portions of the container, and the web applications running on the
|
||||||
|
container, to have access to different repositories of available classes and
|
||||||
|
resources. This mechanism is used to provide the functionality defined in the
|
||||||
|
Servlet Specification, version 2.4 — in particular, Sections 9.4
|
||||||
|
and 9.6.</p>
|
||||||
|
|
||||||
|
<p>In a Java environment, class loaders are
|
||||||
|
arranged in a parent-child tree. Normally, when a class loader is asked to
|
||||||
|
load a particular class or resource, it delegates the request to a parent
|
||||||
|
class loader first, and then looks in its own repositories only if the parent
|
||||||
|
class loader(s) cannot find the requested class or resource. Note, that the
|
||||||
|
model for web application class loaders <em>differs</em> slightly from this,
|
||||||
|
as discussed below, but the main principles are the same.</p>
|
||||||
|
|
||||||
|
<p>When Tomcat is started, it creates a set of class loaders that are
|
||||||
|
organized into the following parent-child relationships, where the parent
|
||||||
|
class loader is above the child class loader:</p>
|
||||||
|
|
||||||
|
<div class="codeBox"><pre><code> Bootstrap
|
||||||
|
|
|
||||||
|
System
|
||||||
|
|
|
||||||
|
Common
|
||||||
|
/ \
|
||||||
|
Webapp1 Webapp2 ...</code></pre></div>
|
||||||
|
|
||||||
|
<p>The characteristics of each of these class loaders, including the source
|
||||||
|
of classes and resources that they make visible, are discussed in detail in
|
||||||
|
the following section.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Class_Loader_Definitions">Class Loader Definitions</h3><div class="text">
|
||||||
|
|
||||||
|
<p>As indicated in the diagram above, Tomcat creates the following class
|
||||||
|
loaders as it is initialized:</p>
|
||||||
|
<ul>
|
||||||
|
<li><p><strong>Bootstrap</strong> — This class loader contains the basic
|
||||||
|
runtime classes provided by the Java Virtual Machine, plus any classes from
|
||||||
|
JAR files present in the System Extensions directory
|
||||||
|
(<code>$JAVA_HOME/jre/lib/ext</code>). <em>Note</em>: some JVMs may
|
||||||
|
implement this as more than one class loader, or it may not be visible
|
||||||
|
(as a class loader) at all.</p></li>
|
||||||
|
<li><p><strong>System</strong> — This class loader is normally initialized
|
||||||
|
from the contents of the <code>CLASSPATH</code> environment variable. All
|
||||||
|
such classes are visible to both Tomcat internal classes, and to web
|
||||||
|
applications. However, the standard Tomcat startup scripts
|
||||||
|
(<code>$CATALINA_HOME/bin/catalina.sh</code> or
|
||||||
|
<code>%CATALINA_HOME%\bin\catalina.bat</code>) totally ignore the contents
|
||||||
|
of the <code>CLASSPATH</code> environment variable itself, and instead
|
||||||
|
build the System class loader from the following repositories:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li><p><em>$CATALINA_HOME/bin/bootstrap.jar</em> — Contains the
|
||||||
|
main() method that is used to initialize the Tomcat server, and the
|
||||||
|
class loader implementation classes it depends on.</p></li>
|
||||||
|
<li><p><em>$CATALINA_BASE/bin/tomcat-juli.jar</em> or
|
||||||
|
<em>$CATALINA_HOME/bin/tomcat-juli.jar</em> — Logging
|
||||||
|
implementation classes. These include enhancement classes to
|
||||||
|
<code>java.util.logging</code> API, known as Tomcat JULI,
|
||||||
|
and a package-renamed copy of Apache Commons Logging library
|
||||||
|
used internally by Tomcat.
|
||||||
|
See <a href="logging.html">logging documentation</a> for more
|
||||||
|
details.</p>
|
||||||
|
<p>If <code>tomcat-juli.jar</code> is present in
|
||||||
|
<em>$CATALINA_BASE/bin</em>, it is used instead of the one in
|
||||||
|
<em>$CATALINA_HOME/bin</em>. It is useful in certain logging
|
||||||
|
configurations</p></li>
|
||||||
|
<li><p><em>$CATALINA_HOME/bin/commons-daemon.jar</em> — The classes
|
||||||
|
from <a href="https://commons.apache.org/daemon/">Apache Commons
|
||||||
|
Daemon</a> project.
|
||||||
|
This JAR file is not present in the <code>CLASSPATH</code> built by
|
||||||
|
<code>catalina.bat</code>|<code>.sh</code> scripts, but is referenced
|
||||||
|
from the manifest file of <em>bootstrap.jar</em>.</p></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Common</strong> — This class loader contains additional
|
||||||
|
classes that are made visible to both Tomcat internal classes and to all
|
||||||
|
web applications.</p>
|
||||||
|
<p>Normally, application classes should <strong>NOT</strong>
|
||||||
|
be placed here. The locations searched by this class loader are defined by
|
||||||
|
the <code>common.loader</code> property in
|
||||||
|
$CATALINA_BASE/conf/catalina.properties. The default setting will search the
|
||||||
|
following locations in the order they are listed:</p>
|
||||||
|
<ul>
|
||||||
|
<li>unpacked classes and resources in <code>$CATALINA_BASE/lib</code></li>
|
||||||
|
<li>JAR files in <code>$CATALINA_BASE/lib</code></li>
|
||||||
|
<li>unpacked classes and resources in <code>$CATALINA_HOME/lib</code></li>
|
||||||
|
<li>JAR files in <code>$CATALINA_HOME/lib</code></li>
|
||||||
|
</ul>
|
||||||
|
<p>By default, this includes the following:</p>
|
||||||
|
<ul>
|
||||||
|
<li><em>annotations-api.jar</em> — JavaEE annotations classes.</li>
|
||||||
|
<li><em>catalina.jar</em> — Implementation of the Catalina servlet
|
||||||
|
container portion of Tomcat.</li>
|
||||||
|
<li><em>catalina-ant.jar</em> — Tomcat Catalina Ant tasks.</li>
|
||||||
|
<li><em>catalina-ha.jar</em> — High availability package.</li>
|
||||||
|
<li><em>catalina-storeconfig.jar</em> — Generation of XML
|
||||||
|
configuration files from current state</li>
|
||||||
|
<li><em>catalina-tribes.jar</em> — Group communication package.</li>
|
||||||
|
<li><em>ecj-*.jar</em> — Eclipse JDT Java compiler.</li>
|
||||||
|
<li><em>el-api.jar</em> — EL 3.0 API.</li>
|
||||||
|
<li><em>jasper.jar</em> — Tomcat Jasper JSP Compiler and Runtime.</li>
|
||||||
|
<li><em>jasper-el.jar</em> — Tomcat Jasper EL implementation.</li>
|
||||||
|
<li><em>jsp-api.jar</em> — JSP 2.3 API.</li>
|
||||||
|
<li><em>servlet-api.jar</em> — Servlet 3.1 API.</li>
|
||||||
|
<li><em>tomcat-api.jar</em> — Several interfaces defined by Tomcat.</li>
|
||||||
|
<li><em>tomcat-coyote.jar</em> — Tomcat connectors and utility classes.</li>
|
||||||
|
<li><em>tomcat-dbcp.jar</em> — Database connection pool
|
||||||
|
implementation based on package-renamed copy of Apache Commons Pool
|
||||||
|
and Apache Commons DBCP.</li>
|
||||||
|
<li><em>tomcat-i18n-**.jar</em> — Optional JARs containing resource bundles
|
||||||
|
for other languages. As default bundles are also included in each
|
||||||
|
individual JAR, they can be safely removed if no internationalization
|
||||||
|
of messages is needed.</li>
|
||||||
|
<li><em>tomcat-jdbc.jar</em> — An alternative database connection pool
|
||||||
|
implementation, known as Tomcat JDBC pool. See
|
||||||
|
<a href="jdbc-pool.html">documentation</a> for more details.</li>
|
||||||
|
<li><em>tomcat-util.jar</em> — Common classes used by various components of
|
||||||
|
Apache Tomcat.</li>
|
||||||
|
<li><em>tomcat-websocket.jar</em> — WebSocket 1.1 implementation</li>
|
||||||
|
<li><em>websocket-api.jar</em> — WebSocket 1.1 API</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><p><strong>WebappX</strong> — A class loader is created for each web
|
||||||
|
application that is deployed in a single Tomcat instance. All unpacked
|
||||||
|
classes and resources in the <code>/WEB-INF/classes</code> directory of
|
||||||
|
your web application, plus classes and resources in JAR files
|
||||||
|
under the <code>/WEB-INF/lib</code> directory of your web application,
|
||||||
|
are made visible to this web application, but not to other ones.</p></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>As mentioned above, the web application class loader diverges from the
|
||||||
|
default Java delegation model (in accordance with the recommendations in the
|
||||||
|
Servlet Specification, version 2.4, section 9.7.2 Web Application Classloader).
|
||||||
|
When a request to load a
|
||||||
|
class from the web application's <em>WebappX</em> class loader is processed,
|
||||||
|
this class loader will look in the local repositories <strong>first</strong>,
|
||||||
|
instead of delegating before looking. There are exceptions. Classes which are
|
||||||
|
part of the JRE base classes cannot be overridden. For some classes (such as
|
||||||
|
the XML parser components in J2SE 1.4+), the Java endorsed feature can be
|
||||||
|
used up to Java 8.
|
||||||
|
Lastly, the web application class loader will always delegate first for JavaEE
|
||||||
|
API classes for the specifications implemented by Tomcat
|
||||||
|
(Servlet, JSP, EL, WebSocket). All other class loaders in Tomcat follow the
|
||||||
|
usual delegation pattern.</p>
|
||||||
|
|
||||||
|
<p>Therefore, from the perspective of a web application, class or resource
|
||||||
|
loading looks in the following repositories, in this order:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Bootstrap classes of your JVM</li>
|
||||||
|
<li><em>/WEB-INF/classes</em> of your web application</li>
|
||||||
|
<li><em>/WEB-INF/lib/*.jar</em> of your web application</li>
|
||||||
|
<li>System class loader classes (described above)</li>
|
||||||
|
<li>Common class loader classes (described above)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>If the web application class loader is
|
||||||
|
<a href="config/loader.html">configured</a> with
|
||||||
|
<code><Loader delegate="true"/></code>
|
||||||
|
then the order becomes:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Bootstrap classes of your JVM</li>
|
||||||
|
<li>System class loader classes (described above)</li>
|
||||||
|
<li>Common class loader classes (described above)</li>
|
||||||
|
<li><em>/WEB-INF/classes</em> of your web application</li>
|
||||||
|
<li><em>/WEB-INF/lib/*.jar</em> of your web application</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="XML_Parsers_and_Java">XML Parsers and Java</h3><div class="text">
|
||||||
|
|
||||||
|
<p>Starting with Java 1.4 a copy of JAXP APIs and an XML parser are packed
|
||||||
|
inside the JRE. This has impacts on applications that wish to use their own
|
||||||
|
XML parser.</p>
|
||||||
|
|
||||||
|
<p>In old versions of Tomcat, you could simply replace the XML parser
|
||||||
|
in the Tomcat libraries directory to change the parser
|
||||||
|
used by all web applications. However, this technique will not be effective
|
||||||
|
when you are running modern versions of Java, because the usual class loader
|
||||||
|
delegation process will always choose the implementation inside the JDK in
|
||||||
|
preference to this one.</p>
|
||||||
|
|
||||||
|
<p>Java supports a mechanism called the "Endorsed Standards Override
|
||||||
|
Mechanism" to allow replacement of APIs created outside of the JCP
|
||||||
|
(i.e. DOM and SAX from W3C). It can also be used to update the XML parser
|
||||||
|
implementation. For more information, see:
|
||||||
|
<a href="http://docs.oracle.com/javase/1.5.0/docs/guide/standards/index.html">
|
||||||
|
http://docs.oracle.com/javase/1.5.0/docs/guide/standards/index.html</a>.</p>
|
||||||
|
|
||||||
|
<p>Tomcat utilizes this mechanism by including the system property setting
|
||||||
|
<code>-Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS</code> in the
|
||||||
|
command line that starts the container. The default value of this option is
|
||||||
|
<em>$CATALINA_HOME/endorsed</em>. This <em>endorsed</em> directory is not
|
||||||
|
created by default. Note that the endorsed feature is no longer supported
|
||||||
|
with Java 9 and the above system property will only be set if either the
|
||||||
|
directory <em>$CATALINA_HOME/endorsed</em> exists, or the variable
|
||||||
|
<code>JAVA_ENDORSED_DIRS</code> has been set.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>Note that overriding any JRE component carries risk. If the overriding
|
||||||
|
component does not provide a 100% compatible API (e.g. the API provided by
|
||||||
|
Xerces is not 100% compatible with the XML API provided by the JRE) then there
|
||||||
|
is a risk that Tomcat and/or the deployed application will experience errors.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Running_under_a_security_manager">Running under a security manager</h3><div class="text">
|
||||||
|
|
||||||
|
<p>When running under a security manager the locations from which classes
|
||||||
|
are permitted to be loaded will also depend on the contents of your policy
|
||||||
|
file. See <a href="security-manager-howto.html">Security Manager HOW-TO</a>
|
||||||
|
for further information.</p>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="./comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,668 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="./images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 (8.0.53) - Clustering/Session Replication HOW-TO</title><meta name="author" content="Filip Hanik"><meta name="author" content="Peter Rossbach"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/cluster-howto">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="./images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="./images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="index.html">Docs Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>User Guide</h2><ul><li><a href="introduction.html">1) Introduction</a></li><li><a href="setup.html">2) Setup</a></li><li><a href="appdev/index.html">3) First webapp</a></li><li><a href="deployer-howto.html">4) Deployer</a></li><li><a href="manager-howto.html">5) Manager</a></li><li><a href="host-manager-howto.html">6) Host Manager</a></li><li><a href="realm-howto.html">7) Realms and AAA</a></li><li><a href="security-manager-howto.html">8) Security Manager</a></li><li><a href="jndi-resources-howto.html">9) JNDI Resources</a></li><li><a href="jndi-datasource-examples-howto.html">10) JDBC DataSources</a></li><li><a href="class-loader-howto.html">11) Classloading</a></li><li><a href="jasper-howto.html">12) JSPs</a></li><li><a href="ssl-howto.html">13) SSL/TLS</a></li><li><a href="ssi-howto.html">14) SSI</a></li><li><a href="cgi-howto.html">15) CGI</a></li><li><a href="proxy-howto.html">16) Proxy Support</a></li><li><a href="mbeans-descriptors-howto.html">17) MBeans Descriptors</a></li><li><a href="default-servlet.html">18) Default Servlet</a></li><li><a href="cluster-howto.html">19) Clustering</a></li><li><a href="balancer-howto.html">20) Load Balancer</a></li><li><a href="connectors.html">21) Connectors</a></li><li><a href="monitoring.html">22) Monitoring and Management</a></li><li><a href="logging.html">23) Logging</a></li><li><a href="apr.html">24) APR/Native</a></li><li><a href="virtual-hosting-howto.html">25) Virtual Hosting</a></li><li><a href="aio.html">26) Advanced IO</a></li><li><a href="extras.html">27) Additional Components</a></li><li><a href="maven-jars.html">28) Mavenized</a></li><li><a href="security-howto.html">29) Security Considerations</a></li><li><a href="windows-service-howto.html">30) Windows Service</a></li><li><a href="windows-auth-howto.html">31) Windows Authentication</a></li><li><a href="jdbc-pool.html">32) Tomcat's JDBC Pool</a></li><li><a href="web-socket-howto.html">33) WebSocket</a></li><li><a href="rewrite.html">34) Rewrite</a></li></ul></div><div><h2>Reference</h2><ul><li><a href="RELEASE-NOTES.txt">Release Notes</a></li><li><a href="config/index.html">Configuration</a></li><li><a href="api/index.html">Tomcat Javadocs</a></li><li><a href="servletapi/index.html">Servlet Javadocs</a></li><li><a href="jspapi/index.html">JSP 2.3 Javadocs</a></li><li><a href="elapi/index.html">EL 3.0 Javadocs</a></li><li><a href="websocketapi/index.html">WebSocket 1.1 Javadocs</a></li><li><a href="https://tomcat.apache.org/connectors-doc/">JK 1.2 Documentation</a></li></ul></div><div><h2>Apache Tomcat Development</h2><ul><li><a href="building.html">Building</a></li><li><a href="changelog.html">Changelog</a></li><li><a href="https://wiki.apache.org/tomcat/TomcatVersions">Status</a></li><li><a href="developers.html">Developers</a></li><li><a href="architecture/index.html">Architecture</a></li><li><a href="funcspecs/index.html">Functional Specs.</a></li><li><a href="tribes/introduction.html">Tribes</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Clustering/Session Replication HOW-TO</h2><h3 id="Important_Note">Important Note</h3><div class="text">
|
||||||
|
<p><b>You can also check the <a href="config/cluster.html">configuration reference documentation.</a></b>
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#For_the_impatient">For the impatient</a></li><li><a href="#Security">Security</a></li><li><a href="#Cluster_Basics">Cluster Basics</a></li><li><a href="#Overview">Overview</a></li><li><a href="#Cluster_Information">Cluster Information</a></li><li><a href="#Bind_session_after_crash_to_failover_node">Bind session after crash to failover node</a></li><li><a href="#Configuration_Example">Configuration Example</a></li><li><a href="#Cluster_Architecture">Cluster Architecture</a></li><li><a href="#How_it_Works">How it Works</a></li><li><a href="#Monitoring_your_Cluster_with_JMX">Monitoring your Cluster with JMX</a></li><li><a href="#FAQ">FAQ</a></li></ul>
|
||||||
|
</div><h3 id="For_the_impatient">For the impatient</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
Simply add
|
||||||
|
</p>
|
||||||
|
<div class="codeBox"><pre><code><Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/></code></pre></div>
|
||||||
|
<p>
|
||||||
|
to your <code><Engine></code> or your <code><Host></code> element to enable clustering.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Using the above configuration will enable all-to-all session replication
|
||||||
|
using the <code>DeltaManager</code> to replicate session deltas. By all-to-all we mean that the session gets replicated to all the other
|
||||||
|
nodes in the cluster. This works great for smaller cluster but we don't recommend it for larger clusters(a lot of Tomcat nodes).
|
||||||
|
Also when using the delta manager it will replicate to all nodes, even nodes that don't have the application deployed.<br>
|
||||||
|
To get around this problem, you'll want to use the BackupManager. This manager only replicates the session data to one backup
|
||||||
|
node, and only to nodes that have the application deployed. Downside of the BackupManager: not quite as battle tested as the delta manager.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Here are some of the important default values:
|
||||||
|
</p>
|
||||||
|
<ol>
|
||||||
|
<li>Multicast address is 228.0.0.4</li>
|
||||||
|
<li>Multicast port is 45564 (the port and the address together determine cluster membership.</li>
|
||||||
|
<li>The IP broadcasted is <code>java.net.InetAddress.getLocalHost().getHostAddress()</code> (make sure you don't broadcast 127.0.0.1, this is a common error)</li>
|
||||||
|
<li>The TCP port listening for replication messages is the first available server socket in range <code>4000-4100</code></li>
|
||||||
|
<li>Listener is configured <code>ClusterSessionListener</code></li>
|
||||||
|
<li>Two interceptors are configured <code>TcpFailureDetector</code> and <code>MessageDispatch15Interceptor</code></li>
|
||||||
|
</ol>
|
||||||
|
<p>
|
||||||
|
The following is the default cluster configuration:
|
||||||
|
</p>
|
||||||
|
<div class="codeBox"><pre><code> <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
|
||||||
|
channelSendOptions="8">
|
||||||
|
|
||||||
|
<Manager className="org.apache.catalina.ha.session.DeltaManager"
|
||||||
|
expireSessionsOnShutdown="false"
|
||||||
|
notifyListenersOnReplication="true"/>
|
||||||
|
|
||||||
|
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
|
||||||
|
<Membership className="org.apache.catalina.tribes.membership.McastService"
|
||||||
|
address="228.0.0.4"
|
||||||
|
port="45564"
|
||||||
|
frequency="500"
|
||||||
|
dropTime="3000"/>
|
||||||
|
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
|
||||||
|
address="auto"
|
||||||
|
port="4000"
|
||||||
|
autoBind="100"
|
||||||
|
selectorTimeout="5000"
|
||||||
|
maxThreads="6"/>
|
||||||
|
|
||||||
|
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
|
||||||
|
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
|
||||||
|
</Sender>
|
||||||
|
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
|
||||||
|
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
|
||||||
|
</Channel>
|
||||||
|
|
||||||
|
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
|
||||||
|
filter=""/>
|
||||||
|
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
|
||||||
|
|
||||||
|
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
|
||||||
|
tempDir="/tmp/war-temp/"
|
||||||
|
deployDir="/tmp/war-deploy/"
|
||||||
|
watchDir="/tmp/war-listen/"
|
||||||
|
watchEnabled="false"/>
|
||||||
|
|
||||||
|
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
|
||||||
|
</Cluster></code></pre></div>
|
||||||
|
<p>Will cover this section in more detail later in this document.</p>
|
||||||
|
</div><h3 id="Security">Security</h3><div class="text">
|
||||||
|
|
||||||
|
<p>The cluster implementation is written on the basis that a secure, trusted
|
||||||
|
network is used for all of the cluster related network traffic. It is not safe
|
||||||
|
to run a cluster on a insecure, untrusted network.</p>
|
||||||
|
|
||||||
|
<p>There are many options for providing a secure, trusted network for use by a
|
||||||
|
Tomcat cluster. These include:</p>
|
||||||
|
<ul>
|
||||||
|
<li>private LAN</li>
|
||||||
|
<li>a Virtual Private Network (VPN)</li>
|
||||||
|
<li>IPSEC</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Cluster_Basics">Cluster Basics</h3><div class="text">
|
||||||
|
|
||||||
|
<p>To run session replication in your Tomcat 8 container, the following steps
|
||||||
|
should be completed:</p>
|
||||||
|
<ul>
|
||||||
|
<li>All your session attributes must implement <code>java.io.Serializable</code></li>
|
||||||
|
<li>Uncomment the <code>Cluster</code> element in server.xml</li>
|
||||||
|
<li>If you have defined custom cluster valves, make sure you have the <code>ReplicationValve</code> defined as well under the Cluster element in server.xml</li>
|
||||||
|
<li>If your Tomcat instances are running on the same machine, make sure the <code>Receiver.port</code>
|
||||||
|
attribute is unique for each instance, in most cases Tomcat is smart enough to resolve this on it's own by autodetecting available ports in the range 4000-4100</li>
|
||||||
|
<li>Make sure your <code>web.xml</code> has the
|
||||||
|
<code><distributable/></code> element</li>
|
||||||
|
<li>If you are using mod_jk, make sure that jvmRoute attribute is set at your Engine <code><Engine name="Catalina" jvmRoute="node01" ></code>
|
||||||
|
and that the jvmRoute attribute value matches your worker name in workers.properties</li>
|
||||||
|
<li>Make sure that all nodes have the same time and sync with NTP service!</li>
|
||||||
|
<li>Make sure that your loadbalancer is configured for sticky session mode.</li>
|
||||||
|
</ul>
|
||||||
|
<p>Load balancing can be achieved through many techniques, as seen in the
|
||||||
|
<a href="balancer-howto.html">Load Balancing</a> chapter.</p>
|
||||||
|
<p>Note: Remember that your session state is tracked by a cookie, so your URL must look the same from the out
|
||||||
|
side otherwise, a new session will be created.</p>
|
||||||
|
<p>The Cluster module uses the Tomcat JULI logging framework, so you can configure logging
|
||||||
|
through the regular logging.properties file. To track messages, you can enable logging on the key: <code>org.apache.catalina.tribes.MESSAGES</code></p>
|
||||||
|
</div><h3 id="Overview">Overview</h3><div class="text">
|
||||||
|
|
||||||
|
<p>To enable session replication in Tomcat, three different paths can be followed to achieve the exact same thing:</p>
|
||||||
|
<ol>
|
||||||
|
<li>Using session persistence, and saving the session to a shared file system (PersistenceManager + FileStore)</li>
|
||||||
|
<li>Using session persistence, and saving the session to a shared database (PersistenceManager + JDBCStore)</li>
|
||||||
|
<li>Using in-memory-replication, using the SimpleTcpCluster that ships with Tomcat (lib/catalina-tribes.jar + lib/catalina-ha.jar)</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<p>In this release of session replication, Tomcat can perform an all-to-all replication of session state using the <code>DeltaManager</code> or
|
||||||
|
perform backup replication to only one node using the <code>BackupManager</code>.
|
||||||
|
The all-to-all replication is an algorithm that is only efficient when the clusters are small. For larger clusters, to use
|
||||||
|
a primary-secondary session replication where the session will only be stored at one backup server simply setup the BackupManager. <br>
|
||||||
|
Currently you can use the domain worker attribute (mod_jk > 1.2.8) to build cluster partitions
|
||||||
|
with the potential of having a more scalable cluster solution with the DeltaManager(you'll need to configure the domain interceptor for this).
|
||||||
|
In order to keep the network traffic down in an all-to-all environment, you can split your cluster
|
||||||
|
into smaller groups. This can be easily achieved by using different multicast addresses for the different groups.
|
||||||
|
A very simple setup would look like this:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="codeBox"><pre><code> DNS Round Robin
|
||||||
|
|
|
||||||
|
Load Balancer
|
||||||
|
/ \
|
||||||
|
Cluster1 Cluster2
|
||||||
|
/ \ / \
|
||||||
|
Tomcat1 Tomcat2 Tomcat3 Tomcat4</code></pre></div>
|
||||||
|
|
||||||
|
<p>What is important to mention here, is that session replication is only the beginning of clustering.
|
||||||
|
Another popular concept used to implement clusters is farming, i.e., you deploy your apps only to one
|
||||||
|
server, and the cluster will distribute the deployments across the entire cluster.
|
||||||
|
This is all capabilities that can go into with the FarmWarDeployer (s. cluster example at <code>server.xml</code>)</p>
|
||||||
|
<p>In the next section will go deeper into how session replication works and how to configure it.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Cluster_Information">Cluster Information</h3><div class="text">
|
||||||
|
<p>Membership is established using multicast heartbeats.
|
||||||
|
Hence, if you wish to subdivide your clusters, you can do this by
|
||||||
|
changing the multicast IP address or port in the <code><Membership></code> element.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
The heartbeat contains the IP address of the Tomcat node and the TCP port that
|
||||||
|
Tomcat listens to for replication traffic. All data communication happens over TCP.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
The <code>ReplicationValve</code> is used to find out when the request has been completed and initiate the
|
||||||
|
replication, if any. Data is only replicated if the session has changed (by calling setAttribute or removeAttribute
|
||||||
|
on the session).
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
One of the most important performance considerations is the synchronous versus asynchronous replication.
|
||||||
|
In a synchronous replication mode the request doesn't return until the replicated session has been
|
||||||
|
sent over the wire and reinstantiated on all the other cluster nodes.
|
||||||
|
Synchronous vs. asynchronous is configured using the <code>channelSendOptions</code>
|
||||||
|
flag and is an integer value. The default value for the <code>SimpleTcpCluster/DeltaManager</code> combo is
|
||||||
|
8, which is asynchronous. You can read more on the <a href="tribes/introduction.html">send flag(overview)</a> or the
|
||||||
|
<a href="https://tomcat.apache.org/tomcat-8.0-doc/api/org/apache/catalina/tribes/Channel.html">send flag(javadoc)</a>.
|
||||||
|
During async replication, the request is returned before the data has been replicated. async replication yields shorter
|
||||||
|
request times, and synchronous replication guarantees the session to be replicated before the request returns.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Bind_session_after_crash_to_failover_node">Bind session after crash to failover node</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
If you are using mod_jk and not using sticky sessions or for some reasons sticky session don't
|
||||||
|
work, or you are simply failing over, the session id will need to be modified as it previously contained
|
||||||
|
the worker id of the previous tomcat (as defined by jvmRoute in the Engine element).
|
||||||
|
To solve this, we will use the JvmRouteBinderValve.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
The JvmRouteBinderValve rewrites the session id to ensure that the next request will remain sticky
|
||||||
|
(and not fall back to go to random nodes since the worker is no longer available) after a fail over.
|
||||||
|
The valve rewrites the JSESSIONID value in the cookie with the same name.
|
||||||
|
Not having this valve in place, will make it harder to ensure stickiness in case of a failure for the mod_jk module.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Remember, if you are adding your own valves in server.xml then the defaults are no longer valid,
|
||||||
|
make sure that you add in all the appropriate valves as defined by the default.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<b>Hint:</b><br>
|
||||||
|
With attribute <i>sessionIdAttribute</i> you can change the request attribute name that included the old session id.
|
||||||
|
Default attribute name is <i>org.apache.catalina.ha.session.JvmRouteOrignalSessionID</i>.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<b>Trick:</b><br>
|
||||||
|
You can enable this mod_jk turnover mode via JMX before you drop a node to all backup nodes!
|
||||||
|
Set enable true on all JvmRouteBinderValve backups, disable worker at mod_jk
|
||||||
|
and then drop node and restart it! Then enable mod_jk Worker and disable JvmRouteBinderValves again.
|
||||||
|
This use case means that only requested session are migrated.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
</div><h3 id="Configuration_Example">Configuration Example</h3><div class="text">
|
||||||
|
<div class="codeBox"><pre><code> <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
|
||||||
|
channelSendOptions="6">
|
||||||
|
|
||||||
|
<Manager className="org.apache.catalina.ha.session.BackupManager"
|
||||||
|
expireSessionsOnShutdown="false"
|
||||||
|
notifyListenersOnReplication="true"
|
||||||
|
mapSendOptions="6"/>
|
||||||
|
<!--
|
||||||
|
<Manager className="org.apache.catalina.ha.session.DeltaManager"
|
||||||
|
expireSessionsOnShutdown="false"
|
||||||
|
notifyListenersOnReplication="true"/>
|
||||||
|
-->
|
||||||
|
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
|
||||||
|
<Membership className="org.apache.catalina.tribes.membership.McastService"
|
||||||
|
address="228.0.0.4"
|
||||||
|
port="45564"
|
||||||
|
frequency="500"
|
||||||
|
dropTime="3000"/>
|
||||||
|
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
|
||||||
|
address="auto"
|
||||||
|
port="5000"
|
||||||
|
selectorTimeout="100"
|
||||||
|
maxThreads="6"/>
|
||||||
|
|
||||||
|
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
|
||||||
|
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
|
||||||
|
</Sender>
|
||||||
|
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
|
||||||
|
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
|
||||||
|
<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
|
||||||
|
</Channel>
|
||||||
|
|
||||||
|
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
|
||||||
|
filter=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/>
|
||||||
|
|
||||||
|
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
|
||||||
|
tempDir="/tmp/war-temp/"
|
||||||
|
deployDir="/tmp/war-deploy/"
|
||||||
|
watchDir="/tmp/war-listen/"
|
||||||
|
watchEnabled="false"/>
|
||||||
|
|
||||||
|
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
|
||||||
|
</Cluster></code></pre></div>
|
||||||
|
<p>
|
||||||
|
Break it down!!
|
||||||
|
</p>
|
||||||
|
<div class="codeBox"><pre><code> <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
|
||||||
|
channelSendOptions="6"></code></pre></div>
|
||||||
|
<p>
|
||||||
|
The main element, inside this element all cluster details can be configured.
|
||||||
|
The <code>channelSendOptions</code> is the flag that is attached to each message sent by the
|
||||||
|
SimpleTcpCluster class or any objects that are invoking the SimpleTcpCluster.send method.
|
||||||
|
The description of the send flags is available at <a href="https://tomcat.apache.org/tomcat-8.0-doc/api/org/apache/catalina/tribes/Channel.html">
|
||||||
|
our javadoc site</a>
|
||||||
|
The <code>DeltaManager</code> sends information using the SimpleTcpCluster.send method, while the backup manager
|
||||||
|
sends it itself directly through the channel.
|
||||||
|
<br>For more info, Please visit the <a href="config/cluster.html">reference documentation</a>
|
||||||
|
</p>
|
||||||
|
<div class="codeBox"><pre><code> <Manager className="org.apache.catalina.ha.session.BackupManager"
|
||||||
|
expireSessionsOnShutdown="false"
|
||||||
|
notifyListenersOnReplication="true"
|
||||||
|
mapSendOptions="6"/>
|
||||||
|
<!--
|
||||||
|
<Manager className="org.apache.catalina.ha.session.DeltaManager"
|
||||||
|
expireSessionsOnShutdown="false"
|
||||||
|
notifyListenersOnReplication="true"/>
|
||||||
|
--></code></pre></div>
|
||||||
|
<p>
|
||||||
|
This is a template for the manager configuration that will be used if no manager is defined in the <Context>
|
||||||
|
element. In Tomcat 5.x each webapp marked distributable had to use the same manager, this is no longer the case
|
||||||
|
since Tomcat you can define a manager class for each webapp, so that you can mix managers in your cluster.
|
||||||
|
Obviously the managers on one node's application has to correspond with the same manager on the same application on the other node.
|
||||||
|
If no manager has been specified for the webapp, and the webapp is marked <distributable/> Tomcat will take this manager configuration
|
||||||
|
and create a manager instance cloning this configuration.
|
||||||
|
<br>For more info, Please visit the <a href="config/cluster-manager.html">reference documentation</a>
|
||||||
|
</p>
|
||||||
|
<div class="codeBox"><pre><code> <Channel className="org.apache.catalina.tribes.group.GroupChannel"></code></pre></div>
|
||||||
|
<p>
|
||||||
|
The channel element is <a href="tribes/introduction.html">Tribes</a>, the group communication framework
|
||||||
|
used inside Tomcat. This element encapsulates everything that has to do with communication and membership logic.
|
||||||
|
<br>For more info, Please visit the <a href="config/cluster-channel.html">reference documentation</a>
|
||||||
|
</p>
|
||||||
|
<div class="codeBox"><pre><code> <Membership className="org.apache.catalina.tribes.membership.McastService"
|
||||||
|
address="228.0.0.4"
|
||||||
|
port="45564"
|
||||||
|
frequency="500"
|
||||||
|
dropTime="3000"/></code></pre></div>
|
||||||
|
<p>
|
||||||
|
Membership is done using multicasting. Please note that Tribes also supports static memberships using the
|
||||||
|
<code>StaticMembershipInterceptor</code> if you want to extend your membership to points beyond multicasting.
|
||||||
|
The address attribute is the multicast address used and the port is the multicast port. These two together
|
||||||
|
create the cluster separation. If you want a QA cluster and a production cluster, the easiest config is to
|
||||||
|
have the QA cluster be on a separate multicast address/port combination than the production cluster.<br>
|
||||||
|
The membership component broadcasts TCP address/port of itself to the other nodes so that communication between
|
||||||
|
nodes can be done over TCP. Please note that the address being broadcasted is the one of the
|
||||||
|
<code>Receiver.address</code> attribute.
|
||||||
|
<br>For more info, Please visit the <a href="config/cluster-membership.html">reference documentation</a>
|
||||||
|
</p>
|
||||||
|
<div class="codeBox"><pre><code> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
|
||||||
|
address="auto"
|
||||||
|
port="5000"
|
||||||
|
selectorTimeout="100"
|
||||||
|
maxThreads="6"/></code></pre></div>
|
||||||
|
<p>
|
||||||
|
In tribes the logic of sending and receiving data has been broken into two functional components. The Receiver, as the name suggests
|
||||||
|
is responsible for receiving messages. Since the Tribes stack is thread less, (a popular improvement now adopted by other frameworks as well),
|
||||||
|
there is a thread pool in this component that has a maxThreads and minThreads setting.<br>
|
||||||
|
The address attribute is the host address that will be broadcasted by the membership component to the other nodes.
|
||||||
|
<br>For more info, Please visit the <a href="config/cluster-receiver.html">reference documentation</a>
|
||||||
|
</p>
|
||||||
|
<div class="codeBox"><pre><code> <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
|
||||||
|
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
|
||||||
|
</Sender></code></pre></div>
|
||||||
|
<p>
|
||||||
|
The sender component, as the name indicates is responsible for sending messages to other nodes.
|
||||||
|
The sender has a shell component, the <code>ReplicationTransmitter</code> but the real stuff done is done in the
|
||||||
|
sub component, <code>Transport</code>.
|
||||||
|
Tribes support having a pool of senders, so that messages can be sent in parallel and if using the NIO sender,
|
||||||
|
you can send messages concurrently as well.<br>
|
||||||
|
Concurrently means one message to multiple senders at the same time and Parallel means multiple messages to multiple senders
|
||||||
|
at the same time.
|
||||||
|
<br>For more info, Please visit the <a href="config/cluster-sender.html">reference documentation</a>
|
||||||
|
</p>
|
||||||
|
<div class="codeBox"><pre><code> <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
|
||||||
|
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
|
||||||
|
<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
|
||||||
|
</Channel></code></pre></div>
|
||||||
|
<p>
|
||||||
|
Tribes uses a stack to send messages through. Each element in the stack is called an interceptor, and works much like the valves do
|
||||||
|
in the Tomcat servlet container.
|
||||||
|
Using interceptors, logic can be broken into more manageable pieces of code. The interceptors configured above are:<br>
|
||||||
|
TcpFailureDetector - verifies crashed members through TCP, if multicast packets get dropped, this interceptor protects against false positives,
|
||||||
|
ie the node marked as crashed even though it still is alive and running.<br>
|
||||||
|
MessageDispatch15Interceptor - dispatches messages to a thread (thread pool) to send message asynchronously.<br>
|
||||||
|
ThroughputInterceptor - prints out simple stats on message traffic.<br>
|
||||||
|
Please note that the order of interceptors is important. The way they are defined in server.xml is the way they are represented in the
|
||||||
|
channel stack. Think of it as a linked list, with the head being the first most interceptor and the tail the last.
|
||||||
|
<br>For more info, Please visit the <a href="config/cluster-interceptor.html">reference documentation</a>
|
||||||
|
</p>
|
||||||
|
<div class="codeBox"><pre><code> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
|
||||||
|
filter=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/></code></pre></div>
|
||||||
|
<p>
|
||||||
|
The cluster uses valves to track requests to web applications, we've mentioned the ReplicationValve and the JvmRouteBinderValve above.
|
||||||
|
The <Cluster> element itself is not part of the pipeline in Tomcat, instead the cluster adds the valve to its parent container.
|
||||||
|
If the <Cluster> elements is configured in the <Engine> element, the valves get added to the engine and so on.
|
||||||
|
<br>For more info, Please visit the <a href="config/cluster-valve.html">reference documentation</a>
|
||||||
|
</p>
|
||||||
|
<div class="codeBox"><pre><code> <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
|
||||||
|
tempDir="/tmp/war-temp/"
|
||||||
|
deployDir="/tmp/war-deploy/"
|
||||||
|
watchDir="/tmp/war-listen/"
|
||||||
|
watchEnabled="false"/></code></pre></div>
|
||||||
|
<p>
|
||||||
|
The default tomcat cluster supports farmed deployment, ie, the cluster can deploy and undeploy applications on the other nodes.
|
||||||
|
The state of this component is currently in flux but will be addressed soon. There was a change in the deployment algorithm
|
||||||
|
between Tomcat 5.0 and 5.5 and at that point, the logic of this component changed to where the deploy dir has to match the
|
||||||
|
webapps directory.
|
||||||
|
<br>For more info, Please visit the <a href="config/cluster-deployer.html">reference documentation</a>
|
||||||
|
</p>
|
||||||
|
<div class="codeBox"><pre><code> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
|
||||||
|
</Cluster></code></pre></div>
|
||||||
|
<p>
|
||||||
|
Since the SimpleTcpCluster itself is a sender and receiver of the Channel object, components can register themselves as listeners to
|
||||||
|
the SimpleTcpCluster. The listener above <code>ClusterSessionListener</code> listens for DeltaManager replication messages
|
||||||
|
and applies the deltas to the manager that in turn applies it to the session.
|
||||||
|
<br>For more info, Please visit the <a href="config/cluster-listener.html">reference documentation</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div><h3 id="Cluster_Architecture">Cluster Architecture</h3><div class="text">
|
||||||
|
|
||||||
|
<p><b>Component Levels:</b></p>
|
||||||
|
<div class="codeBox"><pre><code> Server
|
||||||
|
|
|
||||||
|
Service
|
||||||
|
|
|
||||||
|
Engine
|
||||||
|
| \
|
||||||
|
| --- Cluster --*
|
||||||
|
|
|
||||||
|
Host
|
||||||
|
|
|
||||||
|
------
|
||||||
|
/ \
|
||||||
|
Cluster Context(1-N)
|
||||||
|
| \
|
||||||
|
| -- Manager
|
||||||
|
| \
|
||||||
|
| -- DeltaManager
|
||||||
|
| -- BackupManager
|
||||||
|
|
|
||||||
|
---------------------------
|
||||||
|
| \
|
||||||
|
Channel \
|
||||||
|
----------------------------- \
|
||||||
|
| \
|
||||||
|
Interceptor_1 .. \
|
||||||
|
| \
|
||||||
|
Interceptor_N \
|
||||||
|
----------------------------- \
|
||||||
|
| | | \
|
||||||
|
Receiver Sender Membership \
|
||||||
|
-- Valve
|
||||||
|
| \
|
||||||
|
| -- ReplicationValve
|
||||||
|
| -- JvmRouteBinderValve
|
||||||
|
|
|
||||||
|
-- LifecycleListener
|
||||||
|
|
|
||||||
|
-- ClusterListener
|
||||||
|
| \
|
||||||
|
| -- ClusterSessionListener
|
||||||
|
|
|
||||||
|
-- Deployer
|
||||||
|
\
|
||||||
|
-- FarmWarDeployer
|
||||||
|
|
||||||
|
</code></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
</div><h3 id="How_it_Works">How it Works</h3><div class="text">
|
||||||
|
<p>To make it easy to understand how clustering works, We are gonna take you through a series of scenarios.
|
||||||
|
In the scenario we only plan to use two tomcat instances <code>TomcatA</code> and <code>TomcatB</code>.
|
||||||
|
We will cover the following sequence of events:</p>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li><code>TomcatA</code> starts up</li>
|
||||||
|
<li><code>TomcatB</code> starts up (Wait that TomcatA start is complete)</li>
|
||||||
|
<li><code>TomcatA</code> receives a request, a session <code>S1</code> is created.</li>
|
||||||
|
<li><code>TomcatA</code> crashes</li>
|
||||||
|
<li><code>TomcatB</code> receives a request for session <code>S1</code></li>
|
||||||
|
<li><code>TomcatA</code> starts up</li>
|
||||||
|
<li><code>TomcatA</code> receives a request, invalidate is called on the session (<code>S1</code>)</li>
|
||||||
|
<li><code>TomcatB</code> receives a request, for a new session (<code>S2</code>)</li>
|
||||||
|
<li><code>TomcatA</code> The session <code>S2</code> expires due to inactivity.</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<p>Ok, now that we have a good sequence, we will take you through exactly what happens in the session replication code</p>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li><b><code>TomcatA</code> starts up</b>
|
||||||
|
<p>
|
||||||
|
Tomcat starts up using the standard start up sequence. When the Host object is created, a cluster object is associated with it.
|
||||||
|
When the contexts are parsed, if the distributable element is in place in web.xml
|
||||||
|
Tomcat asks the Cluster class (in this case <code>SimpleTcpCluster</code>) to create a manager
|
||||||
|
for the replicated context. So with clustering enabled, distributable set in web.xml
|
||||||
|
Tomcat will create a <code>DeltaManager</code> for that context instead of a <code>StandardManager</code>.
|
||||||
|
The cluster class will start up a membership service (multicast) and a replication service (tcp unicast).
|
||||||
|
More on the architecture further down in this document.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li><b><code>TomcatB</code> starts up</b>
|
||||||
|
<p>
|
||||||
|
When TomcatB starts up, it follows the same sequence as TomcatA did with one exception.
|
||||||
|
The cluster is started and will establish a membership (TomcatA,TomcatB).
|
||||||
|
TomcatB will now request the session state from a server that already exists in the cluster,
|
||||||
|
in this case TomcatA. TomcatA responds to the request, and before TomcatB starts listening
|
||||||
|
for HTTP requests, the state has been transferred from TomcatA to TomcatB.
|
||||||
|
In case TomcatA doesn't respond, TomcatB will time out after 60 seconds, and issue a log
|
||||||
|
entry. The session state gets transferred for each web application that has distributable in
|
||||||
|
its web.xml. Note: To use session replication efficiently, all your tomcat instances should be
|
||||||
|
configured the same.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li><B><code>TomcatA</code> receives a request, a session <code>S1</code> is created.</B>
|
||||||
|
<p>
|
||||||
|
The request coming in to TomcatA is treated exactly the same way as without session replication.
|
||||||
|
The action happens when the request is completed, the <code>ReplicationValve</code> will intercept
|
||||||
|
the request before the response is returned to the user.
|
||||||
|
At this point it finds that the session has been modified, and it uses TCP to replicate the
|
||||||
|
session to TomcatB. Once the serialized data has been handed off to the operating systems TCP logic,
|
||||||
|
the request returns to the user, back through the valve pipeline.
|
||||||
|
For each request the entire session is replicated, this allows code that modifies attributes
|
||||||
|
in the session without calling setAttribute or removeAttribute to be replicated.
|
||||||
|
a useDirtyFlag configuration parameter can be used to optimize the number of times
|
||||||
|
a session is replicated.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
<li><b><code>TomcatA</code> crashes</b>
|
||||||
|
<p>
|
||||||
|
When TomcatA crashes, TomcatB receives a notification that TomcatA has dropped out
|
||||||
|
of the cluster. TomcatB removes TomcatA from its membership list, and TomcatA will no longer
|
||||||
|
be notified of any changes that occurs in TomcatB.
|
||||||
|
The load balancer will redirect the requests from TomcatA to TomcatB and all the sessions
|
||||||
|
are current.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li><b><code>TomcatB</code> receives a request for session <code>S1</code></b>
|
||||||
|
<p>Nothing exciting, TomcatB will process the request as any other request.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li><b><code>TomcatA</code> starts up</b>
|
||||||
|
<p>Upon start up, before TomcatA starts taking new request and making itself
|
||||||
|
available to it will follow the start up sequence described above 1) 2).
|
||||||
|
It will join the cluster, contact TomcatB for the current state of all the sessions.
|
||||||
|
And once it receives the session state, it finishes loading and opens its HTTP/mod_jk ports.
|
||||||
|
So no requests will make it to TomcatA until it has received the session state from TomcatB.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li><b><code>TomcatA</code> receives a request, invalidate is called on the session (<code>S1</code>)</b>
|
||||||
|
<p>The invalidate call is intercepted, and the session is queued with invalidated sessions.
|
||||||
|
When the request is complete, instead of sending out the session that has changed, it sends out
|
||||||
|
an "expire" message to TomcatB and TomcatB will invalidate the session as well.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
<li><b><code>TomcatB</code> receives a request, for a new session (<code>S2</code>)</b>
|
||||||
|
<p>Same scenario as in step 3)
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
</li>
|
||||||
|
<li><code>TomcatA</code> The session <code>S2</code> expires due to inactivity.
|
||||||
|
<p>The invalidate call is intercepted the same was as when a session is invalidated by the user,
|
||||||
|
and the session is queued with invalidated sessions.
|
||||||
|
At this point, the invalidated session will not be replicated across until
|
||||||
|
another request comes through the system and checks the invalid queue.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<p>Phuuuhh! :)</p>
|
||||||
|
|
||||||
|
<p><b>Membership</b>
|
||||||
|
Clustering membership is established using very simple multicast pings.
|
||||||
|
Each Tomcat instance will periodically send out a multicast ping,
|
||||||
|
in the ping message the instance will broad cast its IP and TCP listen port
|
||||||
|
for replication.
|
||||||
|
If an instance has not received such a ping within a given timeframe, the
|
||||||
|
member is considered dead. Very simple, and very effective!
|
||||||
|
Of course, you need to enable multicasting on your system.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p><b>TCP Replication</b>
|
||||||
|
Once a multicast ping has been received, the member is added to the cluster
|
||||||
|
Upon the next replication request, the sending instance will use the host and
|
||||||
|
port info and establish a TCP socket. Using this socket it sends over the serialized data.
|
||||||
|
The reason I choose TCP sockets is because it has built in flow control and guaranteed delivery.
|
||||||
|
So I know, when I send some data, it will make it there :)
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p><b>Distributed locking and pages using frames</b>
|
||||||
|
Tomcat does not keep session instances in sync across the cluster.
|
||||||
|
The implementation of such logic would be to much overhead and cause all
|
||||||
|
kinds of problems. If your client accesses the same session
|
||||||
|
simultaneously using multiple requests, then the last request
|
||||||
|
will override the other sessions in the cluster.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div><h3 id="Monitoring_your_Cluster_with_JMX">Monitoring your Cluster with JMX</h3><div class="text">
|
||||||
|
<p>Monitoring is a very important question when you use a cluster. Some of the cluster objects are JMX MBeans </p>
|
||||||
|
<p>Add the following parameter to your startup script with Java 5:</p>
|
||||||
|
<div class="codeBox"><pre><code>set CATALINA_OPTS=\
|
||||||
|
-Dcom.sun.management.jmxremote \
|
||||||
|
-Dcom.sun.management.jmxremote.port=%my.jmx.port% \
|
||||||
|
-Dcom.sun.management.jmxremote.ssl=false \
|
||||||
|
-Dcom.sun.management.jmxremote.authenticate=false</code></pre></div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
List of Cluster Mbeans
|
||||||
|
</p>
|
||||||
|
<table class="defaultTable">
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Description</th>
|
||||||
|
<th>MBean ObjectName - Engine</th>
|
||||||
|
<th>MBean ObjectName - Host</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>Cluster</td>
|
||||||
|
<td>The complete cluster element</td>
|
||||||
|
<td><code>type=Cluster</code></td>
|
||||||
|
<td><code>type=Cluster,host=${HOST}</code></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>DeltaManager</td>
|
||||||
|
<td>This manager control the sessions and handle session replication </td>
|
||||||
|
<td><code>type=Manager,context=${APP.CONTEXT.PATH}, host=${HOST}</code></td>
|
||||||
|
<td><code>type=Manager,context=${APP.CONTEXT.PATH}, host=${HOST}</code></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>FarmWarDeployer</td>
|
||||||
|
<td>Manages the process of deploying an application to all nodes in the cluster</td>
|
||||||
|
<td>Not supported</td>
|
||||||
|
<td><code>type=Cluster, host=${HOST}, component=deployer</code></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>Member</td>
|
||||||
|
<td>Represents a node in the cluster</td>
|
||||||
|
<td>type=Cluster, component=member, name=${NODE_NAME}</td>
|
||||||
|
<td><code>type=Cluster, host=${HOST}, component=member, name=${NODE_NAME}</code></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>ReplicationValve</td>
|
||||||
|
<td>This valve control the replication to the backup nodes</td>
|
||||||
|
<td><code>type=Valve,name=ReplicationValve</code></td>
|
||||||
|
<td><code>type=Valve,name=ReplicationValve,host=${HOST}</code></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>JvmRouteBinderValve</td>
|
||||||
|
<td>This is a cluster fallback valve to change the Session ID to the current tomcat jvmroute.</td>
|
||||||
|
<td><code>type=Valve,name=JvmRouteBinderValve,
|
||||||
|
context=${APP.CONTEXT.PATH}</code></td>
|
||||||
|
<td><code>type=Valve,name=JvmRouteBinderValve,host=${HOST},
|
||||||
|
context=${APP.CONTEXT.PATH}</code></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
</div><h3 id="FAQ">FAQ</h3><div class="text">
|
||||||
|
<p>Please see <a href="https://wiki.apache.org/tomcat/FAQ/Clustering">the clustering section of the FAQ</a>.</p>
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="./comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,122 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="./images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 (8.0.53) - Documentation User Comments</title><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/comments">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="./images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="./images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="index.html">Docs Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>User Guide</h2><ul><li><a href="introduction.html">1) Introduction</a></li><li><a href="setup.html">2) Setup</a></li><li><a href="appdev/index.html">3) First webapp</a></li><li><a href="deployer-howto.html">4) Deployer</a></li><li><a href="manager-howto.html">5) Manager</a></li><li><a href="host-manager-howto.html">6) Host Manager</a></li><li><a href="realm-howto.html">7) Realms and AAA</a></li><li><a href="security-manager-howto.html">8) Security Manager</a></li><li><a href="jndi-resources-howto.html">9) JNDI Resources</a></li><li><a href="jndi-datasource-examples-howto.html">10) JDBC DataSources</a></li><li><a href="class-loader-howto.html">11) Classloading</a></li><li><a href="jasper-howto.html">12) JSPs</a></li><li><a href="ssl-howto.html">13) SSL/TLS</a></li><li><a href="ssi-howto.html">14) SSI</a></li><li><a href="cgi-howto.html">15) CGI</a></li><li><a href="proxy-howto.html">16) Proxy Support</a></li><li><a href="mbeans-descriptors-howto.html">17) MBeans Descriptors</a></li><li><a href="default-servlet.html">18) Default Servlet</a></li><li><a href="cluster-howto.html">19) Clustering</a></li><li><a href="balancer-howto.html">20) Load Balancer</a></li><li><a href="connectors.html">21) Connectors</a></li><li><a href="monitoring.html">22) Monitoring and Management</a></li><li><a href="logging.html">23) Logging</a></li><li><a href="apr.html">24) APR/Native</a></li><li><a href="virtual-hosting-howto.html">25) Virtual Hosting</a></li><li><a href="aio.html">26) Advanced IO</a></li><li><a href="extras.html">27) Additional Components</a></li><li><a href="maven-jars.html">28) Mavenized</a></li><li><a href="security-howto.html">29) Security Considerations</a></li><li><a href="windows-service-howto.html">30) Windows Service</a></li><li><a href="windows-auth-howto.html">31) Windows Authentication</a></li><li><a href="jdbc-pool.html">32) Tomcat's JDBC Pool</a></li><li><a href="web-socket-howto.html">33) WebSocket</a></li><li><a href="rewrite.html">34) Rewrite</a></li></ul></div><div><h2>Reference</h2><ul><li><a href="RELEASE-NOTES.txt">Release Notes</a></li><li><a href="config/index.html">Configuration</a></li><li><a href="api/index.html">Tomcat Javadocs</a></li><li><a href="servletapi/index.html">Servlet Javadocs</a></li><li><a href="jspapi/index.html">JSP 2.3 Javadocs</a></li><li><a href="elapi/index.html">EL 3.0 Javadocs</a></li><li><a href="websocketapi/index.html">WebSocket 1.1 Javadocs</a></li><li><a href="https://tomcat.apache.org/connectors-doc/">JK 1.2 Documentation</a></li></ul></div><div><h2>Apache Tomcat Development</h2><ul><li><a href="building.html">Building</a></li><li><a href="changelog.html">Changelog</a></li><li><a href="https://wiki.apache.org/tomcat/TomcatVersions">Status</a></li><li><a href="developers.html">Developers</a></li><li><a href="architecture/index.html">Architecture</a></li><li><a href="funcspecs/index.html">Functional Specs.</a></li><li><a href="tribes/introduction.html">Tribes</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Documentation User Comments</h2><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
|
||||||
|
<p>The Tomcat documentation integrates the
|
||||||
|
<a href="https://comments.apache.org/help.html">Apache Comments System</a>.
|
||||||
|
It allows users to add comments to most documentation pages. The comments
|
||||||
|
section can be found at the end of each page.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Allowed_Content">Allowed Content</h3><div class="text">
|
||||||
|
|
||||||
|
<p>Please use the Apache Comments System responsibly. We can only provide
|
||||||
|
this service to the community as long as it isn't misused.</p>
|
||||||
|
|
||||||
|
<p>The comments are not for general Q&A.
|
||||||
|
Comments should be pointed towards suggestions on improving the documentation
|
||||||
|
or server. Questions on how to use Apache Tomcat should be directed
|
||||||
|
to our <a href="https://tomcat.apache.org/lists.html">mailing lists</a>.</p>
|
||||||
|
|
||||||
|
<p>Comments may be removed by moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.</p>
|
||||||
|
|
||||||
|
<p>HTML is not allowed in comments, and will just display as raw source code
|
||||||
|
if attempted. Links that do not point to an Apache site (*.apache.org) will
|
||||||
|
need approval by a moderator before the comment is visible to regular visitors.</p>
|
||||||
|
|
||||||
|
</div><h3 id="License">License</h3><div class="text">
|
||||||
|
|
||||||
|
<p>Any submitted comments must be contributed under the terms of the
|
||||||
|
<a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Verified_Users">Verified Users</h3><div class="text">
|
||||||
|
|
||||||
|
<p>Verified users gain the Apache feather next to their name,
|
||||||
|
and may post comments with links in them without requiring approval
|
||||||
|
by a moderator before the comments are shown. Being a verified user
|
||||||
|
in itself does not give you moderating rights. If you are interested
|
||||||
|
in becoming a verified user, please contact us on the
|
||||||
|
<a href="https://tomcat.apache.org/lists.html#tomcat-users">users mailing list</a>.</p>
|
||||||
|
|
||||||
|
<p>All ASF committers are automatically verified users.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Moderators">Moderators</h3><div class="text">
|
||||||
|
|
||||||
|
<p>Moderators are allowed to mark comments as "Resolved", "Invalid"
|
||||||
|
or "Sticky", remove marks, approve comments e.g. if they contain
|
||||||
|
a link, and delete comments. Moderators can also subscribe to new
|
||||||
|
comments and comment updates and use the dashboard to gain some
|
||||||
|
overview over all comments of a site.</p>
|
||||||
|
|
||||||
|
<p>To use the moderation features, you need to login to the comments
|
||||||
|
system. Furthermore you will need to allow cookies to be set for
|
||||||
|
comments.apache.org (this is done using a secure https cookie). Once
|
||||||
|
logged in as a moderator you will see additional moderation
|
||||||
|
options attached to each comment.</p>
|
||||||
|
|
||||||
|
<p>If you are a long time follower of the Apache Tomcat projects
|
||||||
|
and you are interested in becoming a moderator, please contact us on the
|
||||||
|
<a href="https://tomcat.apache.org/lists.html#tomcat-users">users mailing list</a>.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Privacy_Policy">Privacy Policy</h3><div class="text">
|
||||||
|
|
||||||
|
<p>No data except what you personally submit is kept on record.
|
||||||
|
A cookie is used to keep track of moderators and other people
|
||||||
|
who wish to create an account to avoid having to enter their
|
||||||
|
credentials whenever they wish to post a comment.</p>
|
||||||
|
|
||||||
|
<p>To prevent spam and unsolicited comments, we use a digest of
|
||||||
|
visitors' IPs to keep track of comments posted by them.</p>
|
||||||
|
|
||||||
|
<p>Entering an email address when you post a comment is completely
|
||||||
|
optional, and will not be shared with anyone. If you enter an
|
||||||
|
email address, it will be used to notify you when someone posts
|
||||||
|
a reply to one of your comments, provided you have registered
|
||||||
|
an account and validated your email address.</p>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="./comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,755 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The AJP Connector</title><meta name="author" content="Yoav Shapira"><meta name="author" content="Andrew R. Jaquith"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/ajp">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The AJP Connector</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Common_Attributes">Common Attributes</a></li><li><a href="#Standard_Implementations">Standard Implementations</a></li><li><a href="#Java_TCP_socket_attributes">Java TCP socket attributes</a></li><li><a href="#NIO_specific_configuration">NIO specific configuration</a></li><li><a href="#NIO2_specific_configuration">NIO2 specific configuration</a></li><li><a href="#APR/native_specific_configuration">APR/native specific configuration</a></li></ol></li><li><a href="#Nested_Components">Nested Components</a></li><li><a href="#Special_Features">Special Features</a><ol><li><a href="#Proxy_Support">Proxy Support</a></li><li><a href="#Connector_Comparison">Connector Comparison</a></li></ol></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>AJP Connector</strong> element represents a
|
||||||
|
<strong>Connector</strong> component that communicates with a web
|
||||||
|
connector via the <code>AJP</code> protocol. This is used for cases
|
||||||
|
where you wish to invisibly integrate Tomcat into an existing (or new)
|
||||||
|
Apache installation, and you want Apache to handle the static content
|
||||||
|
contained in the web application, and/or utilize Apache's SSL
|
||||||
|
processing.</p>
|
||||||
|
|
||||||
|
<p>This connector supports load balancing when used in conjunction with
|
||||||
|
the <code>jvmRoute</code> attribute of the
|
||||||
|
<a href="engine.html">Engine</a>.</p>
|
||||||
|
|
||||||
|
<p>The native connectors supported with this Tomcat release are:</p>
|
||||||
|
<ul>
|
||||||
|
<li>JK 1.2.x with any of the supported servers. See
|
||||||
|
<a href="https://tomcat.apache.org/connectors-doc/">the JK docs</a>
|
||||||
|
for details.</li>
|
||||||
|
<li>mod_proxy on Apache httpd 2.x (included by default in Apache HTTP
|
||||||
|
Server 2.2), with AJP enabled: see
|
||||||
|
<a href="https://httpd.apache.org/docs/2.2/mod/mod_proxy_ajp.html">the
|
||||||
|
httpd docs</a> for details.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p><b>Other native connectors supporting AJP may work, but are no longer
|
||||||
|
supported.</b></p>
|
||||||
|
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Common_Attributes">Common Attributes</h4><div class="text">
|
||||||
|
|
||||||
|
<p>All implementations of <strong>Connector</strong>
|
||||||
|
support the following attributes:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">ajpFlush</code></td><td>
|
||||||
|
<p>A boolean value which can be used to enable or disable sending
|
||||||
|
AJP flush messages to the fronting proxy whenever an explicit
|
||||||
|
flush happens. The default value is <code>true</code>.<br>
|
||||||
|
An AJP flush message is a SEND_BODY_CHUNK packet with no body content.
|
||||||
|
Proxy implementations like mod_jk or mod_proxy_ajp will flush the
|
||||||
|
data buffered in the web server to the client when they receive
|
||||||
|
such a packet. Setting this to <code>false</code> can reduce
|
||||||
|
AJP packet traffic but might delay sending packets to the client.
|
||||||
|
At the end of the response, AJP does always flush to the client.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">allowTrace</code></td><td>
|
||||||
|
<p>A boolean value which can be used to enable or disable the TRACE
|
||||||
|
HTTP method. If not specified, this attribute is set to false.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">asyncTimeout</code></td><td>
|
||||||
|
<p>The default timeout for asynchronous requests in milliseconds. If not
|
||||||
|
specified, this attribute is set to the Servlet specification default of
|
||||||
|
30000 (30 seconds).</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">enableLookups</code></td><td>
|
||||||
|
<p>Set to <code>true</code> if you want calls to
|
||||||
|
<code>request.getRemoteHost()</code> to perform DNS lookups in
|
||||||
|
order to return the actual host name of the remote client. Set
|
||||||
|
to <code>false</code> to skip the DNS lookup and return the IP
|
||||||
|
address in String form instead (thereby improving performance).
|
||||||
|
By default, DNS lookups are disabled.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxHeaderCount</code></td><td>
|
||||||
|
<p>The maximum number of headers in a request that are allowed by the
|
||||||
|
container. A request that contains more headers than the specified limit
|
||||||
|
will be rejected. A value of less than 0 means no limit.
|
||||||
|
If not specified, a default of 100 is used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxParameterCount</code></td><td>
|
||||||
|
<p>The maximum number of parameter and value pairs (GET plus POST) which
|
||||||
|
will be automatically parsed by the container. Parameter and value pairs
|
||||||
|
beyond this limit will be ignored. A value of less than 0 means no limit.
|
||||||
|
If not specified, a default of 10000 is used. Note that
|
||||||
|
<code>FailedRequestFilter</code> <a href="filter.html">filter</a> can be
|
||||||
|
used to reject requests that hit the limit.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxPostSize</code></td><td>
|
||||||
|
<p>The maximum size in bytes of the POST which will be handled by
|
||||||
|
the container FORM URL parameter parsing. The limit can be disabled by
|
||||||
|
setting this attribute to a value less than zero. If not specified, this
|
||||||
|
attribute is set to 2097152 (2 megabytes). Note that the
|
||||||
|
<a href="filter.html#Failed_Request_Filter"><code>FailedRequestFilter</code></a>
|
||||||
|
can be used to reject requests that exceed this limit.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxSavePostSize</code></td><td>
|
||||||
|
<p>The maximum size in bytes of the POST which will be saved/buffered by
|
||||||
|
the container during FORM or CLIENT-CERT authentication. For both types
|
||||||
|
of authentication, the POST will be saved/buffered before the user is
|
||||||
|
authenticated. For CLIENT-CERT authentication, the POST is buffered for
|
||||||
|
the duration of the SSL handshake and the buffer emptied when the request
|
||||||
|
is processed. For FORM authentication the POST is saved whilst the user
|
||||||
|
is re-directed to the login form and is retained until the user
|
||||||
|
successfully authenticates or the session associated with the
|
||||||
|
authentication request expires. The limit can be disabled by setting this
|
||||||
|
attribute to -1. Setting the attribute to zero will disable the saving of
|
||||||
|
POST data during authentication. If not specified, this attribute is set
|
||||||
|
to 4096 (4 kilobytes).</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">parseBodyMethods</code></td><td>
|
||||||
|
<p>A comma-separated list of HTTP methods for which request
|
||||||
|
bodies will be parsed for request parameters identically
|
||||||
|
to POST. This is useful in RESTful applications that want to
|
||||||
|
support POST-style semantics for PUT requests.
|
||||||
|
Note that any setting other than <code>POST</code> causes Tomcat
|
||||||
|
to behave in a way that goes against the intent of the servlet
|
||||||
|
specification.
|
||||||
|
The HTTP method TRACE is specifically forbidden here in accordance
|
||||||
|
with the HTTP specification.
|
||||||
|
The default is <code>POST</code></p>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">port</code></strong></td><td>
|
||||||
|
<p>The TCP port number on which this <strong>Connector</strong>
|
||||||
|
will create a server socket and await incoming connections. Your
|
||||||
|
operating system will allow only one server application to listen
|
||||||
|
to a particular port number on a particular IP address. If the special
|
||||||
|
value of 0 (zero) is used, then Tomcat will select a free port at random
|
||||||
|
to use for this connector. This is typically only useful in embedded and
|
||||||
|
testing applications.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">protocol</code></td><td>
|
||||||
|
<p>Sets the protocol to handle incoming traffic. To configure an AJP
|
||||||
|
connector this must be specified. If no value for protocol is provided,
|
||||||
|
an <a href="http.html">HTTP connector</a> rather than an AJP connector
|
||||||
|
will be configured.<br>
|
||||||
|
The standard protocol value for an AJP connector is <code>AJP/1.3</code>
|
||||||
|
which uses an auto-switching mechanism to select either a Java NIO based
|
||||||
|
connector or an APR/native based connector. If the
|
||||||
|
<code>PATH</code> (Windows) or <code>LD_LIBRARY_PATH</code> (on most unix
|
||||||
|
systems) environment variables contain the Tomcat native library, the
|
||||||
|
native/APR connector will be used. If the native library cannot be
|
||||||
|
found, the Java NIO based connector will be used.<br>
|
||||||
|
To use an explicit protocol rather than rely on the auto-switching
|
||||||
|
mechanism described above, the following values may be used:<br>
|
||||||
|
<code>org.apache.coyote.ajp.AjpProtocol</code>
|
||||||
|
- blocking Java connector<br>
|
||||||
|
<code>org.apache.coyote.ajp.AjpNioProtocol</code>
|
||||||
|
- non blocking Java NIO connector.<br>
|
||||||
|
<code>org.apache.coyote.ajp.AjpNio2Protocol</code>
|
||||||
|
- non blocking Java NIO2 connector.<br>
|
||||||
|
<code>org.apache.coyote.ajp.AjpAprProtocol</code>
|
||||||
|
- the APR/native connector.<br>
|
||||||
|
Custom implementations may also be used.<br>
|
||||||
|
Take a look at our <a href="#Connector_Comparison">Connector
|
||||||
|
Comparison</a> chart.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">proxyName</code></td><td>
|
||||||
|
<p>If this <strong>Connector</strong> is being used in a proxy
|
||||||
|
configuration, configure this attribute to specify the server name
|
||||||
|
to be returned for calls to <code>request.getServerName()</code>.
|
||||||
|
See <a href="#Proxy_Support">Proxy Support</a> for more
|
||||||
|
information.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">proxyPort</code></td><td>
|
||||||
|
<p>If this <strong>Connector</strong> is being used in a proxy
|
||||||
|
configuration, configure this attribute to specify the server port
|
||||||
|
to be returned for calls to <code>request.getServerPort()</code>.
|
||||||
|
See <a href="#Proxy_Support">Proxy Support</a> for more
|
||||||
|
information.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">redirectPort</code></td><td>
|
||||||
|
<p>If this <strong>Connector</strong> is supporting non-SSL
|
||||||
|
requests, and a request is received for which a matching
|
||||||
|
<code><security-constraint></code> requires SSL transport,
|
||||||
|
Catalina will automatically redirect the request to the port
|
||||||
|
number specified here.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">scheme</code></td><td>
|
||||||
|
<p>Set this attribute to the name of the protocol you wish to have
|
||||||
|
returned by calls to <code>request.getScheme()</code>. For
|
||||||
|
example, you would set this attribute to "<code>https</code>"
|
||||||
|
for an SSL Connector. The default value is "<code>http</code>".
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">secure</code></td><td>
|
||||||
|
<p>Set this attribute to <code>true</code> if you wish to have
|
||||||
|
calls to <code>request.isSecure()</code> to return <code>true</code>
|
||||||
|
for requests received by this Connector. You would want this on an
|
||||||
|
SSL Connector or a non SSL connector that is receiving data from a
|
||||||
|
SSL accelerator, like a crypto card, a SSL appliance or even a webserver.
|
||||||
|
The default value is <code>false</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">URIEncoding</code></td><td>
|
||||||
|
<p>This specifies the character encoding used to decode the URI bytes,
|
||||||
|
after %xx decoding the URL. If not specified, UTF-8 will be used unless
|
||||||
|
the <code>org.apache.catalina.STRICT_SERVLET_COMPLIANCE</code>
|
||||||
|
<a href="systemprops.html">system property</a> is set to <code>true</code>
|
||||||
|
in which case ISO-8859-1 will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">useBodyEncodingForURI</code></td><td>
|
||||||
|
<p>This specifies if the encoding specified in contentType should be used
|
||||||
|
for URI query parameters, instead of using the URIEncoding. This
|
||||||
|
setting is present for compatibility with Tomcat 4.1.x, where the
|
||||||
|
encoding specified in the contentType, or explicitly set using
|
||||||
|
Request.setCharacterEncoding method was also used for the parameters from
|
||||||
|
the URL. The default value is <code>false</code>.
|
||||||
|
</p>
|
||||||
|
<p><em>Notes:</em> See notes on this attribute in
|
||||||
|
<a href="http.html">HTTP Connector</a> documentation.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">useIPVHosts</code></td><td>
|
||||||
|
<p>Set this attribute to <code>true</code> to cause Tomcat to use
|
||||||
|
the IP address passed by the native web server to determine the Host
|
||||||
|
to send the request to. The default value is <code>false</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">xpoweredBy</code></td><td>
|
||||||
|
<p>Set this attribute to <code>true</code> to cause Tomcat to advertise
|
||||||
|
support for the Servlet specification using the header recommended in the
|
||||||
|
specification. The default value is <code>false</code>.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Standard_Implementations">Standard Implementations</h4><div class="text">
|
||||||
|
|
||||||
|
<p>To use AJP, you must specify the protocol attribute (see above).</p>
|
||||||
|
|
||||||
|
<p>The standard AJP connectors (BIO, NIO, NIO2 and APR/native) all support
|
||||||
|
the following attributes in addition to the common Connector attributes
|
||||||
|
listed above.</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">acceptCount</code></td><td>
|
||||||
|
<p>The maximum queue length for incoming connection requests when
|
||||||
|
all possible request processing threads are in use. Any requests
|
||||||
|
received when the queue is full will be refused. The default
|
||||||
|
value is 100.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">acceptorThreadCount</code></td><td>
|
||||||
|
<p>The number of threads to be used to accept connections. Increase this
|
||||||
|
value on a multi CPU machine, although you would never really need more
|
||||||
|
than <code>2</code>. Also, with a lot of non keep alive connections, you
|
||||||
|
might want to increase this value as well. Default value is
|
||||||
|
<code>1</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">acceptorThreadPriority</code></td><td>
|
||||||
|
<p>The priority of the acceptor threads. The threads used to accept
|
||||||
|
new connections. The default value is <code>5</code> (the value of the
|
||||||
|
<code>java.lang.Thread.NORM_PRIORITY</code> constant). See the JavaDoc
|
||||||
|
for the <code>java.lang.Thread</code> class for more details on what
|
||||||
|
this priority means.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">address</code></td><td>
|
||||||
|
<p>For servers with more than one IP address, this attribute
|
||||||
|
specifies which address will be used for listening on the specified
|
||||||
|
port. By default, this port will be used on all IP addresses
|
||||||
|
associated with the server. A value of <code>127.0.0.1</code>
|
||||||
|
indicates that the Connector will only listen on the loopback
|
||||||
|
interface.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">bindOnInit</code></td><td>
|
||||||
|
<p>Controls when the socket used by the connector is bound. By default it
|
||||||
|
is bound when the connector is initiated and unbound when the connector is
|
||||||
|
destroyed. If set to <code>false</code>, the socket will be bound when the
|
||||||
|
connector is started and unbound when it is stopped.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">clientCertProvider</code></td><td>
|
||||||
|
<p>When client certificate information is presented in a form other than
|
||||||
|
instances of <code>java.security.cert.X509Certificate</code> it needs to
|
||||||
|
be converted before it can be used and this property controls which JSSE
|
||||||
|
provider is used to perform the conversion. For example it is used with
|
||||||
|
the AJP connectors, the <a href="http.html">HTTP APR connector</a> and
|
||||||
|
with the <a href="valve.html#SSL_Authenticator_Valve">
|
||||||
|
org.apache.catalina.valves.SSLValve</a>.If not specified, the default
|
||||||
|
provider will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">connectionLinger</code></td><td>
|
||||||
|
<p>The number of seconds during which the sockets used by this
|
||||||
|
<strong>Connector</strong> will linger when they are closed. The default
|
||||||
|
value is <code>-1</code> which disables socket linger.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">connectionTimeout</code></td><td>
|
||||||
|
<p>The number of milliseconds this <strong>Connector</strong> will wait,
|
||||||
|
after accepting a connection, for the request URI line to be
|
||||||
|
presented. The default value for AJP protocol connectors
|
||||||
|
is <code>-1</code> (i.e. infinite).</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">executor</code></td><td>
|
||||||
|
<p>A reference to the name in an <a href="executor.html">Executor</a>
|
||||||
|
element. If this attribute is set, and the named executor exists, the
|
||||||
|
connector will use the executor, and all the other thread attributes will
|
||||||
|
be ignored. Note that if a shared executor is not specified for a
|
||||||
|
connector then the connector will use a private, internal executor to
|
||||||
|
provide the thread pool.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">executorTerminationTimeoutMillis</code></td><td>
|
||||||
|
<p>The time that the private internal executor will wait for request
|
||||||
|
processing threads to terminate before continuing with the process of
|
||||||
|
stopping the connector. If not set, the default is <code>0</code> (zero)
|
||||||
|
for the BIO connector and <code>5000</code> (5 seconds) for the NIO, NIO2
|
||||||
|
and APR/native connectors.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">keepAliveTimeout</code></td><td>
|
||||||
|
<p>The number of milliseconds this <strong>Connector</strong> will wait for
|
||||||
|
another AJP request before closing the connection.
|
||||||
|
The default value is to use the value that has been set for the
|
||||||
|
connectionTimeout attribute.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxConnections</code></td><td>
|
||||||
|
<p>The maximum number of connections that the server will accept and
|
||||||
|
process at any given time. When this number has been reached, the server
|
||||||
|
will accept, but not process, one further connection. This additional
|
||||||
|
connection be blocked until the number of connections being processed
|
||||||
|
falls below <strong>maxConnections</strong> at which point the server will
|
||||||
|
start accepting and processing new connections again. Note that once the
|
||||||
|
limit has been reached, the operating system may still accept connections
|
||||||
|
based on the <code>acceptCount</code> setting. The default value varies by
|
||||||
|
connector type. For BIO the default is the value of
|
||||||
|
<strong>maxThreads</strong> unless an <a href="executor.html">Executor</a>
|
||||||
|
is used in which case the default will be the value of maxThreads from the
|
||||||
|
executor. For NIO and NIO2 the default is <code>10000</code>.
|
||||||
|
For APR/native, the default is <code>8192</code>.</p>
|
||||||
|
<p>Note that for APR/native on Windows, the configured value will be
|
||||||
|
reduced to the highest multiple of 1024 that is less than or equal to
|
||||||
|
maxConnections. This is done for performance reasons.<br>
|
||||||
|
If set to a value of -1, the maxConnections feature is disabled
|
||||||
|
and connections are not counted.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxCookieCount</code></td><td>
|
||||||
|
<p>The maximum number of cookies that are permitted for a request. A value
|
||||||
|
of less than zero means no limit. If not specified, a default value of 200
|
||||||
|
will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxThreads</code></td><td>
|
||||||
|
<p>The maximum number of request processing threads to be created
|
||||||
|
by this <strong>Connector</strong>, which therefore determines the
|
||||||
|
maximum number of simultaneous requests that can be handled. If
|
||||||
|
not specified, this attribute is set to 200. If an executor is associated
|
||||||
|
with this connector, this attribute is ignored as the connector will
|
||||||
|
execute tasks using the executor rather than an internal thread pool. Note
|
||||||
|
that if an executor is configured any value set for this attribute will be
|
||||||
|
recorded correctly but it will be reported (e.g. via JMX) as
|
||||||
|
<code>-1</code> to make clear that it is not used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">minSpareThreads</code></td><td>
|
||||||
|
<p>The minimum number of threads always kept running. This includes both
|
||||||
|
active and idle threads. If not specified, the default of <code>10</code>
|
||||||
|
is used. If an executor is associated with this connector, this attribute
|
||||||
|
is ignored as the connector will execute tasks using the executor rather
|
||||||
|
than an internal thread pool. Note that if an executor is configured any
|
||||||
|
value set for this attribute will be recorded correctly but it will be
|
||||||
|
reported (e.g. via JMX) as <code>-1</code> to make clear that it is not
|
||||||
|
used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">packetSize</code></td><td>
|
||||||
|
<p>This attribute sets the maximum AJP packet size in Bytes. The maximum
|
||||||
|
value is 65536. It should be the same as the <code>max_packet_size</code>
|
||||||
|
directive configured for mod_jk. Normally it is not necessary to change
|
||||||
|
the maximum packet size. Problems with the default value have been
|
||||||
|
reported when sending certificates or certificate chains. The default
|
||||||
|
value is 8192. If set to less than 8192 then the setting will ignored and
|
||||||
|
the default value of 8192 used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">processorCache</code></td><td>
|
||||||
|
<p>The protocol handler caches Processor objects to speed up performance.
|
||||||
|
This setting dictates how many of these objects get cached.
|
||||||
|
<code>-1</code> means unlimited, default is <code>200</code>. If not using
|
||||||
|
Servlet 3.0 asynchronous processing, a good default is to use the same as
|
||||||
|
the maxThreads setting. If using Servlet 3.0 asynchronous processing, a
|
||||||
|
good default is to use the larger of maxThreads and the maximum number of
|
||||||
|
expected concurrent requests (synchronous and asynchronous).</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">requiredSecret</code></td><td>
|
||||||
|
<p>Only requests from workers with this secret keyword will be accepted.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">tcpNoDelay</code></td><td>
|
||||||
|
<p>If set to <code>true</code>, the TCP_NO_DELAY option will be
|
||||||
|
set on the server socket, which improves performance under most
|
||||||
|
circumstances. This is set to <code>true</code> by default.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">threadPriority</code></td><td>
|
||||||
|
<p>The priority of the request processing threads within the JVM.
|
||||||
|
The default value is <code>5</code> (the value of the
|
||||||
|
<code>java.lang.Thread.NORM_PRIORITY</code> constant). See the JavaDoc
|
||||||
|
for the <code>java.lang.Thread</code> class for more details on what
|
||||||
|
this priority means.If an executor is associated
|
||||||
|
with this connector, this attribute is ignored as the connector will
|
||||||
|
execute tasks using the executor rather than an internal thread pool. Note
|
||||||
|
that if an executor is configured any value set for this attribute will be
|
||||||
|
recorded correctly but it will be reported (e.g. via JMX) as
|
||||||
|
<code>-1</code> to make clear that it is not used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">tomcatAuthentication</code></td><td>
|
||||||
|
<p>If set to <code>true</code>, the authentication will be done in Tomcat.
|
||||||
|
Otherwise, the authenticated principal will be propagated from the native
|
||||||
|
webserver and used for authorization in Tomcat. Note that this principal
|
||||||
|
will have no roles associated with it.
|
||||||
|
The default value is <code>true</code>. If
|
||||||
|
<code>tomcatAuthorization</code> is set to <code>true</code> this
|
||||||
|
attribute has no effect.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">tomcatAuthorization</code></td><td>
|
||||||
|
<p>If set to <code>true</code>, the authenticated principal will be
|
||||||
|
propagated from the native webserver and considered already authenticated
|
||||||
|
in Tomcat. If the web application has one or more security constraints,
|
||||||
|
authorization will then be performed by Tomcat and roles assigned to the
|
||||||
|
authenticated principal. If the appropriate Tomcat Realm for the request
|
||||||
|
does not recognise the provided user name, a Principal will be still be
|
||||||
|
created but it will have no roles. The default value is
|
||||||
|
<code>false</code>.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Java_TCP_socket_attributes">Java TCP socket attributes</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The BIO, NIO and NIO2 implementation support the following Java TCP socket
|
||||||
|
attributes in addition to the common Connector and HTTP attributes listed
|
||||||
|
above.</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">socket.rxBufSize</code></td><td>
|
||||||
|
<p>(int)The socket receive buffer (SO_RCVBUF) size in bytes. JVM default
|
||||||
|
used if not set.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.txBufSize</code></td><td>
|
||||||
|
<p>(int)The socket send buffer (SO_SNDBUF) size in bytes. JVM default
|
||||||
|
used if not set.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.tcpNoDelay</code></td><td>
|
||||||
|
<p>(bool)This is equivalent to standard attribute
|
||||||
|
<strong>tcpNoDelay</strong>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.soKeepAlive</code></td><td>
|
||||||
|
<p>(bool)Boolean value for the socket's keep alive setting
|
||||||
|
(SO_KEEPALIVE). JVM default used if not set.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.ooBInline</code></td><td>
|
||||||
|
<p>(bool)Boolean value for the socket OOBINLINE setting. JVM default
|
||||||
|
used if not set.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.soReuseAddress</code></td><td>
|
||||||
|
<p>(bool)Boolean value for the sockets reuse address option
|
||||||
|
(SO_REUSEADDR). JVM default used if not set.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.soLingerOn</code></td><td>
|
||||||
|
<p>(bool)Boolean value for the sockets so linger option (SO_LINGER).
|
||||||
|
A value for the standard attribute <strong>connectionLinger</strong>
|
||||||
|
that is >=0 is equivalent to setting this to <code>true</code>.
|
||||||
|
A value for the standard attribute <strong>connectionLinger</strong>
|
||||||
|
that is <0 is equivalent to setting this to <code>false</code>.
|
||||||
|
Both this attribute and <code>soLingerTime</code> must be set else the
|
||||||
|
JVM defaults will be used for both.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.soLingerTime</code></td><td>
|
||||||
|
<p>(int)Value in seconds for the sockets so linger option (SO_LINGER).
|
||||||
|
This is equivalent to standard attribute
|
||||||
|
<strong>connectionLinger</strong>.
|
||||||
|
Both this attribute and <code>soLingerOn</code> must be set else the
|
||||||
|
JVM defaults will be used for both.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.soTimeout</code></td><td>
|
||||||
|
<p>This is equivalent to standard attribute
|
||||||
|
<strong>connectionTimeout</strong>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.performanceConnectionTime</code></td><td>
|
||||||
|
<p>(int)The first value for the performance settings. See
|
||||||
|
<a href="http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html#setPerformancePreferences(int,%20int,%20int)">Socket Performance Options</a>
|
||||||
|
All three performance attributes must be set else the JVM defaults will
|
||||||
|
be used for all three.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.performanceLatency</code></td><td>
|
||||||
|
<p>(int)The second value for the performance settings. See
|
||||||
|
<a href="http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html#setPerformancePreferences(int,%20int,%20int)">Socket Performance Options</a>
|
||||||
|
All three performance attributes must be set else the JVM defaults will
|
||||||
|
be used for all three.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.performanceBandwidth</code></td><td>
|
||||||
|
<p>(int)The third value for the performance settings. See
|
||||||
|
<a href="http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html#setPerformancePreferences(int,%20int,%20int)">Socket Performance Options</a>
|
||||||
|
All three performance attributes must be set else the JVM defaults will
|
||||||
|
be used for all three.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.unlockTimeout</code></td><td>
|
||||||
|
<p>(int) The timeout for a socket unlock. When a connector is stopped, it will try to release the acceptor thread by opening a connector to itself.
|
||||||
|
The default value is <code>250</code> and the value is in milliseconds</p>
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="NIO_specific_configuration">NIO specific configuration</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The following attributes are specific to the NIO connector.</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">socket.directBuffer</code></td><td>
|
||||||
|
<p>(bool)Boolean value, whether to use direct ByteBuffers or java mapped
|
||||||
|
ByteBuffers. Default is <code>false</code>.<br>
|
||||||
|
When you are using direct buffers, make sure you allocate the
|
||||||
|
appropriate amount of memory for the direct memory space. On Sun's JDK
|
||||||
|
that would be something like <code>-XX:MaxDirectMemorySize=256m</code>.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.appReadBufSize</code></td><td>
|
||||||
|
<p>(int)Each connection that is opened up in Tomcat get associated with
|
||||||
|
a read ByteBuffer. This attribute controls the size of this buffer. By
|
||||||
|
default this read buffer is sized at <code>8192</code> bytes. For lower
|
||||||
|
concurrency, you can increase this to buffer more data. For an extreme
|
||||||
|
amount of keep alive connections, decrease this number or increase your
|
||||||
|
heap size.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.appWriteBufSize</code></td><td>
|
||||||
|
<p>(int)Each connection that is opened up in Tomcat get associated with
|
||||||
|
a write ByteBuffer. This attribute controls the size of this buffer. By
|
||||||
|
default this write buffer is sized at <code>8192</code> bytes. For low
|
||||||
|
concurrency you can increase this to buffer more response data. For an
|
||||||
|
extreme amount of keep alive connections, decrease this number or
|
||||||
|
increase your heap size.<br>
|
||||||
|
The default value here is pretty low, you should up it if you are not
|
||||||
|
dealing with tens of thousands concurrent connections.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.bufferPool</code></td><td>
|
||||||
|
<p>(int)The NIO connector uses a class called NioChannel that holds
|
||||||
|
elements linked to a socket. To reduce garbage collection, the NIO
|
||||||
|
connector caches these channel objects. This value specifies the size of
|
||||||
|
this cache. The default value is <code>500</code>, and represents that
|
||||||
|
the cache will hold 500 NioChannel objects. Other values are
|
||||||
|
<code>-1</code> for unlimited cache and <code>0</code> for no cache.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.bufferPoolSize</code></td><td>
|
||||||
|
<p>(int)The NioChannel pool can also be size based, not used object
|
||||||
|
based. The size is calculated as follows:<br>
|
||||||
|
NioChannel
|
||||||
|
<code>buffer size = read buffer size + write buffer size</code><br>
|
||||||
|
SecureNioChannel <code>buffer size = application read buffer size +
|
||||||
|
application write buffer size + network read buffer size +
|
||||||
|
network write buffer size</code><br>
|
||||||
|
The value is in bytes, the default value is <code>1024*1024*100</code>
|
||||||
|
(100MB).</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.processorCache</code></td><td>
|
||||||
|
<p>(int)Tomcat will cache SocketProcessor objects to reduce garbage
|
||||||
|
collection. The integer value specifies how many objects to keep in the
|
||||||
|
cache at most. The default is <code>500</code>. Other values are
|
||||||
|
<code>-1</code> for unlimited cache and <code>0</code> for no cache.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.keyCache</code></td><td>
|
||||||
|
<p>(int)Tomcat will cache KeyAttachment objects to reduce garbage
|
||||||
|
collection. The integer value specifies how many objects to keep in the
|
||||||
|
cache at most. The default is <code>500</code>. Other values are
|
||||||
|
<code>-1</code> for unlimited cache and <code>0</code> for no cache.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.eventCache</code></td><td>
|
||||||
|
<p>(int)Tomcat will cache PollerEvent objects to reduce garbage
|
||||||
|
collection. The integer value specifies how many objects to keep in the
|
||||||
|
cache at most. The default is <code>500</code>. Other values are
|
||||||
|
<code>-1</code> for unlimited cache and <code>0</code> for no cache.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">selectorPool.maxSelectors</code></td><td>
|
||||||
|
<p>(int)The max selectors to be used in the pool, to reduce selector
|
||||||
|
contention. Use this option when the command line
|
||||||
|
<code>org.apache.tomcat.util.net.NioSelectorShared</code> value is set
|
||||||
|
to false. Default value is <code>200</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">selectorPool.maxSpareSelectors</code></td><td>
|
||||||
|
<p>(int)The max spare selectors to be used in the pool, to reduce
|
||||||
|
selector contention. When a selector is returned to the pool, the system
|
||||||
|
can decide to keep it or let it be GC'd. Use this option when the
|
||||||
|
command line <code>org.apache.tomcat.util.net.NioSelectorShared</code>
|
||||||
|
value is set to false. Default value is <code>-1</code> (unlimited).</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">command-line-options</code></td><td>
|
||||||
|
<p>The following command line options are available for the NIO
|
||||||
|
connector:<br>
|
||||||
|
<code>-Dorg.apache.tomcat.util.net.NioSelectorShared=true|false</code>
|
||||||
|
- default is <code>true</code>. Set this value to <code>false</code> if you wish to
|
||||||
|
use a selector for each thread. When you set it to <code>false</code>, you can
|
||||||
|
control the size of the pool of selectors by using the
|
||||||
|
<strong>selectorPool.maxSelectors</strong> attribute.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="NIO2_specific_configuration">NIO2 specific configuration</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The following attributes are specific to the NIO2 connector.</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">useCaches</code></td><td>
|
||||||
|
<p>(bool)Use this attribute to enable or disable object caching to
|
||||||
|
reduce the amount of GC objects produced.
|
||||||
|
The default value is <code>false</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.directBuffer</code></td><td>
|
||||||
|
<p>(bool)Boolean value, whether to use direct ByteBuffers or java mapped
|
||||||
|
ByteBuffers. Default is <code>false</code>.<br>
|
||||||
|
When you are using direct buffers, make sure you allocate the
|
||||||
|
appropriate amount of memory for the direct memory space. On Sun's JDK
|
||||||
|
that would be something like <code>-XX:MaxDirectMemorySize=256m</code>.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.appReadBufSize</code></td><td>
|
||||||
|
<p>(int)Each connection that is opened up in Tomcat get associated with
|
||||||
|
a read ByteBuffer. This attribute controls the size of this buffer. By
|
||||||
|
default this read buffer is sized at <code>8192</code> bytes. For lower
|
||||||
|
concurrency, you can increase this to buffer more data. For an extreme
|
||||||
|
amount of keep alive connections, decrease this number or increase your
|
||||||
|
heap size.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.appWriteBufSize</code></td><td>
|
||||||
|
<p>(int)Each connection that is opened up in Tomcat get associated with
|
||||||
|
a write ByteBuffer. This attribute controls the size of this buffer. By
|
||||||
|
default this write buffer is sized at <code>8192</code> bytes. For low
|
||||||
|
concurrency you can increase this to buffer more response data. For an
|
||||||
|
extreme amount of keep alive connections, decrease this number or
|
||||||
|
increase your heap size.<br>
|
||||||
|
The default value here is pretty low, you should up it if you are not
|
||||||
|
dealing with tens of thousands concurrent connections.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.bufferPoolSize</code></td><td>
|
||||||
|
<p>(int)The NIO2 connector uses a class called Nio2Channel that holds
|
||||||
|
elements linked to a socket. To reduce garbage collection, the NIO
|
||||||
|
connector caches these channel objects. This value specifies the size of
|
||||||
|
this cache. The default value is <code>500</code>, and represents that
|
||||||
|
the cache will hold 500 Nio2Channel objects. Other values are
|
||||||
|
<code>-1</code> for unlimited cache and <code>0</code> for no cache.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.processorCache</code></td><td>
|
||||||
|
<p>(int)Tomcat will cache SocketProcessor objects to reduce garbage
|
||||||
|
collection. The integer value specifies how many objects to keep in the
|
||||||
|
cache at most. The default is <code>500</code>. Other values are
|
||||||
|
<code>-1</code> for unlimited cache and <code>0</code> for no cache.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">socket.socketWrapperCache</code></td><td>
|
||||||
|
<p>(int)Tomcat will cache SocketWrapper objects to reduce garbage
|
||||||
|
collection. The integer value specifies how many objects to keep in the
|
||||||
|
cache at most. The default is <code>500</code>. Other values are
|
||||||
|
<code>-1</code> for unlimited cache and <code>0</code> for no cache.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="APR/native_specific_configuration">APR/native specific configuration</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The APR/native implementation supports the following attributes in
|
||||||
|
addition to the common Connector and AJP attributes listed above.</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">pollTime</code></td><td>
|
||||||
|
<p>Duration of a poll call in microseconds. Lowering this value will
|
||||||
|
slightly decrease latency of connections being kept alive in some cases
|
||||||
|
, but will use more CPU as more poll calls are being made. The default
|
||||||
|
value is 2000 (2ms).
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">pollerSize</code></td><td>
|
||||||
|
<p>Amount of sockets that the poller responsible for polling kept alive
|
||||||
|
connections can hold at a given time. Extra connections will be closed
|
||||||
|
right away. The default value is 8192, corresponding to 8192 keep-alive
|
||||||
|
connections.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><h3 id="Nested_Components">Nested Components</h3><div class="text">
|
||||||
|
|
||||||
|
<p>None at this time.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Special_Features">Special Features</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Proxy_Support">Proxy Support</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The <code>proxyName</code> and <code>proxyPort</code> attributes can
|
||||||
|
be used when Tomcat is run behind a proxy server. These attributes
|
||||||
|
modify the values returned to web applications that call the
|
||||||
|
<code>request.getServerName()</code> and <code>request.getServerPort()</code>
|
||||||
|
methods, which are often used to construct absolute URLs for redirects.
|
||||||
|
Without configuring these attributes, the values returned would reflect
|
||||||
|
the server name and port on which the connection from the proxy server
|
||||||
|
was received, rather than the server name and port to whom the client
|
||||||
|
directed the original request.</p>
|
||||||
|
|
||||||
|
<p>For more information, see the
|
||||||
|
<a href="../proxy-howto.html">Proxy Support HOW-TO</a>.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Connector_Comparison">Connector Comparison</h4><div class="text">
|
||||||
|
|
||||||
|
<p>Below is a small chart that shows how the connectors differ.</p>
|
||||||
|
|
||||||
|
<table class="defaultTable" style="text-align: center;">
|
||||||
|
<tr>
|
||||||
|
<th></th>
|
||||||
|
<th style="text-align: center;">Java Blocking Connector<br>BIO</th>
|
||||||
|
<th style="text-align: center;">Java Nio Connector<br>NIO</th>
|
||||||
|
<th style="text-align: center;">Java Nio2 Connector<br>NIO2</th>
|
||||||
|
<th style="text-align: center;">APR/native Connector<br>APR</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Classname</th>
|
||||||
|
<td><code class="noHighlight">AjpProtocol</code></td>
|
||||||
|
<td><code class="noHighlight">AjpNioProtocol</code></td>
|
||||||
|
<td><code class="noHighlight">AjpNio2Protocol</code></td>
|
||||||
|
<td><code class="noHighlight">AjpAprProtocol</code></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Tomcat Version</th>
|
||||||
|
<td>3.x onwards</td>
|
||||||
|
<td>7.x onwards</td>
|
||||||
|
<td>8.x onwards</td>
|
||||||
|
<td>5.5.x onwards</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Support Polling</th>
|
||||||
|
<td>NO</td>
|
||||||
|
<td>YES</td>
|
||||||
|
<td>YES</td>
|
||||||
|
<td>YES</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Polling Size</th>
|
||||||
|
<td>N/A</td>
|
||||||
|
<td><code class="noHighlight">maxConnections</code></td>
|
||||||
|
<td><code class="noHighlight">maxConnections</code></td>
|
||||||
|
<td><code class="noHighlight">maxConnections</code></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Read Request Headers</th>
|
||||||
|
<td>Blocking</td>
|
||||||
|
<td>Blocking</td>
|
||||||
|
<td>Blocking</td>
|
||||||
|
<td>Blocking</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Read Request Body</th>
|
||||||
|
<td>Blocking</td>
|
||||||
|
<td>Blocking</td>
|
||||||
|
<td>Blocking</td>
|
||||||
|
<td>Blocking</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Write Response Headers and Body</th>
|
||||||
|
<td>Blocking</td>
|
||||||
|
<td>Blocking</td>
|
||||||
|
<td>Blocking</td>
|
||||||
|
<td>Blocking</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Wait for next Request</th>
|
||||||
|
<td>Blocking</td>
|
||||||
|
<td>Non Blocking</td>
|
||||||
|
<td>Non Blocking</td>
|
||||||
|
<td>Non Blocking</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Max Connections</th>
|
||||||
|
<td><code class="noHighlight">maxConnections</code></td>
|
||||||
|
<td><code class="noHighlight">maxConnections</code></td>
|
||||||
|
<td><code class="noHighlight">maxConnections</code></td>
|
||||||
|
<td><code class="noHighlight">maxConnections</code></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,540 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - Automatic Deployment - Use cases</title><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/automatic-deployment">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Automatic Deployment - Use cases</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Key">Key</a></li><li><a href="#New_files">New files</a></li><li><a href="#Deleted_files">Deleted files</a></li><li><a href="#Modified_files">Modified files</a></li><li><a href="#Added_files">Added files</a></li><li><a href="#Notes">Notes</a></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
|
||||||
|
<p>This page defines the expected behaviour of the automatic deployer in many
|
||||||
|
typical use cases. This is a complex area of Tomcat's functionality.
|
||||||
|
While any difference between this document and Tomcat's behaviour is a
|
||||||
|
bug, the fix may be to change this document, Tomcat's behaviour or
|
||||||
|
both.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Key">Key</h3><div class="text">
|
||||||
|
|
||||||
|
<table class="detail-table">
|
||||||
|
<tr>
|
||||||
|
<th>Term</th><th>Description</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>XML</td>
|
||||||
|
<td>An XML configuration file located in the Host's
|
||||||
|
<em>configBase</em>. It must contain a single <Context> element
|
||||||
|
and may contain optional nested elements. It does not define an
|
||||||
|
explicit <em>docBase</em> attribute. It represents a single web
|
||||||
|
application. It is often referred to as a context.xml file.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td>XML+EW</td>
|
||||||
|
<td>An XML configuration file located in the Host's
|
||||||
|
<em>configBase</em>. It must contain a single <Context> element
|
||||||
|
and may contain optional nested elements. It includes an explicit
|
||||||
|
<em>docBase</em> attribute that points to an external WAR. It
|
||||||
|
represents a single web application. It is often referred to as a
|
||||||
|
context.xml file.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td>XML+ED</td>
|
||||||
|
<td>An XML configuration file located in the Host's
|
||||||
|
<em>configBase</em>. It must contain a single <Context> element
|
||||||
|
and may contain optional nested elements. It includes an explicit
|
||||||
|
<em>docBase</em> attribute that points to an external directory. It
|
||||||
|
represents a single web application. It is often referred to as a
|
||||||
|
context.xml file.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td>WAR</td>
|
||||||
|
<td>A WAR file located in the Host's <em>appBase</em>. The WAR does
|
||||||
|
not include an embedded context.xml file.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td>WAR+XML</td>
|
||||||
|
<td>A WAR file located in the Host's <em>appBase</em>. The WAR does
|
||||||
|
include an embedded context.xml file.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td>DIR</td>
|
||||||
|
<td>A directory located in the Host's <em>appBase</em>. The directory
|
||||||
|
does not include an embedded context.xml file.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td>DIR+XML</td>
|
||||||
|
<td>A directory located in the Host's <em>appBase</em>. The directory
|
||||||
|
does include an embedded context.xml file.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td>redeploy</td>
|
||||||
|
<td>The Context object that represents the web application is destroyed
|
||||||
|
and a new Context object is created. If present and permitted by the
|
||||||
|
configuration, this new Context object is created by parsing the
|
||||||
|
context.xml file. The web.xml file is parsed during the application
|
||||||
|
start process. Any sessions stored in the standard Manager in the
|
||||||
|
default configuration will not be persisted. Any requests to the web
|
||||||
|
application during the redeploy will be handled as if the web
|
||||||
|
application is not deployed.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td>reload</td>
|
||||||
|
<td>The Context object that represents the web application is stopped and
|
||||||
|
then started. The web.xml file is parsed during the application start
|
||||||
|
process. Any sessions stored in the standard Manager in the default
|
||||||
|
configuration will not be persisted. Any requests to the web
|
||||||
|
application during the reload will be held until the reload completes
|
||||||
|
at which point they will continue using the reloaded web application.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div><h3 id="New_files">New files</h3><div class="text">
|
||||||
|
|
||||||
|
<p>This section describes Tomcat's behaviour when the automatic
|
||||||
|
deployment process discovers a new web application.</p>
|
||||||
|
|
||||||
|
<table class="detail-table">
|
||||||
|
<tr>
|
||||||
|
<th rowspan="2">Starting artifact(s)</th>
|
||||||
|
<th colspan="3">Configuration Settings</th>
|
||||||
|
<th colspan="4">Result</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>deployXML</th><th>copyXML</th><th>unpackWARs</th>
|
||||||
|
<th>XML</th><th>WAR</th><th>DIR</th><th>Notes</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>XML</td>
|
||||||
|
<td>either</td><td>either</td><td>either</td>
|
||||||
|
<td>Y</td><td>N</td><td>N</td><td>1, 2, 3</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>XML+EW</td>
|
||||||
|
<td>either</td><td>either</td><td>false</td>
|
||||||
|
<td>Y</td><td>N</td><td>N</td><td>1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>XML+EW</td>
|
||||||
|
<td>either</td><td>either</td><td>true</td>
|
||||||
|
<td>Y</td><td>N</td><td>Y</td><td>1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>XML+ED</td>
|
||||||
|
<td>either</td><td>either</td><td>either</td>
|
||||||
|
<td>Y</td><td>N</td><td>N</td><td>1, 2</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>WAR+XML</td>
|
||||||
|
<td>false</td><td>either</td><td>false</td>
|
||||||
|
<td>N</td><td>Y</td><td>N</td><td>4</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>WAR+XML</td>
|
||||||
|
<td>false</td><td>either</td><td>true</td>
|
||||||
|
<td>N</td><td>Y</td><td>Y</td><td>4</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>WAR+XML</td>
|
||||||
|
<td>true</td><td>false</td><td>false</td>
|
||||||
|
<td>N</td><td>Y</td><td>N</td><td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>WAR+XML</td>
|
||||||
|
<td>true</td><td>false</td><td>true</td>
|
||||||
|
<td>N</td><td>Y</td><td>Y</td><td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>WAR+XML</td>
|
||||||
|
<td>true</td><td>true</td><td>false</td>
|
||||||
|
<td>Y</td><td>Y</td><td>N</td><td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>WAR+XML</td>
|
||||||
|
<td>true</td><td>true</td><td>true</td>
|
||||||
|
<td>Y</td><td>Y</td><td>Y</td><td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>WAR</td>
|
||||||
|
<td>either</td><td>either</td><td>false</td>
|
||||||
|
<td>N</td><td>Y</td><td>N</td><td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>WAR</td>
|
||||||
|
<td>either</td><td>either</td><td>true</td>
|
||||||
|
<td>N</td><td>Y</td><td>Y</td><td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>DIR+XML</td>
|
||||||
|
<td>false</td><td>either</td><td>either</td>
|
||||||
|
<td>N</td><td>N</td><td>Y</td><td>4</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>DIR+XML</td>
|
||||||
|
<td>true</td><td>false</td><td>either</td>
|
||||||
|
<td>N</td><td>N</td><td>Y</td><td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>DIR+XML</td>
|
||||||
|
<td>true</td><td>true</td><td>either</td>
|
||||||
|
<td>Y</td><td>N</td><td>Y</td><td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>DIR</td>
|
||||||
|
<td>false</td><td>either</td><td>either</td>
|
||||||
|
<td>N</td><td>N</td><td>Y</td><td></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div><h3 id="Deleted_files">Deleted files</h3><div class="text">
|
||||||
|
|
||||||
|
<p>This section describes Tomcat's behaviour when the automatic
|
||||||
|
deployment process detects that a web application file has been deleted.</p>
|
||||||
|
|
||||||
|
<p>When a file is deleted or modified any redeploy resources that are listed
|
||||||
|
after the modified/deleted resource are themselves deleted (and possibly
|
||||||
|
re-created). The order of redeploy resources is:</p>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li>WAR</li>
|
||||||
|
<li>DIR</li>
|
||||||
|
<li>XML</li>
|
||||||
|
<li>global resources</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<p>There are some exceptions to the deletion rule above:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>global resources are never deleted</li>
|
||||||
|
<li>external resources are never deleted</li>
|
||||||
|
<li>if the WAR or DIR has been modified then the XML file is only deleted if
|
||||||
|
<em>copyXML</em> is <code>true</code> and <em>deployXML</em> is
|
||||||
|
<code>true</code></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>In the following table:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>'-' means "unchanged from not present". i.e. the artifact wasn't present
|
||||||
|
before the change and isn't present after it either. '-' rather than 'N'
|
||||||
|
is used to focus attention on what changes.</li>
|
||||||
|
<li>'R' means that the directory is re-created by expanding the WAR file.
|
||||||
|
This will only happen if <em>unpackWARs</em> is <code>true</code>.</li>
|
||||||
|
<li>'XW' means that the if the WAR contains a META-INF/context.xml file it
|
||||||
|
will be extracted and placed in the Host's <em>configBase</em>.
|
||||||
|
This only happens if <em>copyXML</em> is <code>true</code> and
|
||||||
|
<em>deployXML</em> is <code>true</code>.</li>
|
||||||
|
<li>'XD' means that the if the directory contains a META-INF/context.xml
|
||||||
|
file it will be copied to the Host's <em>configBase</em>. This only
|
||||||
|
happens if <em>copyXML</em> is <code>true</code> and <em>deployXML</em>
|
||||||
|
is <code>true</code>.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<table class="detail-table">
|
||||||
|
<tr>
|
||||||
|
<th colspan="3">Artifacts present</th>
|
||||||
|
<th rowspan="2">Artifact removed</th>
|
||||||
|
<th colspan="4">Artifacts remaining</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>XML</th><th>WAR</th><th>DIR</th>
|
||||||
|
<th>XML</th><th>WAR</th><th>DIR</th><th>Notes</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>N</td><td>N</td><td>Y</td>
|
||||||
|
<td>DIR</td>
|
||||||
|
<td>-</td><td>-</td><td>N</td><td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>N</td><td>Y</td><td>N</td>
|
||||||
|
<td>WAR</td>
|
||||||
|
<td>-</td><td>N</td><td>-</td><td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>N</td><td>Y</td><td>Y</td>
|
||||||
|
<td>DIR</td>
|
||||||
|
<td>-</td><td>Y</td><td>R</td><td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>N</td><td>Y</td><td>Y</td>
|
||||||
|
<td>WAR</td>
|
||||||
|
<td>-</td><td>N</td><td>N</td><td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>N</td><td>N</td>
|
||||||
|
<td>XML</td>
|
||||||
|
<td>N</td><td>-</td><td>-</td><td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>N</td><td>Y</td>
|
||||||
|
<td>DIR</td>
|
||||||
|
<td>N</td><td>-</td><td>N</td><td>5</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>N</td><td>Y</td>
|
||||||
|
<td>XML</td>
|
||||||
|
<td>XD</td><td>-</td><td>Y</td><td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>Y</td><td>N</td>
|
||||||
|
<td>WAR</td>
|
||||||
|
<td>N</td><td>N</td><td>-</td><td>5</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>Y</td><td>N</td>
|
||||||
|
<td>XML</td>
|
||||||
|
<td>XW</td><td>Y</td><td>-</td><td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>Y</td><td>Y</td>
|
||||||
|
<td>DIR</td>
|
||||||
|
<td>XW</td><td>Y</td><td>R</td><td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>Y</td><td>Y</td>
|
||||||
|
<td>WAR</td>
|
||||||
|
<td>N</td><td>N</td><td>N</td><td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>Y</td><td>Y</td>
|
||||||
|
<td>XML</td>
|
||||||
|
<td>XW</td><td>Y</td><td>Y</td><td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>Y (external)</td><td>N</td>
|
||||||
|
<td>WAR</td>
|
||||||
|
<td>Y</td><td>N</td><td>-</td><td>3</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>Y (external)</td><td>N</td>
|
||||||
|
<td>XML</td>
|
||||||
|
<td>N</td><td>Y (external)</td><td>-</td><td>6</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>N</td><td>Y (external)</td>
|
||||||
|
<td>DIR</td>
|
||||||
|
<td>Y</td><td>-</td><td>N</td><td>3</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>N</td><td>Y (external)</td>
|
||||||
|
<td>XML</td>
|
||||||
|
<td>N</td><td>-</td><td>Y (external)</td><td>6</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>Y (external)</td><td>Y</td>
|
||||||
|
<td>DIR</td>
|
||||||
|
<td>Y</td><td>Y (external)</td><td>R</td><td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>Y (external)</td><td>Y</td>
|
||||||
|
<td>WAR</td>
|
||||||
|
<td>Y</td><td>N</td><td>N</td><td>3</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>Y (external)</td><td>Y</td>
|
||||||
|
<td>XML</td>
|
||||||
|
<td>N</td><td>Y (external)</td><td>N</td><td>6</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div><h3 id="Modified_files">Modified files</h3><div class="text">
|
||||||
|
|
||||||
|
<p>This section describes Tomcat's behaviour when the automatic
|
||||||
|
deployment process detects that a web application file has been modified.</p>
|
||||||
|
|
||||||
|
<p>In the following table:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>'-' means "unchanged from not present". i.e. the artifact wasn't present
|
||||||
|
before the change and isn't present after it either. '-' rather than 'N'
|
||||||
|
is used to focus attention on what changes.</li>
|
||||||
|
<li>'M' means that the artifact has been modified.</li>
|
||||||
|
<li>'R' means that the directory is deleted and re-created by expanding the
|
||||||
|
WAR file. This will only happen if <em>unpackWARs</em> is
|
||||||
|
<code>true</code>.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<table class="detail-table">
|
||||||
|
<tr>
|
||||||
|
<th colspan="3">Artifacts present</th>
|
||||||
|
<th rowspan="2">Artifact modified</th>
|
||||||
|
<th colspan="4">Artifacts remaining</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>XML</th><th>WAR</th><th>DIR</th>
|
||||||
|
<th>XML</th><th>WAR</th><th>DIR</th><th>Action</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>N</td><td>N</td><td>Y</td>
|
||||||
|
<td>DIR</td>
|
||||||
|
<td>-</td><td>-</td><td>M</td><td>None</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>N</td><td>Y</td><td>N</td>
|
||||||
|
<td>WAR</td>
|
||||||
|
<td>-</td><td>M</td><td>-</td><td>Redeploy</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>N</td><td>Y</td><td>Y</td>
|
||||||
|
<td>DIR</td>
|
||||||
|
<td>-</td><td>Y</td><td>M</td><td>None</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>N</td><td>Y</td><td>Y</td>
|
||||||
|
<td>WAR</td>
|
||||||
|
<td>-</td><td>M</td><td>R</td><td>Redeploy</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>N</td><td>N</td>
|
||||||
|
<td>XML</td>
|
||||||
|
<td>M</td><td>-</td><td>-</td><td>Redeploy</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>N</td><td>Y</td>
|
||||||
|
<td>DIR</td>
|
||||||
|
<td>Y</td><td>-</td><td>M</td><td>None</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>N</td><td>Y</td>
|
||||||
|
<td>XML</td>
|
||||||
|
<td>M</td><td>-</td><td>Y</td><td>Redeploy</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>Y</td><td>N</td>
|
||||||
|
<td>WAR</td>
|
||||||
|
<td>Y</td><td>M</td><td>-</td><td>Reload</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>Y</td><td>N</td>
|
||||||
|
<td>XML</td>
|
||||||
|
<td>M</td><td>Y</td><td>-</td><td>Redeploy</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>Y</td><td>Y</td>
|
||||||
|
<td>DIR</td>
|
||||||
|
<td>Y</td><td>Y</td><td>M</td><td>None</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>Y</td><td>Y</td>
|
||||||
|
<td>WAR</td>
|
||||||
|
<td>Y</td><td>M</td><td>R</td><td>Reload</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>Y</td><td>Y</td>
|
||||||
|
<td>XML</td>
|
||||||
|
<td>M</td><td>Y</td><td>Y</td><td>Redeploy</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>Y(external)</td><td>N</td>
|
||||||
|
<td>WAR</td>
|
||||||
|
<td>Y</td><td>M(external)</td><td>-</td><td>Reload</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>Y(external)</td><td>N</td>
|
||||||
|
<td>XML</td>
|
||||||
|
<td>M</td><td>Y(external)</td><td>-</td><td>Redeploy</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>N</td><td>Y(external)</td>
|
||||||
|
<td>DIR</td>
|
||||||
|
<td>Y</td><td>-</td><td>M(external)</td><td>None</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>N</td><td>Y(external)</td>
|
||||||
|
<td>XML</td>
|
||||||
|
<td>M</td><td>-</td><td>Y(external)</td><td>Redeploy</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>Y(external)</td><td>Y</td>
|
||||||
|
<td>DIR</td>
|
||||||
|
<td>Y</td><td>Y(external)</td><td>M</td><td>None</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>Y(external)</td><td>Y</td>
|
||||||
|
<td>WAR</td>
|
||||||
|
<td>Y</td><td>M(external)</td><td>R</td><td>Reload</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Y</td><td>Y(external)</td><td>Y</td>
|
||||||
|
<td>XML</td>
|
||||||
|
<td>M</td><td>Y(external)</td><td>Y</td><td>Redeploy</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div><h3 id="Added_files">Added files</h3><div class="text">
|
||||||
|
|
||||||
|
<p>This is treated as if the added file has been modified with the following
|
||||||
|
additional actions:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>If a WAR is added, any DIR is removed and may be recreated depending on
|
||||||
|
<em>unpackWARs</em>.</li>
|
||||||
|
<li>If an XML file is added that refers to an external <em>docBase</em> any
|
||||||
|
WAR or DIR in the appBase will be removed. The DIR may be recreated if
|
||||||
|
the external resource is a WAR and <em>unpackWARs</em> is true.</li>
|
||||||
|
<li>If a DIR is added when a WAR already exists and <em>unpackWARs</em> is
|
||||||
|
<code>false</code>, the DIR will be ignored but a warning will be
|
||||||
|
logged when the DIR is first detected. If the WAR is removed, the DIR
|
||||||
|
will be left and may be deployed via automatic deployment.</li>
|
||||||
|
<li>If a WAR is added to the <em>appBase</em> when an external WAR already
|
||||||
|
exists, the WAR in the <em>appBase</em> will be ignored but a warning
|
||||||
|
will be logged when the WAR in the <em>appBase</em> is first detected.
|
||||||
|
If the external WAR is removed, the WAR in the <em>appBase</em> will be
|
||||||
|
left and may be deployed via automatic deployment.</li>
|
||||||
|
<li>If an XML file is added to the META-INF directory of an application
|
||||||
|
deployed from that DIR, the application will always be redeployed. The
|
||||||
|
result will be the same as for a new deployment.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Notes">Notes</h3><div class="text">
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li><em>deployXML</em> and <em>copyXML</em> are ignored since an XML file
|
||||||
|
was discovered in the <em>configBase</em>.</li>
|
||||||
|
<li><em>unpackWARs</em> is ignored since there is no WAR file.</li>
|
||||||
|
<li>The context will fail to start because there is no content in the
|
||||||
|
expected <em>docBase</em>.</li>
|
||||||
|
<li>The web application fails to deploy because it contains an embedded
|
||||||
|
META-INF/context.xml, <em>deployXML</em> is <code>false</code> and an
|
||||||
|
XML has not been provided in the <em>configBase</em>.</li>
|
||||||
|
<li>The XML file is only deleted if <em>copyXML</em> is <code>true</code>
|
||||||
|
and <em>deployXML</em> is <code>true</code>.</li>
|
||||||
|
<li>Although the external resource is still present, the web application is
|
||||||
|
fully undeployed as Tomcat has no knowledge of the external resource.
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,130 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The Cluster Channel object</title><meta name="author" content="Filip Hanik"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/cluster-channel">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The Cluster Channel object</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Nested_Components">Nested Components</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Common_Attributes">Common Attributes</a></li><li><a href="#org.apache.catalina.tribes.group.GroupChannel_Attributes">org.apache.catalina.tribes.group.GroupChannel Attributes</a></li></ol></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
The cluster channel is the main component of a small framework we've nicknamed Apache Tribes.<br>
|
||||||
|
The channel manages a set of sub components and together they create a group communication framework.<br>
|
||||||
|
This framework is then used internally by the components that need to send messages between different Tomcat instances.
|
||||||
|
<br>
|
||||||
|
A few examples of these components would be the SimpleTcpCluster that does the messaging for the DeltaManager,
|
||||||
|
or the BackupManager that uses a different replication strategy. The ReplicatedContext object does also
|
||||||
|
use the channel object to communicate context attribute changes.
|
||||||
|
</div><h3 id="Nested_Components">Nested Components</h3><div class="text">
|
||||||
|
<p><b><a href="cluster-membership.html">Channel/Membership</a>:</b> <br>
|
||||||
|
The Membership component is responsible for auto discovering new nodes in the cluster
|
||||||
|
and also to provide for notifications for any nodes that have not responded with a heartbeat.
|
||||||
|
The default implementation uses multicast.<br>
|
||||||
|
In the membership component you configure how your nodes, aka. members, are to be discovered and/or
|
||||||
|
divided up.
|
||||||
|
You can always find out more about <a href="../tribes/introduction.html">Apache Tribes</a>
|
||||||
|
</p>
|
||||||
|
<p><b><a href="cluster-sender.html">Channel/Sender</a>:</b> <br>
|
||||||
|
The Sender component manages all outbound connections and data messages that are sent
|
||||||
|
over the network from one node to another.
|
||||||
|
This component allows messages to be sent in parallel.
|
||||||
|
The default implementation uses TCP client sockets, and socket tuning for outgoing messages are
|
||||||
|
configured here.<br>
|
||||||
|
You can always find out more about <a href="../tribes/introduction.html">Apache Tribes</a>
|
||||||
|
</p>
|
||||||
|
<p><b><a href="cluster-sender.html#transport">Channel/Sender/Transport</a>:</b> <br>
|
||||||
|
The Transport component is the bottom IO layer for the sender component.
|
||||||
|
The default implementation uses non-blocking TCP client sockets.<br>
|
||||||
|
You can always find out more about <a href="../tribes/introduction.html">Apache Tribes</a>
|
||||||
|
</p>
|
||||||
|
<p><b><a href="cluster-receiver.html">Channel/Receiver</a>:</b> <br>
|
||||||
|
The receiver component listens for messages from other nodes.
|
||||||
|
Here you will configure the cluster thread pool, as it will dispatch incoming
|
||||||
|
messages to a thread pool for faster processing.
|
||||||
|
The default implementation uses non-blocking TCP server sockets.<br>
|
||||||
|
You can always find out more about <a href="../tribes/introduction.html">Apache Tribes</a>
|
||||||
|
</p>
|
||||||
|
<p><b><a href="cluster-interceptor.html">Channel/Interceptor</a>:</b> <br>
|
||||||
|
The channel will send messages through an interceptor stack. Because of this, you have the ability to
|
||||||
|
customize the way messages are sent and received, and even how membership is handled.<br>
|
||||||
|
You can always find out more about <a href="../tribes/introduction.html">Apache Tribes</a>
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Common_Attributes">Common Attributes</h4><div class="text">
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
|
||||||
|
The default value here is <code>org.apache.catalina.tribes.group.GroupChannel</code> and is
|
||||||
|
currently the only implementation available.
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="org.apache.catalina.tribes.group.GroupChannel_Attributes">org.apache.catalina.tribes.group.GroupChannel Attributes</h4><div class="text">
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">heartbeat</code></td><td>
|
||||||
|
Flag whether the channel manages its own heartbeat.
|
||||||
|
If set to true, the channel start a local thread for the heart beat.
|
||||||
|
If set this flag to false, you must set SimpleTcpCluster#heartbeatBackgroundEnabled
|
||||||
|
to true. default value is true.
|
||||||
|
</td></tr><tr><td><code class="attributeName">heartbeatSleeptime</code></td><td>
|
||||||
|
If heartbeat == true, specifies the interval of heartbeat thread in milliseconds.
|
||||||
|
The default is 5000 (5 seconds).
|
||||||
|
</td></tr><tr><td><code class="attributeName">optionCheck</code></td><td>
|
||||||
|
If set to true, the GroupChannel will check the option flags that each
|
||||||
|
interceptor is using. Reports an error if two interceptor share the same
|
||||||
|
flag. The default is false.
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,107 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The Cluster Deployer object</title><meta name="author" content="Filip Hanik"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/cluster-deployer">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The Cluster Deployer object</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#org.apache.catalina.ha.deploy.FarmWarDeployer">org.apache.catalina.ha.deploy.FarmWarDeployer</a><ol><li><a href="#Attributes">Attributes</a></li></ol></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
<p>The Farm War Deployer can deploy and undeploy web applications on the other
|
||||||
|
nodes in the cluster.</p>
|
||||||
|
<p><strong>Note: </strong>FarmWarDeployer can be configured at host level
|
||||||
|
cluster only.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="org.apache.catalina.ha.deploy.FarmWarDeployer">org.apache.catalina.ha.deploy.FarmWarDeployer</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Attributes">Attributes</h4><div class="text">
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
|
||||||
|
The cluster deployer class, currently only one is available,
|
||||||
|
<code>org.apache.catalina.ha.deploy.FarmWarDeployer.</code>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">deployDir</code></strong></td><td>
|
||||||
|
Deployment directory. This is the pathname of a directory where deploy
|
||||||
|
the web applications. You may specify an absolute pathname, or a
|
||||||
|
pathname that is relative to the $CATALINA_BASE directory. In the
|
||||||
|
current implementation, this attribute must be the same value as the
|
||||||
|
<strong>Host's appBase</strong>.
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">tempDir</code></strong></td><td>
|
||||||
|
The temporaryDirectory to store binary data when downloading a war from
|
||||||
|
the cluster. You may specify an absolute pathname, or a pathname that is
|
||||||
|
relative to the $CATALINA_BASE directory.
|
||||||
|
</td></tr><tr><td><code class="attributeName">watchDir</code></td><td>
|
||||||
|
This is the pathname of a directory where watch for changes(add/modify/remove)
|
||||||
|
of web applications. You may specify an absolute pathname, or a pathname
|
||||||
|
that is relative to the $CATALINA_BASE directory.
|
||||||
|
<strong>Note: </strong> if <strong>watchEnabled</strong> is false, this
|
||||||
|
attribute will have no effect.
|
||||||
|
</td></tr><tr><td><code class="attributeName">watchEnabled</code></td><td>
|
||||||
|
Set to true if you want to watch for changes of web applications.
|
||||||
|
Only when this attribute set to true, you can trigger a deploy/undeploy
|
||||||
|
of web applications. The flag's value defaults to false.
|
||||||
|
</td></tr><tr><td><code class="attributeName">processDeployFrequency</code></td><td>
|
||||||
|
Frequency of the Farm watchDir check. Cluster wide deployment will be
|
||||||
|
done once for the specified amount of backgroundProcess calls (ie, the
|
||||||
|
lower the amount, the most often the checks will occur). The minimum
|
||||||
|
value is 1, and the default value is 2.
|
||||||
|
<strong>Note: </strong> if <strong>watchEnabled</strong> is false, this
|
||||||
|
attribute will have no effect.
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxValidTime</code></td><td>
|
||||||
|
The maximum valid time(in seconds) of FileMessageFactory.
|
||||||
|
FileMessageFactory will be removed immediately after receiving the
|
||||||
|
complete WAR file but when failing to receive a FileMessage which was
|
||||||
|
sent dividing, FileMessageFactory will leak without being removed.
|
||||||
|
FileMessageFactory that is leaking will be automatically removed after
|
||||||
|
maxValidTime. If a negative value specified, FileMessageFactory will
|
||||||
|
never be removed. If the attribute is not provided, a default of 300
|
||||||
|
seconds (5 minutes) is used.
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,291 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The Channel Interceptor object</title><meta name="author" content="Filip Hanik"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/cluster-interceptor">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The Channel Interceptor object</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Available_Interceptors">Available Interceptors</a></li><li><a href="#Static_Membership">Static Membership</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Common_Attributes">Common Attributes</a></li><li><a href="#org.apache.catalina.tribes.group.interceptors.DomainFilterInterceptor_Attributes">org.apache.catalina.tribes.group.interceptors.DomainFilterInterceptor Attributes</a></li><li><a href="#org.apache.catalina.tribes.group.interceptors.FragmentationInterceptor_Attributes">org.apache.catalina.tribes.group.interceptors.FragmentationInterceptor Attributes</a></li><li><a href="#org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor_Attributes">org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor Attributes</a></li><li><a href="#org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor_Attributes">org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor Attributes</a></li><li><a href="#org.apache.catalina.tribes.group.interceptors.TcpFailureDetector_Attributes">org.apache.catalina.tribes.group.interceptors.TcpFailureDetector Attributes</a></li><li><a href="#org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor_Attributes">org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor Attributes</a></li><li><a href="#org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor_Attributes">org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor Attributes</a></li></ol></li><li><a href="#Nested_Components">Nested Components</a><ol><li><a href="#StaticMember_Attributes">StaticMember Attributes</a></li></ol></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
Apache Tribes supports an interceptor architecture to intercept both messages and membership notifications.
|
||||||
|
This architecture allows decoupling of logic and opens the way for some very kewl feature add ons.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Available_Interceptors">Available Interceptors</h3><div class="text">
|
||||||
|
<ul>
|
||||||
|
<li><code>org.apache.catalina.tribes.group.interceptors.TcpFailureDetector</code></li>
|
||||||
|
<li><code>org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor</code></li>
|
||||||
|
<li><code>org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor</code></li>
|
||||||
|
<li><code>org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor</code></li>
|
||||||
|
<li><code>org.apache.catalina.tribes.group.interceptors.NonBlockingCoordinator</code></li>
|
||||||
|
<li><code>org.apache.catalina.tribes.group.interceptors.OrderInterceptor</code></li>
|
||||||
|
<li><code>org.apache.catalina.tribes.group.interceptors.SimpleCoordinator</code></li>
|
||||||
|
<li><code>org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor</code></li>
|
||||||
|
<li><code>org.apache.catalina.tribes.group.interceptors.TwoPhaseCommitInterceptor</code></li>
|
||||||
|
<li><code>org.apache.catalina.tribes.group.interceptors.DomainFilterInterceptor</code></li>
|
||||||
|
<li><code>org.apache.catalina.tribes.group.interceptors.FragmentationInterceptor</code></li>
|
||||||
|
<li><code>org.apache.catalina.tribes.group.interceptors.GzipInterceptor</code></li>
|
||||||
|
<li><code>org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor</code></li>
|
||||||
|
</ul>
|
||||||
|
</div><h3 id="Static_Membership">Static Membership</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
In addition to dynamic discovery, Apache Tribes also supports static membership, with membership verification.
|
||||||
|
To achieve this add the <code>org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor</code>
|
||||||
|
after the <code>org.apache.catalina.tribes.group.interceptors.TcpFailureDetector</code> interceptor.
|
||||||
|
Inside the <code>StaticMembershipInterceptor</code> you can add the static members you wish to have.
|
||||||
|
The <code>TcpFailureDetector</code> will do a health check on the static members,and also monitor them for crashes
|
||||||
|
so they will have the same level of notification mechanism as the members that are automatically discovered.</p>
|
||||||
|
<div class="codeBox"><pre><code> <Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">
|
||||||
|
<LocalMember className="org.apache.catalina.tribes.membership.StaticMember"
|
||||||
|
domain="staging-cluster"
|
||||||
|
uniqueId="{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,1}"/>
|
||||||
|
<Member className="org.apache.catalina.tribes.membership.StaticMember"
|
||||||
|
port="5678"
|
||||||
|
securePort="-1"
|
||||||
|
host="tomcat01.mydomain.com"
|
||||||
|
domain="staging-cluster"
|
||||||
|
uniqueId="{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}"/>
|
||||||
|
</Interceptor></code></pre></div>
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Common_Attributes">Common Attributes</h4><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
|
||||||
|
Required, as there is no default
|
||||||
|
</td></tr><tr><td><code class="attributeName">optionFlag</code></td><td>
|
||||||
|
If you want the interceptor to trigger on certain message depending on the message's option flag,
|
||||||
|
you can setup the interceptors flag here.
|
||||||
|
The default value is <code>0</code>, meaning this interceptor will trigger on all messages.
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="org.apache.catalina.tribes.group.interceptors.DomainFilterInterceptor_Attributes">org.apache.catalina.tribes.group.interceptors.DomainFilterInterceptor Attributes</h4><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">domain</code></strong></td><td>
|
||||||
|
The logical cluster domain that this Interceptor accepts.
|
||||||
|
Two different type of values are possible:<br>
|
||||||
|
1. Regular string values like "staging-domain" or "tomcat-cluster" will be converted into bytes
|
||||||
|
using ISO-8859-1 encoding.<br>
|
||||||
|
2. byte array in string form, for example {216,123,12,3}<br>
|
||||||
|
</td></tr><tr><td><code class="attributeName">logInterval</code></td><td>
|
||||||
|
This value indicates the interval for logging for messages from different domains.
|
||||||
|
The default is 100, which means that to log per 100 messages.
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
<div class="subsection"><h4 id="org.apache.catalina.tribes.group.interceptors.FragmentationInterceptor_Attributes">org.apache.catalina.tribes.group.interceptors.FragmentationInterceptor Attributes</h4><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">expire</code></td><td>
|
||||||
|
How long do we keep the fragments in memory and wait for the rest to arrive.
|
||||||
|
The default is 60000 ms.
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxSize</code></td><td>
|
||||||
|
The maximum message size in bytes. If the message size exceeds this value, this interceptor fragments the message and sends them.
|
||||||
|
If it is less than this value, this interceptor does not fragment the message and sent in as one message. The default is 1024*100.
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
<div class="subsection"><h4 id="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor_Attributes">org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor Attributes</h4><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
|
||||||
|
Required, This dispatcher uses JDK 1.5 java.util.concurrent package
|
||||||
|
</td></tr><tr><td><code class="attributeName">optionFlag</code></td><td>
|
||||||
|
The default and hard coded value is <code>8 (org.apache.catalina.tribes.Channel.SEND_OPTIONS_ASYNCHRONOUS)</code>.
|
||||||
|
The dispatcher will trigger on this value only, as it is predefined by Tribes.
|
||||||
|
The other attributes are inherited from its base class <code>org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor</code>.
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxThreads</code></td><td>
|
||||||
|
The maximum number of threads in this pool, default is 10.
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxSpareThreads</code></td><td>
|
||||||
|
The number of threads to keep in the pool, default is 2.
|
||||||
|
</td></tr><tr><td><code class="attributeName">keepAliveTime</code></td><td>
|
||||||
|
Maximum number of milliseconds of until Idle thread terminates. Default value is 5000(5 seconds).
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
<div class="subsection"><h4 id="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor_Attributes">org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor Attributes</h4><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
|
||||||
|
Required, Same implementation as <code>MessageDispatch15Interceptor</code>, but with JDK 1.4 compliance.
|
||||||
|
</td></tr><tr><td><code class="attributeName">optionFlag</code></td><td>
|
||||||
|
The default and hard coded value is <code>8 (org.apache.catalina.tribes.Channel.SEND_OPTIONS_ASYNCHRONOUS)</code>.
|
||||||
|
The dispatcher will trigger on this value only, as it is predefined by Tribes.
|
||||||
|
</td></tr><tr><td><code class="attributeName">alwaysSend</code></td><td>
|
||||||
|
What behavior should be executed when the dispatch queue is full. If <code>true</code> (default), then the message is
|
||||||
|
is sent synchronously, if <code>false</code> an error is thrown.
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxQueueSize</code></td><td>
|
||||||
|
Size in bytes of the dispatch queue, the default value is <code> 1024*1024*64 (64MB)</code> sets the maximum queue size for the dispatch queue
|
||||||
|
if the queue fills up, one can trigger the behavior, if <code>alwaysSend</code> is set to true, the message will be sent synchronously
|
||||||
|
if the flag is false, an error is thrown
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
<div class="subsection"><h4 id="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector_Attributes">org.apache.catalina.tribes.group.interceptors.TcpFailureDetector Attributes</h4><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">connectTimeout</code></td><td>
|
||||||
|
Specifies the timeout, in milliseconds, to use when attempting a TCP connection
|
||||||
|
to the suspect node. Default is 1000.
|
||||||
|
</td></tr><tr><td><code class="attributeName">performSendTest</code></td><td>
|
||||||
|
If true is set, send a test message to the suspect node. Default is true.
|
||||||
|
</td></tr><tr><td><code class="attributeName">performReadTest</code></td><td>
|
||||||
|
If true is set, read the response of the test message that sent. Default is false.
|
||||||
|
<strong>Note: </strong>if <code>performSendTest</code> is false, this attribute will have no effect.
|
||||||
|
</td></tr><tr><td><code class="attributeName">readTestTimeout</code></td><td>
|
||||||
|
Specifies the timeout, in milliseconds, to use when performing a read test
|
||||||
|
to the suspicious node. Default is 5000.
|
||||||
|
</td></tr><tr><td><code class="attributeName">removeSuspectsTimeout</code></td><td>
|
||||||
|
The maximum time(in seconds) for remove from removeSuspects. Member of
|
||||||
|
removeSuspects will be automatically removed after removeSuspectsTimeout.
|
||||||
|
If a negative value specified, the removeSuspects members never be
|
||||||
|
removed until disappeared really. If the attribute is not provided,
|
||||||
|
a default of 300 seconds (5 minutes) is used.
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
<div class="subsection"><h4 id="org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor_Attributes">org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor Attributes</h4><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">interval</code></td><td>
|
||||||
|
If useThread == true, defines the interval of sending a ping message.
|
||||||
|
default is 1000 ms.
|
||||||
|
</td></tr><tr><td><code class="attributeName">useThread</code></td><td>
|
||||||
|
Flag of whether to start a thread for sending a ping message.
|
||||||
|
If set to true, this interceptor will start a local thread for sending a ping message.
|
||||||
|
if set to false, channel heartbeat will send a ping message.
|
||||||
|
default is false.
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
<div class="subsection"><h4 id="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor_Attributes">org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor Attributes</h4><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">interval</code></td><td>
|
||||||
|
Defines the interval in number of messages when we are to report the throughput statistics.
|
||||||
|
The report is logged to the <code>org.apache.juli.logging.LogFactory.getLog(ThroughputInterceptor.class)</code>
|
||||||
|
logger under the <code>INFO</code> level.
|
||||||
|
Default value is to report every <code>10000</code> messages.
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
</div><h3 id="Nested_Components">Nested Components</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="StaticMember_Attributes">StaticMember Attributes</h4><div class="text">
|
||||||
|
<p><b>LocalMember:</b> <br>
|
||||||
|
Static member that is the local member of the static cluster group.
|
||||||
|
</p>
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
|
||||||
|
Only one implementation available:<code>org.apache.catalina.tribes.membership.StaticMember</code>
|
||||||
|
</td></tr><tr><td><code class="attributeName">port</code></td><td>
|
||||||
|
There is no need to set.
|
||||||
|
The value of this attribute inherits from the cluster receiver setting.
|
||||||
|
</td></tr><tr><td><code class="attributeName">securePort</code></td><td>
|
||||||
|
There is no need to set.
|
||||||
|
The value of this attribute inherits from the cluster receiver setting.
|
||||||
|
</td></tr><tr><td><code class="attributeName">host</code></td><td>
|
||||||
|
There is no need to set.
|
||||||
|
The value of this attribute inherits from the cluster receiver setting.
|
||||||
|
</td></tr><tr><td><code class="attributeName">domain</code></td><td>
|
||||||
|
The logical cluster domain for that this static member listens for cluster messages.
|
||||||
|
Two different type of values are possible:<br>
|
||||||
|
1. Regular string values like "staging-domain" or "tomcat-cluster" will be converted into bytes
|
||||||
|
using ISO-8859-1 encoding.
|
||||||
|
2. byte array in string form, for example {216,123,12,3}<br>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">uniqueId</code></strong></td><td>
|
||||||
|
A universally uniqueId for this static member.
|
||||||
|
The values must be 16 bytes in the following form:<br>
|
||||||
|
1. byte array in string form, for example {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}<br>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
<p><b>Member:</b> <br>
|
||||||
|
Static member that add to the static cluster group.
|
||||||
|
</p>
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
|
||||||
|
Only one implementation available:<code>org.apache.catalina.tribes.membership.StaticMember</code>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">port</code></strong></td><td>
|
||||||
|
The port that this static member listens to for cluster messages
|
||||||
|
</td></tr><tr><td><code class="attributeName">securePort</code></td><td>
|
||||||
|
The secure port this static member listens to for encrypted cluster messages
|
||||||
|
default value is <code>-1</code>, this value means the member is not listening on a secure port
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">host</code></strong></td><td>
|
||||||
|
The host (or network interface) that this static member listens for cluster messages.
|
||||||
|
Three different type of values are possible:<br>
|
||||||
|
1. IP address in the form of "216.123.1.23"<br>
|
||||||
|
2. Hostnames like "tomcat01.mydomain.com" or "tomcat01" as long as they resolve correctly<br>
|
||||||
|
3. byte array in string form, for example {216,123,12,3}<br>
|
||||||
|
</td></tr><tr><td><code class="attributeName">domain</code></td><td>
|
||||||
|
The logical cluster domain for that this static member listens for cluster messages.
|
||||||
|
Two different type of values are possible:<br>
|
||||||
|
1. Regular string values like "staging-domain" or "tomcat-cluster" will be converted into bytes
|
||||||
|
using ISO-8859-1 encoding.<br>
|
||||||
|
2. byte array in string form, for example {216,123,12,3}<br>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">uniqueId</code></strong></td><td>
|
||||||
|
A universally uniqueId for this static member.
|
||||||
|
The values must be 16 bytes in the following form:<br>
|
||||||
|
1. byte array in string form, for example {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}<br>
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,77 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The ClusterListener object</title><meta name="author" content="Filip Hanik"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/cluster-listener">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The ClusterListener object</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#org.apache.catalina.ha.session.ClusterSessionListener">org.apache.catalina.ha.session.ClusterSessionListener</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Common_Attributes">Common Attributes</a></li></ol></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
The <code>org.apache.catalina.ha.ClusterListener</code> base class
|
||||||
|
lets you listen in on messages that are received by the <code>Cluster</code> component.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div><h3 id="org.apache.catalina.ha.session.ClusterSessionListener">org.apache.catalina.ha.session.ClusterSessionListener</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
When using the DeltaManager, the messages are received by the Cluster object and are propagated to the
|
||||||
|
to the manager through this listener.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Common_Attributes">Common Attributes</h4><div class="text">
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
|
||||||
|
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,301 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The ClusterManager object</title><meta name="author" content="Filip Hanik"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/cluster-manager">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The ClusterManager object</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#The_<Manager>">The <Manager></a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Common_Attributes">Common Attributes</a></li><li><a href="#org.apache.catalina.ha.session.DeltaManager_Attributes">org.apache.catalina.ha.session.DeltaManager Attributes</a></li><li><a href="#org.apache.catalina.ha.session.BackupManager_Attributes">org.apache.catalina.ha.session.BackupManager Attributes</a></li></ol></li><li><a href="#Nested_Components">Nested Components</a></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
<p>A cluster manager is an extension to Tomcat's session manager interface,
|
||||||
|
<code>org.apache.catalina.Manager</code>.
|
||||||
|
A cluster manager must implement the
|
||||||
|
<code>org.apache.catalina.ha.ClusterManager</code> and is solely responsible
|
||||||
|
for how the session is replicated.<br>
|
||||||
|
There are currently two different managers, the
|
||||||
|
<code>org.apache.catalina.ha.session.DeltaManager</code> replicates deltas of
|
||||||
|
session data to all members in the cluster. This implementation is proven and
|
||||||
|
works very well, but has a limitation as it requires the cluster members to be
|
||||||
|
homogeneous, all nodes must deploy the same applications and be exact
|
||||||
|
replicas. The <code>org.apache.catalina.ha.session.BackupManager</code> also
|
||||||
|
replicates deltas but only to one backup node. The location of the backup node
|
||||||
|
is known to all nodes in the cluster. It also supports heterogeneous
|
||||||
|
deployments, so the manager knows at what locations the web application is
|
||||||
|
deployed.</p>
|
||||||
|
</div><h3 id="The_<Manager>">The <Manager></h3><div class="text">
|
||||||
|
<p>The <code><Manager></code> element defined inside the
|
||||||
|
<code><Cluster></code> element is the template defined for all web
|
||||||
|
applications that are marked <code><distributable/></code> in their
|
||||||
|
<code>web.xml</code> file. However, you can still override the manager
|
||||||
|
implementation on a per web application basis, by putting the
|
||||||
|
<code><Manager></code> inside the <code><Context></code> element
|
||||||
|
either in the <code><a href="context.html">context.xml</a></code> file or the
|
||||||
|
<code><a href="index.html">server.xml</a></code> file.</p>
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
<div class="subsection"><h4 id="Common_Attributes">Common Attributes</h4><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
|
||||||
|
</td></tr><tr><td><code class="attributeName">name</code></td><td>
|
||||||
|
<b>The name of this cluster manager, the name is used to identify a
|
||||||
|
session manager on a node. The name might get modified by the
|
||||||
|
<code>Cluster</code> element to make it unique in the container.</b>
|
||||||
|
</td></tr><tr><td><code class="attributeName">notifyListenersOnReplication</code></td><td>
|
||||||
|
Set to <code>true</code> if you wish to have session listeners notified
|
||||||
|
when session attributes are being replicated or removed across Tomcat
|
||||||
|
nodes in the cluster.
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxInactiveInterval</code></td><td>
|
||||||
|
<p><strong>Deprecated</strong>: This should be configured via the
|
||||||
|
Context.</p>
|
||||||
|
<p>The initial maximum time interval, in seconds,
|
||||||
|
between client requests before a session is invalidated. A negative value
|
||||||
|
will result in sessions never timing out. If the attribute is not provided,
|
||||||
|
a default of 1800 seconds (30 minutes) is used.</p>
|
||||||
|
|
||||||
|
<p>This attribute provides the initial value whenever a
|
||||||
|
new session is created, but the interval may be dynamically
|
||||||
|
varied by a servlet via the
|
||||||
|
<code>setMaxInactiveInterval</code> method of the <code>HttpSession</code> object.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">sessionIdLength</code></td><td>
|
||||||
|
<p>The length of session ids created by this Manager, measured in bytes,
|
||||||
|
excluding subsequent conversion to a hexadecimal string and
|
||||||
|
excluding any JVM route information used for load balancing.
|
||||||
|
This attribute is deprecated. Set the length on a nested
|
||||||
|
<strong>SessionIdGenerator</strong> element instead.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">processExpiresFrequency</code></td><td>
|
||||||
|
<p>Frequency of the session expiration, and related manager operations.
|
||||||
|
Manager operations will be done once for the specified amount of
|
||||||
|
backgroundProcess calls (i.e., the lower the amount, the more often the
|
||||||
|
checks will occur). The minimum value is 1, and the default value is 6.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">secureRandomClass</code></td><td>
|
||||||
|
<p>Name of the Java class that extends
|
||||||
|
<code>java.security.SecureRandom</code> to use to generate session IDs.
|
||||||
|
If not specified, the default value is
|
||||||
|
<code>java.security.SecureRandom</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">secureRandomProvider</code></td><td>
|
||||||
|
<p>Name of the provider to use to create the
|
||||||
|
<code>java.security.SecureRandom</code> instances that generate session
|
||||||
|
IDs. If an invalid algorithm and/or provider is specified, the Manager
|
||||||
|
will use the platform default provider and the default algorithm. If not
|
||||||
|
specified, the platform default provider will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">secureRandomAlgorithm</code></td><td>
|
||||||
|
<p>Name of the algorithm to use to create the
|
||||||
|
<code>java.security.SecureRandom</code> instances that generate session
|
||||||
|
IDs. If an invalid algorithm and/or provider is specified, the Manager
|
||||||
|
will use the platform default provider and the default algorithm. If not
|
||||||
|
specified, the default algorithm of SHA1PRNG will be used. If the
|
||||||
|
default algorithm is not supported, the platform default will be used.
|
||||||
|
To specify that the platform default should be used, do not set the
|
||||||
|
secureRandomProvider attribute and set this attribute to the empty
|
||||||
|
string.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">recordAllActions</code></td><td>
|
||||||
|
<p>Flag whether send all actions for session across Tomcat cluster
|
||||||
|
nodes. If set to false, if already done something to the same attribute,
|
||||||
|
make sure don't send multiple actions across Tomcat cluster nodes.
|
||||||
|
In that case, sends only the actions that have been added at last.
|
||||||
|
Default is <code>false</code>.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
<div class="subsection"><h4 id="org.apache.catalina.ha.session.DeltaManager_Attributes">org.apache.catalina.ha.session.DeltaManager Attributes</h4><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">expireSessionsOnShutdown</code></td><td>
|
||||||
|
When a web application is being shutdown, Tomcat issues an expire call
|
||||||
|
to each session to notify all the listeners. If you wish for all
|
||||||
|
sessions to expire on all nodes when a shutdown occurs on one node, set
|
||||||
|
this value to <code>true</code>.
|
||||||
|
Default value is <code>false</code>.
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxActiveSessions</code></td><td>
|
||||||
|
The maximum number of active sessions that will be created by this
|
||||||
|
Manager, or -1 (the default) for no limit. For this manager, all
|
||||||
|
sessions are counted as active sessions irrespective if whether or not
|
||||||
|
the current node is the primary node for the session.
|
||||||
|
</td></tr><tr><td><code class="attributeName">notifySessionListenersOnReplication</code></td><td>
|
||||||
|
Set to <code>true</code> if you wish to have session listeners notified
|
||||||
|
when sessions are created and expired across Tomcat nodes in the
|
||||||
|
cluster.
|
||||||
|
</td></tr><tr><td><code class="attributeName">notifyContainerListenersOnReplication</code></td><td>
|
||||||
|
Set to <code>true</code> if you wish to have container listeners notified
|
||||||
|
across Tomcat nodes in the cluster.
|
||||||
|
</td></tr><tr><td><code class="attributeName">stateTransferTimeout</code></td><td>
|
||||||
|
The time in seconds to wait for a session state transfer to complete
|
||||||
|
from another node when a node is starting up.
|
||||||
|
Default value is <code>60</code> seconds.
|
||||||
|
</td></tr><tr><td><code class="attributeName">sendAllSessions</code></td><td>
|
||||||
|
Flag whether send sessions as split blocks.
|
||||||
|
If set to <code>true</code>, send all sessions as one big block.
|
||||||
|
If set to <code>false</code>, send sessions as split blocks.
|
||||||
|
Default value is <code>true</code>.
|
||||||
|
</td></tr><tr><td><code class="attributeName">sendAllSessionsSize</code></td><td>
|
||||||
|
The number of sessions in a session block message. This value is
|
||||||
|
effective only when <code>sendAllSessions</code> is <code>false</code>.
|
||||||
|
Default is <code>1000</code>.
|
||||||
|
</td></tr><tr><td><code class="attributeName">sendAllSessionsWaitTime</code></td><td>
|
||||||
|
Wait time between sending of session block messages. This value is
|
||||||
|
effective only when <code>sendAllSessions</code> is <code>false</code>.
|
||||||
|
Default is <code>2000</code> milliseconds.
|
||||||
|
</td></tr><tr><td><code class="attributeName">sessionAttributeNameFilter</code></td><td>
|
||||||
|
<p>A regular expression used to filter which session attributes will be
|
||||||
|
replicated. An attribute will only be replicated if its name matches
|
||||||
|
this pattern. If the pattern is zero length or <code>null</code>, all
|
||||||
|
attributes are eligible for replication. The pattern is anchored so the
|
||||||
|
session attribute name must fully match the pattern. As an example, the
|
||||||
|
value <code>(userName|sessionHistory)</code> will only replicate the
|
||||||
|
two session attributes named <code>userName</code> and
|
||||||
|
<code>sessionHistory</code>. If not specified, the default value of
|
||||||
|
<code>null</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">sessionAttributeValueClassNameFilter</code></td><td>
|
||||||
|
<p>A regular expression used to filter which session attributes will be
|
||||||
|
replicated. An attribute will only be replicated if the implementation
|
||||||
|
class name of the value matches this pattern. If the pattern is zero
|
||||||
|
length or <code>null</code>, all attributes are eligible for
|
||||||
|
replication. The pattern is anchored so the fully qualified class name
|
||||||
|
must fully match the pattern. If not specified, the default value of
|
||||||
|
<code>null</code> will be used unless a <code>SecurityManager</code> is
|
||||||
|
enabled in which case the default will be
|
||||||
|
<code>java\\.lang\\.(?:Boolean|Integer|Long|Number|String)</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">stateTimestampDrop</code></td><td>
|
||||||
|
When this node sends a <code>GET_ALL_SESSIONS</code> message to other
|
||||||
|
node, all session messages that are received as a response are queued.
|
||||||
|
If this attribute is set to <code>true</code>, the received session
|
||||||
|
messages (except any <code>GET_ALL_SESSIONS</code> sent by other nodes)
|
||||||
|
are filtered by their timestamp. A message is dropped if it is not a
|
||||||
|
<code>GET_ALL_SESSIONS</code> message and its timestamp is earlier than
|
||||||
|
the timestamp of our <code>GET_ALL_SESSIONS</code> message.
|
||||||
|
If set to <code>false</code>, all queued session messages are handled.
|
||||||
|
Default is <code>true</code>.
|
||||||
|
</td></tr><tr><td><code class="attributeName">warnOnSessionAttributeFilterFailure</code></td><td>
|
||||||
|
<p>If <strong>sessionAttributeNameFilter</strong> or
|
||||||
|
<strong>sessionAttributeValueClassNameFilter</strong> blocks an
|
||||||
|
attribute, should this be logged at <code>WARN</code> level? If
|
||||||
|
<code>WARN</code> level logging is disabled then it will be logged at
|
||||||
|
<code>DEBUG</code>. The default value of this attribute is
|
||||||
|
<code>false</code> unless a <code>SecurityManager</code> is enabled in
|
||||||
|
which case the default will be <code>true</code>.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
<div class="subsection"><h4 id="org.apache.catalina.ha.session.BackupManager_Attributes">org.apache.catalina.ha.session.BackupManager Attributes</h4><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">mapSendOptions</code></td><td>
|
||||||
|
The backup manager uses a replicated map, this map is sending and
|
||||||
|
receiving messages. You can setup the flag for how this map is sending
|
||||||
|
messages, the default value is <code>6</code>(synchronous).<br>
|
||||||
|
Note that if you use asynchronous messaging it is possible for update
|
||||||
|
messages for a session to be processed by the receiving node in a
|
||||||
|
different order to the order in which they were sent.
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxActiveSessions</code></td><td>
|
||||||
|
The maximum number of active sessions that will be created by this
|
||||||
|
Manager, or -1 (the default) for no limit. For this manager, only
|
||||||
|
sessions where the current node is the primary node for the session are
|
||||||
|
considered active sessions.
|
||||||
|
</td></tr><tr><td><code class="attributeName">rpcTimeout</code></td><td>
|
||||||
|
Timeout for RPC message used for broadcast and transfer state from
|
||||||
|
another map.
|
||||||
|
Default value is <code>15000</code> milliseconds.
|
||||||
|
</td></tr><tr><td><code class="attributeName">sessionAttributeNameFilter</code></td><td>
|
||||||
|
<p>A regular expression used to filter which session attributes will be
|
||||||
|
replicated. An attribute will only be replicated if its name matches
|
||||||
|
this pattern. If the pattern is zero length or <code>null</code>, all
|
||||||
|
attributes are eligible for replication. The pattern is anchored so the
|
||||||
|
session attribute name must fully match the pattern. As an example, the
|
||||||
|
value <code>(userName|sessionHistory)</code> will only replicate the
|
||||||
|
two session attributes named <code>userName</code> and
|
||||||
|
<code>sessionHistory</code>. If not specified, the default value of
|
||||||
|
<code>null</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">sessionAttributeValueClassNameFilter</code></td><td>
|
||||||
|
<p>A regular expression used to filter which session attributes will be
|
||||||
|
replicated. An attribute will only be replicated if the implementation
|
||||||
|
class name of the value matches this pattern. If the pattern is zero
|
||||||
|
length or <code>null</code>, all attributes are eligible for
|
||||||
|
replication. The pattern is anchored so the fully qualified class name
|
||||||
|
must fully match the pattern. If not specified, the default value of
|
||||||
|
<code>null</code> will be used unless a <code>SecurityManager</code> is
|
||||||
|
enabled in which case the default will be
|
||||||
|
<code>java\\.lang\\.(?:Boolean|Integer|Long|Number|String)</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">terminateOnStartFailure</code></td><td>
|
||||||
|
Set to true if you wish to terminate replication map when replication
|
||||||
|
map fails to start. If replication map is terminated, associated context
|
||||||
|
will fail to start. If you set this attribute to false, replication map
|
||||||
|
does not end. It will try to join the map membership in the heartbeat.
|
||||||
|
Default value is <code>false</code> .
|
||||||
|
</td></tr><tr><td><code class="attributeName">warnOnSessionAttributeFilterFailure</code></td><td>
|
||||||
|
<p>If <strong>sessionAttributeNameFilter</strong> or
|
||||||
|
<strong>sessionAttributeValueClassNameFilter</strong> blocks an
|
||||||
|
attribute, should this be logged at <code>WARN</code> level? If
|
||||||
|
<code>WARN</code> level logging is disabled then it will be logged at
|
||||||
|
<code>DEBUG</code>. The default value of this attribute is
|
||||||
|
<code>false</code> unless a <code>SecurityManager</code> is enabled in
|
||||||
|
which case the default will be <code>true</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">accessTimeout</code></td><td>
|
||||||
|
The timeout for a ping message. If a remote map does not respond within
|
||||||
|
this timeout period, its regarded as disappeared.
|
||||||
|
Default value is <code>5000</code> milliseconds.
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
</div><h3 id="Nested_Components">Nested Components</h3><div class="text">
|
||||||
|
<h3>All Manager Implementations</h3>
|
||||||
|
<p>All Manager implementations allow nesting of a
|
||||||
|
<strong><SessionIdGenerator></strong> element. It defines
|
||||||
|
the behavior of session id generation. All implementations
|
||||||
|
of the <a href="sessionidgenerator.html">SessionIdGenerator</a> allow the
|
||||||
|
following attributes:
|
||||||
|
</p>
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">sessionIdLength</code></td><td>
|
||||||
|
<p>The length of the session ID may be changed with the
|
||||||
|
<strong>sessionIdLength</strong> attribute.
|
||||||
|
</p>
|
||||||
|
</td></tr></table>
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,163 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The Cluster Membership object</title><meta name="author" content="Filip Hanik"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/cluster-membership">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The Cluster Membership object</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Default_Implementation">Default Implementation</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Multicast_Attributes">Multicast Attributes</a></li></ol></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
The membership component in the Apache Tribes <a href="cluster-channel.html">Channel</a> is responsible
|
||||||
|
for dynamic discovery of other members(nodes) in the cluster.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Default_Implementation">Default Implementation</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
The default implementation of the cluster group notification is built on top of multicast heartbeats
|
||||||
|
sent using UDP packets to a multicast IP address.
|
||||||
|
Cluster members are grouped together by using the same multicast address/port combination.
|
||||||
|
Each member sends out a heartbeat with a given interval (<code>frequency</code>), and this
|
||||||
|
heartbeat is used for dynamic discovery.
|
||||||
|
In a similar fashion, if a heartbeat has not been received in a timeframe specified by <code>dropTime</code>
|
||||||
|
ms. a member is considered suspect and the channel and any membership listener will be notified.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Multicast_Attributes">Multicast Attributes</h4><div class="text">
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
|
||||||
|
<p>
|
||||||
|
The default value is <code>org.apache.catalina.tribes.membership.McastService</code>
|
||||||
|
and is currently the only implementation.
|
||||||
|
This implementation uses multicast heartbeats for member discovery.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">address</code></td><td>
|
||||||
|
<p>
|
||||||
|
The multicast address that the membership will broadcast its presence and listen
|
||||||
|
for other heartbeats on. The default value is <code>228.0.0.4</code>
|
||||||
|
Make sure your network is enabled for multicast traffic.<br>
|
||||||
|
The multicast address, in conjunction with the <code>port</code> is what
|
||||||
|
creates a cluster group. To divide up your farm into several different group, or to
|
||||||
|
split up QA from production, change the <code>port</code> or the <code>address</code>
|
||||||
|
<br>Previously known as mcastAddr.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">port</code></td><td>
|
||||||
|
<p>
|
||||||
|
The multicast port, the default value is <code>45564</code><br>
|
||||||
|
The multicast port, in conjunction with the <code>address</code> is what
|
||||||
|
creates a cluster group. To divide up your farm into several different group, or to
|
||||||
|
split up QA from production, change the <code>port</code> or the <code>address</code>
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">frequency</code></td><td>
|
||||||
|
<p>
|
||||||
|
The frequency in milliseconds in which heartbeats are sent out. The default value is <code>500</code> ms.<br>
|
||||||
|
In most cases the default value is sufficient. Changing this value, simply changes the interval in between heartbeats.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">dropTime</code></td><td>
|
||||||
|
<p>
|
||||||
|
The membership component will time out members and notify the Channel if a member fails to send a heartbeat within
|
||||||
|
a give time. The default value is <code>3000</code> ms. This means, that if a heartbeat is not received from a
|
||||||
|
member in that timeframe, the membership component will notify the cluster of this.<br>
|
||||||
|
On a high latency network you may wish to increase this value, to protect against false positives.<br>
|
||||||
|
Apache Tribes also provides a <a href="cluster-interceptor.html#org.apache.catalina.tribes.group.interceptors.TcpFailureDetector_Attributes"><code>TcpFailureDetector</code></a> that will
|
||||||
|
verify a timeout using a TCP connection when a heartbeat timeout has occurred. This protects against false positives.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">bind</code></td><td>
|
||||||
|
<p>
|
||||||
|
Use this attribute if you wish to bind your multicast traffic to a specific network interface.
|
||||||
|
By default, or when this attribute is unset, it tries to bind to <code>0.0.0.0</code> and sometimes on multihomed hosts
|
||||||
|
this becomes a problem.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">ttl</code></td><td>
|
||||||
|
<p>
|
||||||
|
The time-to-live setting for the multicast heartbeats.
|
||||||
|
This setting should be a value between 0 and 255. The default value is VM implementation specific.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">domain</code></td><td>
|
||||||
|
<p>
|
||||||
|
Apache Tribes has the ability to logically group members into domains, by using this domain attribute.
|
||||||
|
The <code>org.apache.catalina.tribes.Member.getDomain()</code> method returns the value specified here.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">soTimeout</code></td><td>
|
||||||
|
<p>
|
||||||
|
The sending and receiving of heartbeats is done on a single thread, hence to avoid blocking this thread forever,
|
||||||
|
you can control the <code>SO_TIMEOUT</code> value on this socket.<br>
|
||||||
|
If a value smaller or equal to 0 is presented, the code will default this value to frequency
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">recoveryEnabled</code></td><td>
|
||||||
|
<p>
|
||||||
|
In case of a network failure, Java multicast socket don't transparently fail over, instead the socket will continuously
|
||||||
|
throw IOException upon each receive request. When recoveryEnabled is set to true, this will close the multicast socket
|
||||||
|
and open a new socket with the same properties as defined above.<br>
|
||||||
|
The default is <code>true</code>. <br>
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">recoveryCounter</code></td><td>
|
||||||
|
<p>
|
||||||
|
When <code>recoveryEnabled==true</code> this value indicates how many
|
||||||
|
times an error has to occur before recovery is attempted. The default is
|
||||||
|
<code>10</code>. <br>
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">recoverySleepTime</code></td><td>
|
||||||
|
<p>
|
||||||
|
When <code>recoveryEnabled==true</code> this value indicates how long time (in milliseconds)
|
||||||
|
the system will sleep in between recovery attempts, until it recovers successfully.
|
||||||
|
The default is <code>5000</code> (5 seconds). <br>
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">localLoopbackDisabled</code></td><td>
|
||||||
|
<p>
|
||||||
|
Membership uses multicast, it will call <code>java.net.MulticastSocket.setLoopbackMode(localLoopbackDisabled)</code>.
|
||||||
|
When <code>localLoopbackDisabled==true</code> multicast messages will not reach other nodes on the same local machine.
|
||||||
|
The default is <code>false</code>. <br>
|
||||||
|
</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,159 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The Cluster Receiver object</title><meta name="author" content="Filip Hanik"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/cluster-receiver">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The Cluster Receiver object</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Blocking_vs_Non-Blocking_Receiver">Blocking vs Non-Blocking Receiver</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Common_Attributes">Common Attributes</a></li><li><a href="#NioReceiver">NioReceiver</a></li><li><a href="#BioReceiver">BioReceiver</a></li></ol></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
The receiver component is responsible for receiving cluster messages.
|
||||||
|
As you might notice through the configuration, is that the receiving of messages
|
||||||
|
and sending of messages are two different components, this is different from many other
|
||||||
|
frameworks, but there is a good reason for it, to decouple the logic for how messages are sent from
|
||||||
|
how messages are received.<br>
|
||||||
|
The receiver is very much like the Tomcat Connector, its the base of the thread pool
|
||||||
|
for incoming cluster messages. The receiver is straight forward, but all the socket settings
|
||||||
|
for incoming traffic are managed here.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Blocking_vs_Non-Blocking_Receiver">Blocking vs Non-Blocking Receiver</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
The receiver supports both a non blocking, <code>org.apache.catalina.tribes.transport.nio.NioReceiver</code>, and a
|
||||||
|
blocking, <code>org.apache.catalina.tribes.transport.bio.BioReceiver</code>. It is preferred to use the non blocking receiver
|
||||||
|
to be able to grow your cluster without running into thread starvation.<br>
|
||||||
|
Using the non blocking receiver allows you to with a very limited thread count to serve a large number of messages.
|
||||||
|
Usually the rule is to use 1 thread per node in the cluster for small clusters, and then depending on your message frequency
|
||||||
|
and your hardware, you'll find an optimal number of threads peak out at a certain number.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
<div class="subsection"><h4 id="Common_Attributes">Common Attributes</h4><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
|
||||||
|
The implementation of the receiver component. Two implementations available,
|
||||||
|
<code>org.apache.catalina.tribes.transport.nio.NioReceiver</code> and
|
||||||
|
<code>org.apache.catalina.tribes.transport.bio.BioReceiver</code>.<br>
|
||||||
|
The <code>org.apache.catalina.tribes.transport.nio.NioReceiver</code> is the
|
||||||
|
preferred implementation
|
||||||
|
</td></tr><tr><td><code class="attributeName">address</code></td><td>
|
||||||
|
The address (network interface) to listen for incoming traffic.
|
||||||
|
Same as the bind address. The default value is <code>auto</code> and translates to
|
||||||
|
<code>java.net.InetAddress.getLocalHost().getHostAddress()</code>.
|
||||||
|
</td></tr><tr><td><code class="attributeName">direct</code></td><td>
|
||||||
|
Possible values are <code>true</code> or <code>false</code>.
|
||||||
|
Set to true if you want the receiver to use direct bytebuffers when reading data
|
||||||
|
from the sockets.
|
||||||
|
</td></tr><tr><td><code class="attributeName">port</code></td><td>
|
||||||
|
The listen port for incoming data. The default value is <code>4000</code>.
|
||||||
|
To avoid port conflicts the receiver will automatically bind to a free port within the range of
|
||||||
|
<code> port <= bindPort < port+autoBind</code>
|
||||||
|
So for example, if port is 4000, and autoBind is set to 10, then the receiver will open up
|
||||||
|
a server socket on the first available port in the range 4000-4009.
|
||||||
|
</td></tr><tr><td><code class="attributeName">autoBind</code></td><td>
|
||||||
|
Default value is <code>100</code>.
|
||||||
|
Use this value if you wish to automatically avoid port conflicts the cluster receiver will try to open a
|
||||||
|
server socket on the <code>port</code> attribute port, and then work up <code>autoBind</code> number of times.
|
||||||
|
</td></tr><tr><td><code class="attributeName">securePort</code></td><td>
|
||||||
|
The secure listen port. This port is SSL enabled. If this attribute is omitted no SSL port is opened up.
|
||||||
|
There default value is unset, meaning there is no SSL socket available.
|
||||||
|
</td></tr><tr><td><code class="attributeName">udpPort</code></td><td>
|
||||||
|
The UDP listen port. If this attribute is omitted no UDP port is opened up.
|
||||||
|
There default value is unset, meaning there is no UDP listener available.
|
||||||
|
</td></tr><tr><td><code class="attributeName">selectorTimeout</code></td><td>
|
||||||
|
The value in milliseconds for the polling timeout in the <code>NioReceiver</code>. On older versions of the JDK
|
||||||
|
there have been bugs, that should all now be cleared out where the selector never woke up.
|
||||||
|
The default value is a very high <code>5000</code> milliseconds.
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxThreads</code></td><td>
|
||||||
|
The maximum number of threads in the receiver thread pool. The default value is <code>6</code>
|
||||||
|
Adjust this value relative to the number of nodes in the cluster, the number of messages being exchanged and
|
||||||
|
the hardware you are running on. A higher value doesn't mean more efficiency, tune this value according to your
|
||||||
|
own test results.
|
||||||
|
</td></tr><tr><td><code class="attributeName">minThreads</code></td><td>
|
||||||
|
Minimum number of threads to be created when the receiver is started up. Default value is <code>6</code>
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxIdleTime</code></td><td>
|
||||||
|
Maximum number of milliseconds of until Idle thread terminates. Default value is <code>60000</code> milliseconds.
|
||||||
|
</td></tr><tr><td><code class="attributeName">ooBInline</code></td><td>
|
||||||
|
Boolean value for the socket OOBINLINE option. Possible values are <code>true</code> or <code>false</code>.
|
||||||
|
</td></tr><tr><td><code class="attributeName">rxBufSize</code></td><td>
|
||||||
|
The receiver buffer size on the receiving sockets. Value is in bytes, the default value is <code>43800</code> bytes.
|
||||||
|
</td></tr><tr><td><code class="attributeName">txBufSize</code></td><td>
|
||||||
|
The sending buffer size on the receiving sockets. Value is in bytes, the default value is <code>25188</code> bytes.
|
||||||
|
</td></tr><tr><td><code class="attributeName">udpRxBufSize</code></td><td>
|
||||||
|
The receive buffer size on the datagram socket.
|
||||||
|
Default value is <code>25188</code> bytes.
|
||||||
|
</td></tr><tr><td><code class="attributeName">udpTxBufSize</code></td><td>
|
||||||
|
The send buffer size on the datagram socket.
|
||||||
|
Default value is <code>43800</code> bytes.
|
||||||
|
</td></tr><tr><td><code class="attributeName">soKeepAlive</code></td><td>
|
||||||
|
Boolean value for the socket SO_KEEPALIVE option. Possible values are <code>true</code> or <code>false</code>.
|
||||||
|
</td></tr><tr><td><code class="attributeName">soLingerOn</code></td><td>
|
||||||
|
Boolean value to determine whether to use the SO_LINGER socket option.
|
||||||
|
Possible values are <code>true</code> or <code>false</code>. Default value is <code>true</code>.
|
||||||
|
</td></tr><tr><td><code class="attributeName">soLingerTime</code></td><td>
|
||||||
|
Sets the SO_LINGER socket option time value. The value is in seconds.
|
||||||
|
The default value is <code>3</code> seconds.
|
||||||
|
</td></tr><tr><td><code class="attributeName">soReuseAddress</code></td><td>
|
||||||
|
Boolean value for the socket SO_REUSEADDR option. Possible values are <code>true</code> or <code>false</code>.
|
||||||
|
</td></tr><tr><td><code class="attributeName">tcpNoDelay</code></td><td>
|
||||||
|
Boolean value for the socket TCP_NODELAY option. Possible values are <code>true</code> or <code>false</code>.
|
||||||
|
The default value is <code>true</code>
|
||||||
|
</td></tr><tr><td><code class="attributeName">timeout</code></td><td>
|
||||||
|
Sets the SO_TIMEOUT option on the socket. The value is in milliseconds and the default value is <code>3000</code>
|
||||||
|
milliseconds.
|
||||||
|
</td></tr><tr><td><code class="attributeName">useBufferPool</code></td><td>
|
||||||
|
Boolean value whether to use a shared buffer pool of cached <code>org.apache.catalina.tribes.io.XByteBuffer</code>
|
||||||
|
objects. If set to true, the XByteBuffer that is used to pass a message up the channel, will be recycled at the end
|
||||||
|
of the requests. This means that interceptors in the channel must not maintain a reference to the object
|
||||||
|
after the <code>org.apache.catalina.tribes.ChannelInterceptor#messageReceived</code> method has exited.
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
<div class="subsection"><h4 id="NioReceiver">NioReceiver</h4><div class="text">
|
||||||
|
</div></div>
|
||||||
|
<div class="subsection"><h4 id="BioReceiver">BioReceiver</h4><div class="text">
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,175 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The Cluster Sender object</title><meta name="author" content="Filip Hanik"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/cluster-sender">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The Cluster Sender object</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Concurrent_Parallel_Delivery">Concurrent Parallel Delivery</a></li><li><a href="#Nested_Elements">Nested Elements</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Common_Sender_Attributes">Common Sender Attributes</a></li><li><a href="#Common_Transport_Attributes">Common Transport Attributes</a></li><li><a href="#Common_PooledSender_Attributes">Common PooledSender Attributes</a></li></ol></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
The channel sender component is responsible for delivering outgoing cluster messages over the network.
|
||||||
|
In the default implementation, <code>org.apache.catalina.tribes.transport.ReplicationTransmitter</code>,
|
||||||
|
the sender is a fairly empty shell with not much logic around a fairly complex <code><Transport></code>
|
||||||
|
component the implements the actual delivery mechanism.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Concurrent_Parallel_Delivery">Concurrent Parallel Delivery</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
In the default <code>transport</code> implementation, <code>org.apache.catalina.tribes.transport.nio.PooledParallelSender</code>,
|
||||||
|
Apache Tribes implements what we like to call "Concurrent Parallel Delivery".
|
||||||
|
This means that we can send a message to more than one destination at the same time(parallel), and
|
||||||
|
deliver two messages to the same destination at the same time(concurrent). Combine these two and we have
|
||||||
|
"Concurrent Parallel Delivery".
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
When is this useful? The simplest example we can think of is when part of your code is sending a 10MB message,
|
||||||
|
like a war file being deployed, and you need to push through a small 10KB message, say a session being replicated,
|
||||||
|
you don't have to wait for the 10MB message to finish, as a separate thread will push in the small message
|
||||||
|
transmission at the same time. Currently there is no interrupt, pause or priority mechanism available, but check back soon.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Nested_Elements">Nested Elements</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
The nested element <code><Transport></code> is not required, but encouraged, as this is where
|
||||||
|
you would set all the socket options for the outgoing messages. Please see its attributes below.
|
||||||
|
There are two implementations, in a similar manner to the <a href="cluster-receiver.html">receiver</a>, one is non-blocking
|
||||||
|
based and the other is built using blocking IO. <br>
|
||||||
|
<code>org.apache.catalina.tribes.transport.bio.PooledMultiSender</code> is the blocking implementation and
|
||||||
|
<code>org.apache.catalina.tribes.transport.nio.PooledParallelSender</code>.
|
||||||
|
Parallel delivery is not available for the blocking implementation due to the fact that it is blocking a thread on sending data.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
<div class="subsection"><h4 id="Common_Sender_Attributes">Common Sender Attributes</h4><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
|
||||||
|
Required, only available implementation is <code>org.apache.catalina.tribes.transport.ReplicationTransmitter</code>
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
<div class="subsection"><h4 id="Common_Transport_Attributes">Common Transport Attributes</h4><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
|
||||||
|
Required, an implementation of the <code>org.apache.catalina.tribes.transport.MultiPointSender</code>.<br>
|
||||||
|
Non-blocking implementation is <code>org.apache.catalina.tribes.transport.nio.PooledParallelSender</code><br>
|
||||||
|
Blocking implementation is <code>org.apache.catalina.tribes.transport.bio.PooledMultiSender</code>
|
||||||
|
</td></tr><tr><td><code class="attributeName">rxBufSize</code></td><td>
|
||||||
|
The receive buffer size on the socket.
|
||||||
|
Default value is <code>25188</code> bytes.
|
||||||
|
</td></tr><tr><td><code class="attributeName">txBufSize</code></td><td>
|
||||||
|
The send buffer size on the socket.
|
||||||
|
Default value is <code>43800</code> bytes.
|
||||||
|
</td></tr><tr><td><code class="attributeName">udpRxBufSize</code></td><td>
|
||||||
|
The receive buffer size on the datagram socket.
|
||||||
|
Default value is <code>25188</code> bytes.
|
||||||
|
</td></tr><tr><td><code class="attributeName">udpTxBufSize</code></td><td>
|
||||||
|
The send buffer size on the datagram socket.
|
||||||
|
Default value is <code>43800</code> bytes.
|
||||||
|
</td></tr><tr><td><code class="attributeName">directBuffer</code></td><td>
|
||||||
|
Possible values are <code>true</code> or <code>false</code>.
|
||||||
|
Set to true if you want the receiver to use direct bytebuffers when writing data
|
||||||
|
to the sockets. Default value is <code>false</code>
|
||||||
|
</td></tr><tr><td><code class="attributeName">keepAliveCount</code></td><td>
|
||||||
|
The number of requests that can go through the socket before the socket is closed, and reopened
|
||||||
|
for the next request. The default value is <code>-1</code>, which is unlimited.
|
||||||
|
</td></tr><tr><td><code class="attributeName">keepAliveTime</code></td><td>
|
||||||
|
The number of milliseconds a connection is kept open after its been opened.
|
||||||
|
The default value is <code>-1</code>, which is unlimited.
|
||||||
|
</td></tr><tr><td><code class="attributeName">timeout</code></td><td>
|
||||||
|
Sets the SO_TIMEOUT option on the socket. The value is in milliseconds and the default value is <code>3000</code>
|
||||||
|
milliseconds.(3 seconds) This timeout starts when a message send attempt is starting, until the transfer has been completed.
|
||||||
|
For the NIO sockets, this will mean, that the caller can guarantee that we will not attempt sending the message
|
||||||
|
longer than this timeout value. For the blocking IO implementation, this translated directly to the soTimeout.<br>
|
||||||
|
A timeout will not spawn a retry attempt, in order to guarantee the return of the application thread.
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxRetryAttempts</code></td><td>
|
||||||
|
How many times do we retry a failed message, that received a IOException at the socket level.
|
||||||
|
The default value is <code>1</code>, meaning we will retry a message that has failed once.
|
||||||
|
In other words, we will attempt a message send no more than twice. One is the original send, and one is the
|
||||||
|
<code>maxRetryAttempts</code>.
|
||||||
|
</td></tr><tr><td><code class="attributeName">ooBInline</code></td><td>
|
||||||
|
Boolean value for the socket OOBINLINE option. Possible values are <code>true</code> or <code>false</code>.
|
||||||
|
</td></tr><tr><td><code class="attributeName">soKeepAlive</code></td><td>
|
||||||
|
Boolean value for the socket SO_KEEPALIVE option. Possible values are <code>true</code> or <code>false</code>.
|
||||||
|
</td></tr><tr><td><code class="attributeName">soLingerOn</code></td><td>
|
||||||
|
Boolean value to determine whether to use the SO_LINGER socket option.
|
||||||
|
Possible values are <code>true</code> or <code>false</code>. Default value is <code>true</code>.
|
||||||
|
</td></tr><tr><td><code class="attributeName">soLingerTime</code></td><td>
|
||||||
|
Sets the SO_LINGER socket option time value. The value is in seconds.
|
||||||
|
The default value is <code>3</code> seconds.
|
||||||
|
</td></tr><tr><td><code class="attributeName">soReuseAddress</code></td><td>
|
||||||
|
Boolean value for the socket SO_REUSEADDR option. Possible values are <code>true</code> or <code>false</code>.
|
||||||
|
</td></tr><tr><td><code class="attributeName">soTrafficClass</code></td><td>
|
||||||
|
Sets the traffic class level for the socket, the value is between 0 and 255.
|
||||||
|
Default value is <code>int soTrafficClass = 0x04 | 0x08 | 0x010;</code>
|
||||||
|
Different values are defined in <a href="http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html#setTrafficClass(int)">
|
||||||
|
java.net.Socket#setTrafficClass(int)</a>.
|
||||||
|
</td></tr><tr><td><code class="attributeName">tcpNoDelay</code></td><td>
|
||||||
|
Boolean value for the socket TCP_NODELAY option. Possible values are <code>true</code> or <code>false</code>.
|
||||||
|
The default value is <code>true</code>
|
||||||
|
</td></tr><tr><td><code class="attributeName">throwOnFailedAck</code></td><td>
|
||||||
|
Boolean value, default value is <code>true</code>.
|
||||||
|
If set to true, the sender will throw a <code>org.apache.catalina.tribes.RemoteProcessException</code>
|
||||||
|
when we receive a negative ack from the remote member.
|
||||||
|
Set to false, and Tribes will treat a positive ack the same way as a negative ack, that the message was received.
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
<div class="subsection"><h4 id="Common_PooledSender_Attributes">Common PooledSender Attributes</h4><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">poolSize</code></td><td>
|
||||||
|
The maximum number of concurrent connections from A to B.
|
||||||
|
The value is based on a per-destination count.
|
||||||
|
The default value is <code>25</code>
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxWait</code></td><td>
|
||||||
|
The maximum number of milliseconds that the senderPool will wait when
|
||||||
|
there are no available senders. The default value is <code>3000</code>
|
||||||
|
milliseconds.(3 seconds).
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,168 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The Cluster Valve object</title><meta name="author" content="Filip Hanik"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/cluster-valve">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The Cluster Valve object</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#org.apache.catalina.ha.tcp.ReplicationValve">org.apache.catalina.ha.tcp.ReplicationValve</a><ol><li><a href="#org.apache.catalina.ha.tcp.ReplicationValve/Attributes">Attributes</a></li></ol></li><li><a href="#org.apache.catalina.ha.session.JvmRouteBinderValve">org.apache.catalina.ha.session.JvmRouteBinderValve</a><ol><li><a href="#org.apache.catalina.ha.session.JvmRouteBinderValve/Attributes">Attributes</a></li></ol></li><li><a href="#org.apache.catalina.ha.authenticator.ClusterSingleSignOn">org.apache.catalina.ha.authenticator.ClusterSingleSignOn</a><ol><li><a href="#org.apache.catalina.ha.authenticator.ClusterSingleSignOn/Attributes">Attributes</a></li></ol></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
A cluster valve is no different from any other <a href="valve.html">Tomcat <code>Valve</code></a>.
|
||||||
|
The cluster valves are interceptors in the invocation chain for HTTP requests, and the clustering implementation
|
||||||
|
uses these valves to make intelligent decision around data and when data should be replicated.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
A cluster valve must implement the <code>org.apache.catalina.ha.ClusterValve</code> interface.
|
||||||
|
This is a simple interface that extends the <code>org.apache.catalina.Valve</code> interface.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="org.apache.catalina.ha.tcp.ReplicationValve">org.apache.catalina.ha.tcp.ReplicationValve</h3><div class="text">
|
||||||
|
The <code>ReplicationValve</code> will notify the cluster at the end of a HTTP request
|
||||||
|
so that the cluster can make a decision whether there is data to be replicated or not.
|
||||||
|
<div class="subsection"><h4 id="org.apache.catalina.ha.tcp.ReplicationValve/Attributes">Attributes</h4><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
|
||||||
|
Set value to <code>org.apache.catalina.ha.tcp.ReplicationValve</code>
|
||||||
|
</td></tr><tr><td><code class="attributeName">filter</code></td><td>
|
||||||
|
For known file extensions or urls, you can use this Valve to notify the
|
||||||
|
cluster that the session has not been modified during this request and
|
||||||
|
the cluster doesn't have to probe the session managers for changes. If
|
||||||
|
the request matches this filter pattern, the cluster assumes there has
|
||||||
|
been no session change. An example filter would look like <code>
|
||||||
|
filter=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"
|
||||||
|
</code>. The filter is a regular expression using
|
||||||
|
<code>java.util.regex</code>.
|
||||||
|
</td></tr><tr><td><code class="attributeName">primaryIndicator</code></td><td>
|
||||||
|
Boolean value, so to true, and the replication valve will insert a request attribute with the name
|
||||||
|
defined by the <code>primaryIndicatorName</code> attribute.
|
||||||
|
The value inserted into the request attribute is either <code>Boolean.TRUE</code> or
|
||||||
|
<code>Boolean.FALSE</code>
|
||||||
|
</td></tr><tr><td><code class="attributeName">primaryIndicatorName</code></td><td>
|
||||||
|
Default value is <code>org.apache.catalina.ha.tcp.isPrimarySession</code>
|
||||||
|
The value defined here is the name of the request attribute that contains the boolean value
|
||||||
|
if the session is primary on this server or not.
|
||||||
|
</td></tr><tr><td><code class="attributeName">statistics</code></td><td>
|
||||||
|
Boolean value. Set to <code>true</code> if you want the valve to collect request statistics.
|
||||||
|
Default value is <code>false</code>
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
</div><h3 id="org.apache.catalina.ha.session.JvmRouteBinderValve">org.apache.catalina.ha.session.JvmRouteBinderValve</h3><div class="text">
|
||||||
|
In case of a mod_jk failover, the <code>JvmRouteBinderValve</code> will replace the
|
||||||
|
<code>jvmWorker</code> attribute in the session Id, to make future requests stick to this
|
||||||
|
node. If you want fallback capability, don't enable this valve, but if you want your failover to stick,
|
||||||
|
and for mod_jk not to have to keep probing the node that went down, you use this valve.
|
||||||
|
<div class="subsection"><h4 id="org.apache.catalina.ha.session.JvmRouteBinderValve/Attributes">Attributes</h4><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
|
||||||
|
<code>org.apache.catalina.ha.session.JvmRouteBinderValve</code>
|
||||||
|
</td></tr><tr><td><code class="attributeName">enabled</code></td><td>
|
||||||
|
Default value is <code>true</code>
|
||||||
|
Runtime attribute to turn on and off turn over of the session's jvmRoute value.
|
||||||
|
</td></tr><tr><td><code class="attributeName">sessionIdAttribute</code></td><td>
|
||||||
|
Old sessionid before failover is registered in request attributes with this attribute.
|
||||||
|
Default attribute name is <code>org.apache.catalina.ha.session.JvmRouteOrignalSessionID</code>.
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
</div><h3 id="org.apache.catalina.ha.authenticator.ClusterSingleSignOn">org.apache.catalina.ha.authenticator.ClusterSingleSignOn</h3><div class="text">
|
||||||
|
The <code>ClusterSingleSignOn</code> supports feature of single sign on in cluster.
|
||||||
|
By using <code>ClusterSingleSignOn</code>, the security identity authenticated
|
||||||
|
by one web application is recognized by other web applications on the same virtual host,
|
||||||
|
and it is propagated to other nodes in the cluster.
|
||||||
|
|
||||||
|
<p>See the <a href="host.html#Single_Sign_On">Single Sign On</a> special
|
||||||
|
feature on the <strong>Host</strong> element for more information.</p>
|
||||||
|
|
||||||
|
<p><strong>Note: </strong>ClusterSingleSignOn can be configured at host level cluster only.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="org.apache.catalina.ha.authenticator.ClusterSingleSignOn/Attributes">Attributes</h4><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
|
||||||
|
<p>Java class name of the implementation to use. This MUST be set to
|
||||||
|
<strong>org.apache.catalina.ha.authenticator.ClusterSingleSignOn</strong>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">cookieDomain</code></td><td>
|
||||||
|
<p>Sets the host domain to be used for sso cookies.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">mapSendOptions</code></td><td>
|
||||||
|
<p>The Valve uses a replicated map. You can setup the flag for how this
|
||||||
|
map sends messages. The default value is <code>6</code> (synchronous).
|
||||||
|
Note that if you use asynchronous messaging it is possible for update
|
||||||
|
messages to be processed by the receiving node in a different order to
|
||||||
|
the order in which they were sent.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">requireReauthentication</code></td><td>
|
||||||
|
<p>Default false. Flag to determine whether each request needs to be
|
||||||
|
reauthenticated to the security <strong>Realm</strong>. If "true", this
|
||||||
|
Valve uses cached security credentials (username and password) to
|
||||||
|
reauthenticate to the <strong>Realm</strong> each request associated
|
||||||
|
with an SSO session. If "false", the Valve can itself authenticate
|
||||||
|
requests based on the presence of a valid SSO cookie, without
|
||||||
|
rechecking with the <strong>Realm</strong>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">rpcTimeout</code></td><td>
|
||||||
|
<p>The Valve uses a replicated map. This is the timeout for messages
|
||||||
|
that transfer state to/from the other nodes in the cluster. If not
|
||||||
|
specified, a default value of <code>15000</code> milliseconds is used.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">terminateOnStartFailure</code></td><td>
|
||||||
|
<p>Set to <code>true</code> if you wish this Valve to fail if the
|
||||||
|
underlying replication fails to start. If the Valve fails, then the
|
||||||
|
associated container will fail to start. If you set this attribute to
|
||||||
|
false, and the underlying replications fails to start, the Valve will
|
||||||
|
start and it will attempt to join the cluster and start replication as
|
||||||
|
part of the heartbeat process. If not specified, the default value of
|
||||||
|
<code>false</code> is used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">accessTimeout</code></td><td>
|
||||||
|
The timeout for a ping message. If a remote map does not respond within
|
||||||
|
this timeout period, its regarded as disappeared.
|
||||||
|
Default value is <code>5000</code> milliseconds.
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,176 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The Cluster object</title><meta name="author" content="Filip Hanik"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/cluster">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The Cluster object</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Security">Security</a></li><li><a href="#Engine_vs_Host_placement">Engine vs Host placement</a></li><li><a href="#Context_Attribute_Replication">Context Attribute Replication</a></li><li><a href="#Nested_Components">Nested Components</a></li><li><a href="#Deprecated_configuration_options">Deprecated configuration options</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#SimpleTcpCluster_Attributes">SimpleTcpCluster Attributes</a></li></ol></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
The tomcat cluster implementation provides session replication, context attribute replication and
|
||||||
|
cluster wide WAR file deployment.
|
||||||
|
While the <code>Cluster</code> configuration is fairly complex, the default configuration will work
|
||||||
|
for most people out of the box. </p><p>
|
||||||
|
The Tomcat Cluster implementation is very extensible, and hence we have exposed a myriad of options,
|
||||||
|
making the configuration seem like a lot, but don't lose faith, instead you have a tremendous control
|
||||||
|
over what is going on.</p>
|
||||||
|
</div><h3 id="Security">Security</h3><div class="text">
|
||||||
|
|
||||||
|
<p>The cluster implementation is written on the basis that a secure, trusted
|
||||||
|
network is used for all of the cluster related network traffic. It is not safe
|
||||||
|
to run a cluster on a insecure, untrusted network.</p>
|
||||||
|
|
||||||
|
<p>There are many options for providing a secure, trusted network for use by a
|
||||||
|
Tomcat cluster. These include:</p>
|
||||||
|
<ul>
|
||||||
|
<li>private LAN</li>
|
||||||
|
<li>a Virtual Private Network (VPN)</li>
|
||||||
|
<li>IPSEC</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Engine_vs_Host_placement">Engine vs Host placement</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
You can place the <code><Cluster></code> element inside either the <code><Engine></code>
|
||||||
|
container or the <code><Host></code> container.<br>
|
||||||
|
Placing it in the engine, means that you will support clustering in all virtual hosts of Tomcat,
|
||||||
|
and share the messaging component. When you place the <code><Cluster></code> inside the <code><Engine></code>
|
||||||
|
element, the cluster will append the host name of each session manager to the managers name so that two contexts with
|
||||||
|
the same name but sitting inside two different hosts will be distinguishable.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Context_Attribute_Replication">Context Attribute Replication</h3><div class="text">
|
||||||
|
<p>To configure context attribute replication, simply do this by swapping out the context implementation
|
||||||
|
used for your application context.</p>
|
||||||
|
<div class="codeBox"><pre><code><Context className="org.apache.catalina.ha.context.ReplicatedContext"/></code></pre></div>
|
||||||
|
<p>
|
||||||
|
This context extends the Tomcat <code><a href="context.html">StandardContext</a></code>
|
||||||
|
so all the options from the <a href="context.html">base implementation</a> are valid.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Nested_Components">Nested Components</h3><div class="text">
|
||||||
|
<p><b><a href="cluster-manager.html">Manager</a>:</b> <br>
|
||||||
|
The session manager element identifies what kind of session manager is used in this cluster implementation.
|
||||||
|
This manager configuration is identical to the one you would use in a regular <code><a href="context.html#Nested_Components"><Context></a></code> configuration.
|
||||||
|
<br>The default value is the <code>org.apache.catalina.ha.session.DeltaManager</code> that is closely coupled with
|
||||||
|
the <code>SimpleTcpCluster</code> implementation. Other managers like the <code>org.apache.catalina.ha.session.BackupManager</code>
|
||||||
|
are/could be loosely coupled and don't rely on the <code>SimpleTcpCluster</code> for its data replication.
|
||||||
|
</p>
|
||||||
|
<p><b><a href="cluster-channel.html">Channel</a>:</b> <br>
|
||||||
|
The Channel and its sub components are all part of the IO layer
|
||||||
|
for the cluster group, and is a module in it's own that we have nick named "Tribes"
|
||||||
|
<br>
|
||||||
|
Any configuring and tuning of the network layer, the messaging and the membership logic
|
||||||
|
will be done in the channel and its nested components.
|
||||||
|
You can always find out more about <a href="../tribes/introduction.html">Apache Tribes</a>
|
||||||
|
</p>
|
||||||
|
<p><b><a href="cluster-valve.html">Valve</a>:</b> <br>
|
||||||
|
The Tomcat Cluster implementation uses <code>Tomcat <a href="valve.html">Valves</a></code> to
|
||||||
|
track when requests enter and exit the servlet container. It uses these valves to be able to make
|
||||||
|
intelligent decisions on when to replicate data, which is always at the end of a request.
|
||||||
|
</p>
|
||||||
|
<p><b><a href="cluster-deployer.html">Deployer</a>:</b> <br>
|
||||||
|
The Deployer component is the Tomcat Farm Deployer. It allows you to deploy and undeploy applications
|
||||||
|
cluster wide.
|
||||||
|
</p>
|
||||||
|
<p><b><a href="cluster-listener.html">ClusterListener</a>:</b> <br>
|
||||||
|
ClusterListener's are used to track messages sent and received using the <code>SimpleTcpCluster</code>.
|
||||||
|
If you wish to track messages, you can add a listener here, or you can add a valve to the channel object.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Deprecated_configuration_options">Deprecated configuration options</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
<b>Deprecated settings:</b> In the previous version of Tomcat you were able to control session
|
||||||
|
manager settings using manager.<property>=value.
|
||||||
|
This has been discontinued, as the way it was written interferes with
|
||||||
|
the ability to support multiple different manager classes under one cluster implementation,
|
||||||
|
as the same properties might have the different effect on different managers.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
<div class="subsection"><h4 id="SimpleTcpCluster_Attributes">SimpleTcpCluster Attributes</h4><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
|
||||||
|
<p>The main cluster class, currently only one is available,
|
||||||
|
<code>org.apache.catalina.ha.tcp.SimpleTcpCluster</code>
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">channelSendOptions</code></strong></td><td>
|
||||||
|
<p>The Tribes channel send options, default is <code>8</code>.<br>
|
||||||
|
This option is used to set the flag that all messages sent through the
|
||||||
|
SimpleTcpCluster uses. The flag decides how the messages are sent, and is a simple logical OR.</p>
|
||||||
|
|
||||||
|
<div class="codeBox"><pre><code>int options = Channel.SEND_OPTIONS_ASYNCHRONOUS |
|
||||||
|
Channel.SEND_OPTIONS_SYNCHRONIZED_ACK |
|
||||||
|
Channel.SEND_OPTIONS_USE_ACK;</code></pre></div>
|
||||||
|
<p>Some of the values are:<br>
|
||||||
|
<code>Channel.SEND_OPTIONS_SYNCHRONIZED_ACK = 0x0004</code><br>
|
||||||
|
<code>Channel.SEND_OPTIONS_ASYNCHRONOUS = 0x0008</code><br>
|
||||||
|
<code>Channel.SEND_OPTIONS_USE_ACK = 0x0002</code><br>
|
||||||
|
So to use ACK and ASYNC messaging, the flag would be <code>10</code> (8+2)
|
||||||
|
<br>
|
||||||
|
Note that if you use ASYNC messaging it is possible for update messages
|
||||||
|
for a session to be processed by the receiving nodes in a different order
|
||||||
|
to the order in which they were sent.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">channelStartOptions</code></td><td>
|
||||||
|
<p>Sets the start and stop flags for the <Channel> object used by the cluster.
|
||||||
|
The default is <code>Channel.DEFAULT</code> which starts all the channel services, such as
|
||||||
|
sender, receiver, multicast sender and multicast receiver.
|
||||||
|
The following flags are available today:</p>
|
||||||
|
<div class="codeBox"><pre><code>Channel.DEFAULT = Channel.SND_RX_SEQ (1) |
|
||||||
|
Channel.SND_TX_SEQ (2) |
|
||||||
|
Channel.MBR_RX_SEQ (4) |
|
||||||
|
Channel.MBR_TX_SEQ (8);</code></pre></div>
|
||||||
|
<p>To start a channel without multicasting, you would want to use the value <code>Channel.SND_RX_SEQ | Channel.SND_TX_SEQ</code>
|
||||||
|
that equals to <code>3</code>.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">heartbeatBackgroundEnabled</code></td><td>
|
||||||
|
<p>Flag whether invoke channel heartbeat at container background thread. Default value is false.
|
||||||
|
Enable this flag don't forget to disable the channel heartbeat thread.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">notifyLifecycleListenerOnFailure</code></td><td>
|
||||||
|
<p>Flag whether notify LifecycleListeners if all ClusterListener couldn't accept channel message.
|
||||||
|
Default value is false.
|
||||||
|
</p>
|
||||||
|
</td></tr></table>
|
||||||
|
</div></div>
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,209 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The Cookie Processor Component</title><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/cookie-processor">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The Cookie Processor Component</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Common_Attributes">Common Attributes</a></li><li><a href="#Standard_Implementation">Standard Implementation</a></li><li><a href="#RFC_6265_Cookie_Processor_-_org.apache.tomcat.util.http.Rfc6265CookieProcessor">RFC 6265 Cookie Processor - org.apache.tomcat.util.http.Rfc6265CookieProcessor</a></li></ol></li><li><a href="#Nested_Components">Nested Components</a></li><li><a href="#Special_Features">Special Features</a></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>CookieProcessor</strong> element represents the component that
|
||||||
|
parses received cookie headers into <code>javax.servlet.http.Cookie</code>
|
||||||
|
objects accessible through <code>HttpServletRequest.getCookies()</code> and
|
||||||
|
converts <code>javax.servlet.http.Cookie</code> objects added to the response
|
||||||
|
through <code>HttpServletResponse.addCookie()</code> to the HTTP headers
|
||||||
|
returned to the client.</p>
|
||||||
|
|
||||||
|
<p>A CookieProcessor element MAY be nested inside a
|
||||||
|
<a href="context.html">Context</a> component. If it is not included, a default
|
||||||
|
implementation will be created automatically.</p>
|
||||||
|
|
||||||
|
<p><strong>Note:</strong> <strong>CookieProcessor</strong> is a new
|
||||||
|
configuration element, introduced in Tomcat 8.0.15.</p>
|
||||||
|
<ul>
|
||||||
|
<li>The <strong>CookieProcessor</strong> element allows different cookie
|
||||||
|
parsing configuration in each web application, or globally in the default
|
||||||
|
<code>conf/context.xml</code> file. The legacy cookie parsing algorithm
|
||||||
|
supported only limited global configuration via several
|
||||||
|
<a href="systemprops.html#Specifications">system properties</a>. Those
|
||||||
|
system properties are still supported, but are going to be deprecated in
|
||||||
|
favor of this new configuration element.
|
||||||
|
</li>
|
||||||
|
<li>The new RFC6265-compliant implementation is a drop-in replacement for
|
||||||
|
the original legacy one. The legacy implementation remains the default. You
|
||||||
|
can select the implementation by setting <code>className</code> attribute
|
||||||
|
on <strong>CookieProcessor</strong> element.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Common_Attributes">Common Attributes</h4><div class="text">
|
||||||
|
|
||||||
|
<p>All implementations of <strong>CookieProcessor</strong> support the
|
||||||
|
following attributes:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">className</code></td><td>
|
||||||
|
<p>Java class name of the implementation to use. This class must
|
||||||
|
implement the <code>org.apache.tomcat.util.http.CookieProcessor</code>
|
||||||
|
interface. If not specified, the standard value (defined below) will be
|
||||||
|
used.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Standard_Implementation">Standard Implementation</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The standard implementation of <strong>CookieProcessor</strong> is
|
||||||
|
<code>org.apache.tomcat.util.http.LegacyCookieProcessor</code>. Note
|
||||||
|
that it is anticipated that this will change to
|
||||||
|
<code>org.apache.tomcat.util.http.Rfc6265CookieProcessor</code> in a future
|
||||||
|
Tomcat 8 release.</p>
|
||||||
|
|
||||||
|
<p>This is the legacy cookie parser based on RFC6265, RFC2109 and RFC2616.
|
||||||
|
It implements a strict interpretation of the cookie specifications. Due to
|
||||||
|
various interoperability issues with browsers not all strict behaviours
|
||||||
|
are enabled by default and additional options are available to further
|
||||||
|
relax the behaviour of this cookie processor if required.</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">allowEqualsInValue</code></td><td>
|
||||||
|
<p>If this is <code>true</code> Tomcat will allow '<code>=</code>'
|
||||||
|
characters when parsing unquoted cookie values. If <code>false</code>,
|
||||||
|
cookie values containing '<code>=</code>' will be terminated when the
|
||||||
|
'<code>=</code>' is encountered and the remainder of the cookie value
|
||||||
|
will be dropped.</p>
|
||||||
|
<p>If not set the specification compliant default value of
|
||||||
|
<code>false</code> will be used. This default may be changed by setting
|
||||||
|
the
|
||||||
|
<code>org.apache.tomcat.util.http.ServerCookie.ALLOW_EQUALS_IN_VALUE</code>
|
||||||
|
<a href="systemprops.html">system property</a>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">allowHttpSepsInV0</code></td><td>
|
||||||
|
<p>If this is <code>true</code> Tomcat will allow HTTP separators in
|
||||||
|
cookie names and values.</p>
|
||||||
|
<p>If not specified, the default specification compliant value of
|
||||||
|
<code>false</code> will be used. This default may be changed by setting
|
||||||
|
the
|
||||||
|
<code>org.apache.tomcat.util.http.ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V0</code>
|
||||||
|
<a href="systemprops.html">system property</a>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">allowNameOnly</code></td><td>
|
||||||
|
<p>If this is <code>true</code> Tomcat will allow name only cookies
|
||||||
|
(with or without trailing '<code>=</code>') when parsing cookie headers.
|
||||||
|
If <code>false</code>, name only cookies will be dropped.</p>
|
||||||
|
<p>If not set the specification compliant default value of
|
||||||
|
<code>false</code> will be used. This default may be changed by setting
|
||||||
|
the
|
||||||
|
<code>org.apache.tomcat.util.http.ServerCookie.ALLOW_NAME_ONLY</code>
|
||||||
|
<a href="systemprops.html">system property</a>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">alwaysAddExpires</code></td><td>
|
||||||
|
<p>If this is <code>true</code> Tomcat will always add an expires
|
||||||
|
parameter to a SetCookie header even for cookies with version greater
|
||||||
|
than zero. This is to work around a known IE6 and IE7 bug that causes I
|
||||||
|
to ignore the Max-Age parameter in a SetCookie header.</p>
|
||||||
|
<p>If <code>org.apache.catalina.STRICT_SERVLET_COMPLIANCE</code> is set
|
||||||
|
to <code>true</code>, the default of this setting will be
|
||||||
|
<code>false</code>, else the default value will be <code>true</code>.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">forwardSlashIsSeparator</code></td><td>
|
||||||
|
<p>If this is <code>true</code> Tomcat will treat the forward slash
|
||||||
|
character ('<code>/</code>') as an HTTP separator when processing cookie
|
||||||
|
headers. If <code>org.apache.catalina.STRICT_SERVLET_COMPLIANCE</code>
|
||||||
|
is set to <code>true</code>, the default of this setting will be
|
||||||
|
<code>true</code>, else the default value will be <code>false</code>.
|
||||||
|
This default may be overridden by setting the
|
||||||
|
<code>org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR</code>
|
||||||
|
system property.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">preserveCookieHeader</code></td><td>
|
||||||
|
<p>This attribute is no longer used. From Tomcat 8.0.31, Tomcat will
|
||||||
|
always preserve the cookie header returned by
|
||||||
|
<code>HttpServletRequest.getHeader()</code>.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="RFC_6265_Cookie_Processor_-_org.apache.tomcat.util.http.Rfc6265CookieProcessor">RFC 6265 Cookie Processor - org.apache.tomcat.util.http.Rfc6265CookieProcessor</h4><div class="text">
|
||||||
|
|
||||||
|
<p>This cookie processor is based on RFC6265 with the following changes to
|
||||||
|
support better interoperability:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Values 0x80 to 0xFF are permitted in cookie-octet to support the use
|
||||||
|
of UTF-8 in cookie values as used by HTML 5.</li>
|
||||||
|
<li>For cookies without a value, the '=' is not required after the name as
|
||||||
|
some browsers do not sent it.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>The RFC 6265 cookie processor is generally more lenient than the legacy
|
||||||
|
cookie parser. In particular:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>The '<code>=</code>' and '<code>/</code>' characters are always
|
||||||
|
permitted in a cookie value.</li>
|
||||||
|
<li>Name only cookies are always permitted.</li>
|
||||||
|
<li>The cookie header is always preserved.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>No additional attributes are supported by the <strong>RFC 6265 Cookie
|
||||||
|
Processor</strong>.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><h3 id="Nested_Components">Nested Components</h3><div class="text">
|
||||||
|
|
||||||
|
<p>No element may be nested inside a <strong>CookieProcessor</strong>.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Special_Features">Special Features</h3><div class="text">
|
||||||
|
|
||||||
|
<p>No special features are associated with a <strong>CookieProcessor</strong>
|
||||||
|
element.</p>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,209 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The CredentialHandler Component</title><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/credentialhandler">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The CredentialHandler Component</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Common_Attributes">Common Attributes</a></li><li><a href="#MessageDigestCredentialHandler">MessageDigestCredentialHandler</a></li><li><a href="#NestedCredentialHandler">NestedCredentialHandler</a></li><li><a href="#SecretKeyCredentialHandler">SecretKeyCredentialHandler</a></li></ol></li><li><a href="#Nested_Components">Nested Components</a></li><li><a href="#Special_Features">Special Features</a></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>CredentialHandler</strong> element represents the component
|
||||||
|
used by a <a href="realm.html">Realm</a> to compare a provided credential such
|
||||||
|
as a password with the version of the credential stored by the
|
||||||
|
<a href="realm.html">Realm</a>. The <strong>CredentialHandler</strong> can
|
||||||
|
also be used to generate a new stored version of a given credential that would
|
||||||
|
be required, for example, when adding a new user to a
|
||||||
|
<a href="realm.html">Realm</a> or when changing a user's password.</p>
|
||||||
|
|
||||||
|
<p>A <strong>CredentialHandler</strong> element MUST be nested inside a
|
||||||
|
<a href="realm.html">Realm</a> component. If it is not included,
|
||||||
|
a default <strong>CredentialHandler</strong> will be created using the
|
||||||
|
<strong>MessageDigestCredentialHandler</strong>.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Common_Attributes">Common Attributes</h4><div class="text">
|
||||||
|
|
||||||
|
<p>All implementations of <strong>CredentialHandler</strong> support the
|
||||||
|
following attributes:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
|
||||||
|
<p>Java class name of the implementation to use. This class must
|
||||||
|
implement the <code>org.apache.catalina.CredentialHandler</code>
|
||||||
|
interface.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
<p>Unlike most Catalina components, there are several standard
|
||||||
|
<strong>CredentialHandler</strong> implementations available. As a result,
|
||||||
|
if a <strong>CredentialHandler</strong> element is present then the
|
||||||
|
<code>className</code> attribute MUST be used to select the implementation
|
||||||
|
you wish to use.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="MessageDigestCredentialHandler">MessageDigestCredentialHandler</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>MessageDigestCredentialHandler</strong> is used when stored
|
||||||
|
passwords are protected by a message digest. This credential handler
|
||||||
|
supports the following forms of stored passwords:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>plainText</strong> - the plain text credentials if no
|
||||||
|
algorithm is specified</li>
|
||||||
|
<li><strong>encodedCredential</strong> - a hex encoded digest of the
|
||||||
|
password digested using the configured digest</li>
|
||||||
|
<li><strong>{MD5}encodedCredential</strong> - a Base64 encoded MD5
|
||||||
|
digest of the password</li>
|
||||||
|
<li><strong>{SHA}encodedCredential</strong> - a Base64 encoded SHA1 digest
|
||||||
|
of the password</li>
|
||||||
|
<li><strong>{SSHA}encodedCredential</strong> - 20 character salt followed
|
||||||
|
by the salted SHA1 digest Base64 encoded</li>
|
||||||
|
<li><strong>salt$iterationCount$encodedCredential</strong> - a hex encoded
|
||||||
|
salt, iteration code and a hex encoded credential, each separated by
|
||||||
|
$</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>If the stored password form does not include an iteration count then an
|
||||||
|
iteration count of 1 is used.</p>
|
||||||
|
|
||||||
|
<p>If the stored password form does not include salt then no salt is
|
||||||
|
used.</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">algorithm</code></td><td>
|
||||||
|
<p>The name of the <code>java.security.MessageDigest</code> algorithm
|
||||||
|
used to encode user passwords stored in the database. If not specified,
|
||||||
|
user passwords are assumed to be stored in clear-text.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">encoding</code></td><td>
|
||||||
|
<p>Digesting the password requires that it is converted to bytes. This
|
||||||
|
attribute determines the character encoding to use for conversions
|
||||||
|
between characters and bytes. If not specified, UTF-8 will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">iterations</code></td><td>
|
||||||
|
<p>The number of iterations to use when creating a new stored credential
|
||||||
|
from a clear text credential.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">saltLength</code></td><td>
|
||||||
|
<p>The length of the randomly generated salt to use when creating a
|
||||||
|
new stored credential from a clear text credential.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="NestedCredentialHandler">NestedCredentialHandler</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>NestedCredentialHandler</strong> is an implementation of
|
||||||
|
<strong>CredentialHandler</strong> that delegates to one or more
|
||||||
|
sub-CredentialHandlers.</p>
|
||||||
|
|
||||||
|
<p>Using the <strong>NestedCredentialHandler</strong> gives the developer
|
||||||
|
the ability to combine multiple <strong>CredentialHandler</strong>s of the
|
||||||
|
same or different types.</p>
|
||||||
|
|
||||||
|
<p>Sub-CredentialHandlers are defined by nesting CredentialHandler elements
|
||||||
|
inside the <code>CredentialHandler</code> element that defines the
|
||||||
|
NestedCredentialHandler. Credentials will be matched against each
|
||||||
|
<code>CredentialHandler</code> in the order they are listed. A match against
|
||||||
|
any CredentialHandler will be sufficient for the credentials to be
|
||||||
|
considered matched.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="SecretKeyCredentialHandler">SecretKeyCredentialHandler</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>SecretKeyCredentialHandler</strong> is used when stored
|
||||||
|
passwords are built using <code>javax.crypto.SecretKeyFactory</code>. This
|
||||||
|
credential handler supports the following forms of stored passwords:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>salt$iterationCount$encodedCredential</strong> - a hex encoded
|
||||||
|
salt, iteration code and a hex encoded credential, each separated by
|
||||||
|
$</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>If the stored password form does not include an iteration count then an
|
||||||
|
iteration count of 1 is used.</p>
|
||||||
|
|
||||||
|
<p>If the stored password form does not include salt then no salt is
|
||||||
|
used.</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">algorithm</code></td><td>
|
||||||
|
<p>The name of the secret key algorithm used to encode user passwords
|
||||||
|
stored in the database. If not specified, a default of
|
||||||
|
<code>PBKDF2WithHmacSHA1</code> is used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">keyLength</code></td><td>
|
||||||
|
<p>The length of key to generate for the stored credential. If not
|
||||||
|
specified, a default of <code>160</code> is used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">iterations</code></td><td>
|
||||||
|
<p>The number of iterations to use when creating a new stored credential
|
||||||
|
from a clear text credential.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">saltLength</code></td><td>
|
||||||
|
<p>The length of the randomly generated salt to use when creating a
|
||||||
|
new stored credential from a clear text credential.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><h3 id="Nested_Components">Nested Components</h3><div class="text">
|
||||||
|
|
||||||
|
<p>If you are using the <em>NestedCredentialHandler Implementation</em> or a
|
||||||
|
CredentialHandler that extends the NestedCredentialHandler one or more
|
||||||
|
<strong><CredentialHandler></strong> elements may be nested inside it.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div><h3 id="Special_Features">Special Features</h3><div class="text">
|
||||||
|
|
||||||
|
<p>No special features are associated with a
|
||||||
|
<strong>CredentialHandler</strong> element.</p>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,259 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The Engine Container</title><meta name="author" content="Craig R. McClanahan"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/engine">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The Engine Container</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Common_Attributes">Common Attributes</a></li><li><a href="#Standard_Implementation">Standard Implementation</a></li></ol></li><li><a href="#Nested_Components">Nested Components</a></li><li><a href="#Special_Features">Special Features</a><ol><li><a href="#Logging">Logging</a></li><li><a href="#Access_Logs">Access Logs</a></li><li><a href="#Lifecycle_Listeners">Lifecycle Listeners</a></li><li><a href="#Request_Filters">Request Filters</a></li></ol></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>Engine</strong> element represents the entire request
|
||||||
|
processing machinery associated with a particular Catalina
|
||||||
|
<a href="service.html">Service</a>. It receives and processes
|
||||||
|
<em>all</em> requests from one or more <strong>Connectors</strong>,
|
||||||
|
and returns the completed response to the Connector for ultimate
|
||||||
|
transmission back to the client.</p>
|
||||||
|
|
||||||
|
<p>Exactly one <strong>Engine</strong> element MUST be nested inside
|
||||||
|
a <a href="service.html">Service</a> element, following all of the
|
||||||
|
corresponding Connector elements associated with this Service.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Common_Attributes">Common Attributes</h4><div class="text">
|
||||||
|
|
||||||
|
<p>All implementations of <strong>Engine</strong>
|
||||||
|
support the following attributes:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">backgroundProcessorDelay</code></td><td>
|
||||||
|
<p>This value represents the delay in seconds between the
|
||||||
|
invocation of the backgroundProcess method on this engine and
|
||||||
|
its child containers, including all hosts and contexts.
|
||||||
|
Child containers will not be invoked if their delay value is not
|
||||||
|
negative (which would mean they are using their own processing
|
||||||
|
thread). Setting this to a positive value will cause
|
||||||
|
a thread to be spawn. After waiting the specified amount of time,
|
||||||
|
the thread will invoke the backgroundProcess method on this engine
|
||||||
|
and all its child containers. If not specified, the default value for
|
||||||
|
this attribute is 10, which represent a 10 seconds delay.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">className</code></td><td>
|
||||||
|
<p>Java class name of the implementation to use. This class must
|
||||||
|
implement the <code>org.apache.catalina.Engine</code> interface.
|
||||||
|
If not specified, the standard value (defined below) will be used.</p>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">defaultHost</code></strong></td><td>
|
||||||
|
<p>The default host name, which identifies the
|
||||||
|
<a href="host.html">Host</a> that will process requests directed
|
||||||
|
to host names on this server, but which are not configured in
|
||||||
|
this configuration file. This name MUST match the <code>name</code>
|
||||||
|
attributes of one of the <a href="host.html">Host</a> elements
|
||||||
|
nested immediately inside.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">jvmRoute</code></td><td>
|
||||||
|
<p>Identifier which must be used in load balancing scenarios to enable
|
||||||
|
session affinity. The identifier, which must be unique across all
|
||||||
|
Tomcat servers which participate in the cluster, will be appended to
|
||||||
|
the generated session identifier, therefore allowing the front end
|
||||||
|
proxy to always forward a particular session to the same Tomcat
|
||||||
|
instance.</p>
|
||||||
|
<p>
|
||||||
|
Note that the <code>jvmRoute</code> can also be set using the
|
||||||
|
<code>jvmRoute</code> system property. The <code>jvmRoute</code>
|
||||||
|
set in an <code><Engine></code> attribute will override
|
||||||
|
any <code>jvmRoute</code> system property.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">name</code></strong></td><td>
|
||||||
|
<p>Logical name of this Engine, used in log and error messages. <em>When
|
||||||
|
using multiple <a href="service.html">Service</a> elements in the same
|
||||||
|
<a href="server.html">Server</a>, each Engine MUST be assigned a unique
|
||||||
|
name.</em></p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">startStopThreads</code></td><td>
|
||||||
|
<p>The number of threads this <strong>Engine</strong> will use to start
|
||||||
|
child <a href="host.html">Host</a> elements in parallel. The special
|
||||||
|
value of 0 will result in the value of
|
||||||
|
<code>Runtime.getRuntime().availableProcessors()</code> being used.
|
||||||
|
Negative values will result in
|
||||||
|
<code>Runtime.getRuntime().availableProcessors() + value</code> being
|
||||||
|
used unless this is less than 1 in which case 1 thread will be used. If
|
||||||
|
not specified, the default value of 1 will be used. </p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Standard_Implementation">Standard Implementation</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The standard implementation of <strong>Engine</strong> is
|
||||||
|
<strong>org.apache.catalina.core.StandardEngine</strong>.
|
||||||
|
It supports the following additional attributes (in addition to the
|
||||||
|
common attributes listed above):</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
</div><h3 id="Nested_Components">Nested Components</h3><div class="text">
|
||||||
|
|
||||||
|
<p>You can nest one or more <a href="host.html">Host</a> elements inside
|
||||||
|
this <strong>Engine</strong> element, each representing a different virtual
|
||||||
|
host associated with this server. At least one <a href="host.html">Host</a>
|
||||||
|
is required, and one of the nested <a href="host.html">Hosts</a> MUST
|
||||||
|
have a name that matches the name specified for the
|
||||||
|
<code>defaultHost</code> attribute, listed above.</p>
|
||||||
|
|
||||||
|
<p>You can nest at most one instance of the following utility components
|
||||||
|
by nesting a corresponding element inside your <strong>Engine</strong>
|
||||||
|
element:</p>
|
||||||
|
<ul>
|
||||||
|
<li><a href="realm.html"><strong>Realm</strong></a> -
|
||||||
|
Configure a realm that will allow its
|
||||||
|
database of users, and their associated roles, to be shared across all
|
||||||
|
<a href="host.html">Hosts</a> and <a href="context.html">Contexts</a>
|
||||||
|
nested inside this Engine, unless overridden by a
|
||||||
|
<a href="realm.html">Realm</a> configuration at a lower level.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Special_Features">Special Features</h3><div class="text">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Logging">Logging</h4><div class="text">
|
||||||
|
|
||||||
|
<p>An engine is associated with the
|
||||||
|
<code>org.apache.catalina.core.ContainerBase.[enginename]</code>
|
||||||
|
log category. Note that the brackets are actually part of the name,
|
||||||
|
don't omit them.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Access_Logs">Access Logs</h4><div class="text">
|
||||||
|
|
||||||
|
<p>When you run a web server, one of the output files normally generated
|
||||||
|
is an <em>access log</em>, which generates one line of information for
|
||||||
|
each request processed by the server, in a standard format. Catalina
|
||||||
|
includes an optional <a href="valve.html">Valve</a> implementation that
|
||||||
|
can create access logs in the same standard format created by web servers,
|
||||||
|
or in any number of custom formats.</p>
|
||||||
|
|
||||||
|
<p>You can ask Catalina to create an access log for all requests
|
||||||
|
processed by an <a href="engine.html">Engine</a>,
|
||||||
|
<a href="host.html">Host</a>, or <a href="context.html">Context</a>
|
||||||
|
by nesting a <a href="valve.html">Valve</a> element like this:</p>
|
||||||
|
|
||||||
|
<div class="codeBox"><pre><code><Engine name="Standalone" ...>
|
||||||
|
...
|
||||||
|
<Valve className="org.apache.catalina.valves.AccessLogValve"
|
||||||
|
prefix="catalina_access_log" suffix=".txt"
|
||||||
|
pattern="common"/>
|
||||||
|
...
|
||||||
|
</Engine></code></pre></div>
|
||||||
|
|
||||||
|
<p>See <a href="valve.html#Access_Logging">Access Logging Valves</a>
|
||||||
|
for more information on the configuration attributes that are
|
||||||
|
supported.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Lifecycle_Listeners">Lifecycle Listeners</h4><div class="text">
|
||||||
|
|
||||||
|
<p>If you have implemented a Java object that needs to know when this
|
||||||
|
<strong>Engine</strong> is started or stopped, you can declare it by
|
||||||
|
nesting a <strong>Listener</strong> element inside this element. The
|
||||||
|
class name you specify must implement the
|
||||||
|
<code>org.apache.catalina.LifecycleListener</code> interface, and
|
||||||
|
it will be notified about the occurrence of the corresponding
|
||||||
|
lifecycle events. Configuration of such a listener looks like this:</p>
|
||||||
|
|
||||||
|
<div class="codeBox"><pre><code><Engine name="Standalone" ...>
|
||||||
|
...
|
||||||
|
<Listener className="com.mycompany.mypackage.MyListener" ... >
|
||||||
|
...
|
||||||
|
</Engine></code></pre></div>
|
||||||
|
|
||||||
|
<p>Note that a Listener can have any number of additional properties
|
||||||
|
that may be configured from this element. Attribute names are matched
|
||||||
|
to corresponding JavaBean property names using the standard property
|
||||||
|
method naming patterns.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Request_Filters">Request Filters</h4><div class="text">
|
||||||
|
|
||||||
|
<p>You can ask Catalina to check the IP address, or host name, on every
|
||||||
|
incoming request directed to the surrounding
|
||||||
|
<a href="engine.html">Engine</a>, <a href="host.html">Host</a>, or
|
||||||
|
<a href="context.html">Context</a> element. The remote address or name
|
||||||
|
will be checked against configured "accept" and/or "deny"
|
||||||
|
filters, which are defined using <code>java.util.regex</code> Regular
|
||||||
|
Expression syntax. Requests that come from locations that are
|
||||||
|
not accepted will be rejected with an HTTP "Forbidden" error.
|
||||||
|
Example filter declarations:</p>
|
||||||
|
|
||||||
|
<div class="codeBox"><pre><code><Engine name="Standalone" ...>
|
||||||
|
...
|
||||||
|
<Valve className="org.apache.catalina.valves.RemoteHostValve"
|
||||||
|
allow=".*\.mycompany\.com|www\.yourcompany\.com"/>
|
||||||
|
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
|
||||||
|
deny="192\.168\.1\.\d+"/>
|
||||||
|
...
|
||||||
|
</Engine></code></pre></div>
|
||||||
|
|
||||||
|
<p>See <a href="valve.html#Remote_Address_Filter">Remote Address Filter</a>
|
||||||
|
and <a href="valve.html#Remote_Host_Filter">Remote Host Filter</a> for
|
||||||
|
more information about the configuration options that are supported.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,127 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The Executor (thread pool)</title><meta name="author" content="Filip Hanik"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/executor">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The Executor (thread pool)</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Common_Attributes">Common Attributes</a></li><li><a href="#Standard_Implementation">Standard Implementation</a></li></ol></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>Executor</strong> represents a thread pool that can be shared
|
||||||
|
between components in Tomcat. Historically there has been a thread pool per
|
||||||
|
connector created but this allows you to share a thread pool, between (primarily) connector
|
||||||
|
but also other components when those get configured to support executors</p>
|
||||||
|
|
||||||
|
|
||||||
|
<p>The executor has to implement the <code>org.apache.catalina.Executor</code> interface.</p>
|
||||||
|
|
||||||
|
<p>The executor is a nested element to the <a href="service.html">Service</a> element.
|
||||||
|
And in order for it to be picked up by the connectors, the Executor element has to appear
|
||||||
|
prior to the Connector element in server.xml</p>
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Common_Attributes">Common Attributes</h4><div class="text">
|
||||||
|
|
||||||
|
<p>All implementations of <strong>Executor</strong>
|
||||||
|
support the following attributes:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">className</code></td><td>
|
||||||
|
<p>The class of the implementation. The implementation has to implement the
|
||||||
|
<code>org.apache.catalina.Executor</code> interface.
|
||||||
|
This interface ensures that the object can be referenced through its <code>name</code> attribute
|
||||||
|
and that implements Lifecycle, so that it can be started and stopped with the container.
|
||||||
|
The default value for the className is <code>org.apache.catalina.core.StandardThreadExecutor</code></p>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">name</code></strong></td><td>
|
||||||
|
<p>The name used to reference this pool in other places in server.xml.
|
||||||
|
The name is required and must be unique.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Standard_Implementation">Standard Implementation</h4><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The default implementation supports the following attributes:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">threadPriority</code></td><td>
|
||||||
|
<p>(int) The thread priority for threads in the executor, the default is
|
||||||
|
<code>5</code> (the value of the <code>Thread.NORM_PRIORITY</code> constant)</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">daemon</code></td><td>
|
||||||
|
<p>(boolean) Whether the threads should be daemon threads or not, the default is <code>true</code></p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">namePrefix</code></td><td>
|
||||||
|
<p>(String) The name prefix for each thread created by the executor.
|
||||||
|
The thread name for an individual thread will be <code>namePrefix+threadNumber</code></p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxThreads</code></td><td>
|
||||||
|
<p>(int) The max number of active threads in this pool, default is <code>200</code></p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">minSpareThreads</code></td><td>
|
||||||
|
<p>(int) The minimum number of threads (idle and active) always kept alive, default is <code>25</code></p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxIdleTime</code></td><td>
|
||||||
|
<p>(int) The number of milliseconds before an idle thread shutsdown, unless the number of active threads are less
|
||||||
|
or equal to minSpareThreads. Default value is <code>60000</code>(1 minute)</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxQueueSize</code></td><td>
|
||||||
|
<p>(int) The maximum number of runnable tasks that can queue up awaiting
|
||||||
|
execution before we reject them. Default value is <code>Integer.MAX_VALUE</code></p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">prestartminSpareThreads</code></td><td>
|
||||||
|
<p>(boolean) Whether minSpareThreads should be started when starting the Executor or not,
|
||||||
|
the default is <code>false</code></p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">threadRenewalDelay</code></td><td>
|
||||||
|
<p>(long) If a <a href="listeners.html">ThreadLocalLeakPreventionListener</a> is configured,
|
||||||
|
it will notify this executor about stopped contexts.
|
||||||
|
After a context is stopped, threads in the pool are renewed. To avoid renewing all threads at the same time,
|
||||||
|
this option sets a delay between renewal of any 2 threads. The value is in ms,
|
||||||
|
default value is <code>1000</code> ms. If value is negative, threads are not renewed.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,258 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The GlobalNamingResources Component</title><meta name="author" content="Remy Maucherat"><meta name="author" content="Yoav Shapira"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/globalresources">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The GlobalNamingResources Component</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Attributes">Attributes</a></li><li><a href="#Nested_Components">Nested Components</a></li><li><a href="#Special_Features">Special Features</a><ol><li><a href="#Environment_Entries">Environment Entries</a></li><li><a href="#Resource_Definitions">Resource Definitions</a></li><li><a href="#Resource_Links">Resource Links</a></li><li><a href="#Transaction">Transaction</a></li></ol></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>GlobalNamingResources</strong> element defines the global
|
||||||
|
JNDI resources for the <a href="server.html">Server</a>.</p>
|
||||||
|
|
||||||
|
<p>These resources are listed in the server's global JNDI resource context.
|
||||||
|
This context is distinct from the per-web-application JNDI contexts
|
||||||
|
described in
|
||||||
|
the <a href="../jndi-resources-howto.html">JNDI Resources HOW-TO</a>.
|
||||||
|
The resources defined in this element are <strong>not</strong> visible in
|
||||||
|
the per-web-application contexts unless you explicitly link them with
|
||||||
|
<a href="context.html#Resource_Links"><ResourceLink></a> elements.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
|
||||||
|
</div><h3 id="Nested_Components">Nested Components</h3><div class="text">
|
||||||
|
|
||||||
|
</div><h3 id="Special_Features">Special Features</h3><div class="text">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Environment_Entries">Environment Entries</h4><div class="text">
|
||||||
|
|
||||||
|
<p>You can configure named values that will be made visible to all
|
||||||
|
web applications as environment entry resources by nesting
|
||||||
|
<code><Environment></code> entries inside this element. For
|
||||||
|
example, you can create an environment entry like this:</p>
|
||||||
|
<div class="codeBox"><pre><code><GlobalNamingResources ...>
|
||||||
|
...
|
||||||
|
<Environment name="maxExemptions" value="10"
|
||||||
|
type="java.lang.Integer" override="false"/>
|
||||||
|
...
|
||||||
|
</GlobalNamingResources></code></pre></div>
|
||||||
|
|
||||||
|
<p>This is equivalent to the inclusion of the following element in the
|
||||||
|
web application deployment descriptor (<code>/WEB-INF/web.xml</code>):
|
||||||
|
</p>
|
||||||
|
<div class="codeBox"><pre><code><env-entry>
|
||||||
|
<env-entry-name>maxExemptions</env-entry-name>
|
||||||
|
<env-entry-value>10</env-entry-value>
|
||||||
|
<env-entry-type>java.lang.Integer</env-entry-type>
|
||||||
|
</env-entry></code></pre></div>
|
||||||
|
<p>but does <em>not</em> require modification of the deployment descriptor
|
||||||
|
to customize this value.</p>
|
||||||
|
|
||||||
|
<p>The valid attributes for an <code><Environment></code> element
|
||||||
|
are as follows:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">description</code></td><td>
|
||||||
|
<p>Optional, human-readable description of this environment entry.</p>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">name</code></strong></td><td>
|
||||||
|
<p>The name of the environment entry to be created, relative to the
|
||||||
|
<code>java:comp/env</code> context.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">override</code></td><td>
|
||||||
|
<p>Set this to <code>false</code> if you do <strong>not</strong> want
|
||||||
|
an <code><env-entry></code> for the same environment entry name,
|
||||||
|
found in the web application deployment descriptor, to override the
|
||||||
|
value specified here. By default, overrides are allowed.</p>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">type</code></strong></td><td>
|
||||||
|
<p>The fully qualified Java class name expected by the web application
|
||||||
|
for this environment entry. Must be a legal value for
|
||||||
|
<code><env-entry-type></code> in the web application deployment
|
||||||
|
descriptor.</p>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">value</code></strong></td><td>
|
||||||
|
<p>The parameter value that will be presented to the application
|
||||||
|
when requested from the JNDI context. This value must be convertable
|
||||||
|
to the Java type defined by the <code>type</code> attribute.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Resource_Definitions">Resource Definitions</h4><div class="text">
|
||||||
|
|
||||||
|
<p>You can declare the characteristics of resources
|
||||||
|
to be returned for JNDI lookups of <code><resource-ref></code> and
|
||||||
|
<code><resource-env-ref></code> elements in the web application
|
||||||
|
deployment descriptor by defining them in this element and then linking
|
||||||
|
them with <a href="context.html#Resource_Links"><ResourceLink></a>
|
||||||
|
elements
|
||||||
|
in the <code><strong><Context></strong></code> element.
|
||||||
|
|
||||||
|
You <strong>MUST</strong> also define any other needed parameters using
|
||||||
|
attributes on the Resource element, to configure
|
||||||
|
the object factory to be used (if not known to Tomcat already), and
|
||||||
|
the properties used to configure that object factory.</p>
|
||||||
|
|
||||||
|
<p>For example, you can create a resource definition like this:</p>
|
||||||
|
<div class="codeBox"><pre><code><GlobalNamingResources ...>
|
||||||
|
...
|
||||||
|
<Resource name="jdbc/EmployeeDB" auth="Container"
|
||||||
|
type="javax.sql.DataSource"
|
||||||
|
description="Employees Database for HR Applications"/>
|
||||||
|
...
|
||||||
|
</GlobalNamingResources></code></pre></div>
|
||||||
|
|
||||||
|
<p>This is equivalent to the inclusion of the following element in the
|
||||||
|
web application deployment descriptor (<code>/WEB-INF/web.xml</code>):</p>
|
||||||
|
<div class="codeBox"><pre><code><resource-ref>
|
||||||
|
<description>Employees Database for HR Applications</description>
|
||||||
|
<res-ref-name>jdbc/EmployeeDB</res-ref-name>
|
||||||
|
<res-ref-type>javax.sql.DataSource</res-ref-type>
|
||||||
|
<res-auth>Container</res-auth>
|
||||||
|
</resource-ref></code></pre></div>
|
||||||
|
|
||||||
|
<p>but does <em>not</em> require modification of the deployment
|
||||||
|
descriptor to customize this value.</p>
|
||||||
|
|
||||||
|
<p>The valid attributes for a <code><Resource></code> element
|
||||||
|
are as follows:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">auth</code></td><td>
|
||||||
|
<p>Specify whether the web Application code signs on to the
|
||||||
|
corresponding resource manager programmatically, or whether the
|
||||||
|
Container will sign on to the resource manager on behalf of the
|
||||||
|
application. The value of this attribute must be
|
||||||
|
<code>Application</code> or <code>Container</code>. This
|
||||||
|
attribute is <strong>required</strong> if the web application
|
||||||
|
will use a <code><resource-ref></code> element in the web
|
||||||
|
application deployment descriptor, but is optional if the
|
||||||
|
application uses a <code><resource-env-ref></code> instead.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">closeMethod</code></td><td>
|
||||||
|
<p>Name of the zero-argument method to call on a singleton resource when
|
||||||
|
it is no longer required. This is intended to speed up clean-up of
|
||||||
|
resources that would otherwise happen as part of garbage collection.
|
||||||
|
This attribute is ignored if the <code>singleton</code> attribute is
|
||||||
|
false. If not specified, no default is defined and no close method will
|
||||||
|
be called.</p>
|
||||||
|
<p>For Apache Commons DBCP and Apache Tomcat JDBC connection pools
|
||||||
|
you can use <code>closeMethod="close"</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">description</code></td><td>
|
||||||
|
<p>Optional, human-readable description of this resource.</p>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">name</code></strong></td><td>
|
||||||
|
<p>The name of the resource to be created, relative to the
|
||||||
|
<code>java:comp/env</code> context.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">scope</code></td><td>
|
||||||
|
<p>Specify whether connections obtained through this resource
|
||||||
|
manager can be shared. The value of this attribute must be
|
||||||
|
<code>Shareable</code> or <code>Unshareable</code>. By default,
|
||||||
|
connections are assumed to be shareable.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">singleton</code></td><td>
|
||||||
|
<p>Specify whether this resource definition is for a singleton resource,
|
||||||
|
i.e. one where there is only a single instance of the resource. If this
|
||||||
|
attribute is <code>true</code>, multiple JNDI lookups for this resource
|
||||||
|
will return the same object. If this attribute is <code>false</code>,
|
||||||
|
multiple JNDI lookups for this resource will return different objects.
|
||||||
|
This attribute must be <code>true</code> for
|
||||||
|
<code>javax.sql.DataSource</code> resources to enable JMX registration
|
||||||
|
of the DataSource. The value of this attribute must be <code>true</code>
|
||||||
|
or <code>false</code>. By default, this attribute is <code>true</code>.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">type</code></strong></td><td>
|
||||||
|
<p>The fully qualified Java class name expected by the web
|
||||||
|
application when it performs a lookup for this resource.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Resource_Links">Resource Links</h4><div class="text">
|
||||||
|
<p>Use <a href="context.html#Resource_Links"><code><ResourceLink></code></a>
|
||||||
|
elements to link resources from the global context into
|
||||||
|
per-web-application contexts. Here is an example of making a custom
|
||||||
|
factory available to an application, based on the example definition in the
|
||||||
|
<a href="../jndi-resources-howto.html#Generic_JavaBean_Resources">
|
||||||
|
JNDI Resource HOW-TO</a>:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="codeBox"><pre><code><Context>
|
||||||
|
<ResourceLink
|
||||||
|
name="bean/MyBeanFactory"
|
||||||
|
global="bean/MyBeanFactory"
|
||||||
|
type="com.mycompany.MyBean"
|
||||||
|
/>
|
||||||
|
</Context></code></pre></div>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Transaction">Transaction</h4><div class="text">
|
||||||
|
|
||||||
|
<p>You can declare the characteristics of the UserTransaction
|
||||||
|
to be returned for JNDI lookup for <code>java:comp/UserTransaction</code>.
|
||||||
|
You <strong>MUST</strong> define an object factory class to instantiate
|
||||||
|
this object as well as the needed resource parameters as attributes of the
|
||||||
|
<code>Transaction</code>
|
||||||
|
element, and the properties used to configure that object factory.</p>
|
||||||
|
|
||||||
|
<p>The valid attributes for the <code><Transaction></code> element
|
||||||
|
are as follows:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">factory</code></strong></td><td>
|
||||||
|
<p>The class name for the JNDI object factory.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,621 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The Host Container</title><meta name="author" content="Craig R. McClanahan"><meta name="author" content="Remy Maucherat"><meta name="author" content="Yoav Shapira"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/host">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The Host Container</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Common_Attributes">Common Attributes</a></li><li><a href="#Standard_Implementation">Standard Implementation</a></li></ol></li><li><a href="#Nested_Components">Nested Components</a></li><li><a href="#Special_Features">Special Features</a><ol><li><a href="#Logging">Logging</a></li><li><a href="#Access_Logs">Access Logs</a></li><li><a href="#Automatic_Application_Deployment">Automatic Application Deployment</a></li><li><a href="#Host_Name_Aliases">Host Name Aliases</a></li><li><a href="#Lifecycle_Listeners">Lifecycle Listeners</a></li><li><a href="#Request_Filters">Request Filters</a></li><li><a href="#Single_Sign_On">Single Sign On</a></li><li><a href="#User_Web_Applications">User Web Applications</a></li></ol></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>Host</strong> element represents a <em>virtual host</em>,
|
||||||
|
which is an association of a network name for a server (such as
|
||||||
|
"www.mycompany.com") with the particular server on which Tomcat is running.
|
||||||
|
For clients to be able to connect to a Tomcat server using its network name,
|
||||||
|
this name must be registered in the <em>Domain Name Service</em> (DNS) server
|
||||||
|
that manages the Internet domain you belong to - contact your Network
|
||||||
|
Administrator for more information.</p>
|
||||||
|
|
||||||
|
<p>In many cases, System Administrators wish to associate more than
|
||||||
|
one network name (such as <code>www.mycompany.com</code> and
|
||||||
|
<code>company.com</code>) with the same virtual host and applications.
|
||||||
|
This can be accomplished using the <a href="#Host_Name_Aliases">Host
|
||||||
|
Name Aliases</a> feature discussed below.</p>
|
||||||
|
|
||||||
|
<p>One or more <strong>Host</strong> elements are nested inside an
|
||||||
|
<a href="engine.html">Engine</a> element. Inside the Host element, you
|
||||||
|
can nest <a href="context.html">Context</a> elements for the web
|
||||||
|
applications associated with this virtual host. Exactly one of the Hosts
|
||||||
|
associated with each Engine MUST have a name matching the
|
||||||
|
<code>defaultHost</code> attribute of that Engine.</p>
|
||||||
|
|
||||||
|
<p>Clients normally use host names to identify the server they wish to connect
|
||||||
|
to. This host name is also included in the HTTP request headers. Tomcat
|
||||||
|
extracts the host name from the HTTP headers and looks for a
|
||||||
|
<strong>Host</strong> with a matching name. If no match is found, the request
|
||||||
|
is routed to the default host. The name of the default host does not have to
|
||||||
|
match a DNS name (although it can) since any request where the DNS name does
|
||||||
|
not match the name of a <strong>Host</strong> element will be routed to the
|
||||||
|
default host.</p>
|
||||||
|
|
||||||
|
<p><em>The description below uses the variable name $CATALINA_BASE to refer the
|
||||||
|
base directory against which most relative paths are resolved. If you have
|
||||||
|
not configured Tomcat for multiple instances by setting a CATALINA_BASE
|
||||||
|
directory, then $CATALINA_BASE will be set to the value of $CATALINA_HOME,
|
||||||
|
the directory into which you have installed Tomcat.</em></p>
|
||||||
|
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Common_Attributes">Common Attributes</h4><div class="text">
|
||||||
|
|
||||||
|
<p>All implementations of <strong>Host</strong>
|
||||||
|
support the following attributes:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">appBase</code></strong></td><td>
|
||||||
|
<p>The <em>Application Base</em> directory for this virtual host.
|
||||||
|
This is the pathname of a directory that may contain web applications
|
||||||
|
to be deployed on this virtual host. You may specify an
|
||||||
|
absolute pathname, or a pathname that is relative to the
|
||||||
|
<code>$CATALINA_BASE</code> directory. See
|
||||||
|
<a href="#Automatic_Application_Deployment">Automatic Application
|
||||||
|
Deployment</a> for more information on automatic recognition and
|
||||||
|
deployment of web applications. If not specified, the default of
|
||||||
|
<code>webapps</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">xmlBase</code></td><td>
|
||||||
|
<p>The <em>XML Base</em> directory for this virtual host.
|
||||||
|
This is the pathname of a directory that may contain context XML
|
||||||
|
descriptors to be deployed on this virtual host. You may specify an
|
||||||
|
absolute pathname for this directory, or a pathname that is relative
|
||||||
|
to the <code>$CATALINA_BASE</code> directory. See
|
||||||
|
<a href="#Automatic_Application_Deployment">Automatic Application
|
||||||
|
Deployment</a> for more information on automatic recognition and
|
||||||
|
deployment of web applications. If not specified the default of
|
||||||
|
<code>conf/<engine_name>/<host_name></code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">createDirs</code></td><td>
|
||||||
|
<p>If set to true, Tomcat will attempt to create the directories defined
|
||||||
|
by the attributes <code>appBase</code> and <code>xmlBase</code> during
|
||||||
|
the startup phase. The default value is <code>true</code>. If set to
|
||||||
|
true, and directory creation fails, an error message will be printed out
|
||||||
|
but will not halt the startup sequence.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">autoDeploy</code></td><td>
|
||||||
|
<p>This flag value indicates if Tomcat should check periodically for new
|
||||||
|
or updated web applications while Tomcat is running. If true, Tomcat
|
||||||
|
periodically checks the <code>appBase</code> and <code>xmlBase</code>
|
||||||
|
directories and deploys any new web applications or context XML
|
||||||
|
descriptors found. Updated web applications or context XML descriptors
|
||||||
|
will trigger a reload of the web application. The flag's value defaults
|
||||||
|
to true. See
|
||||||
|
<a href="#Automatic_Application_Deployment">Automatic Application
|
||||||
|
Deployment</a> for more information.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">backgroundProcessorDelay</code></td><td>
|
||||||
|
<p>This value represents the delay in seconds between the
|
||||||
|
invocation of the backgroundProcess method on this host and
|
||||||
|
its child containers, including all contexts.
|
||||||
|
Child containers will not be invoked if their delay value is not
|
||||||
|
negative (which would mean they are using their own processing
|
||||||
|
thread). Setting this to a positive value will cause
|
||||||
|
a thread to be spawn. After waiting the specified amount of time,
|
||||||
|
the thread will invoke the backgroundProcess method on this host
|
||||||
|
and all its child containers. A host will use background processing to
|
||||||
|
perform live web application deployment related tasks. If not
|
||||||
|
specified, the default value for this attribute is -1, which means
|
||||||
|
the host will rely on the background processing thread of its parent
|
||||||
|
engine.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">className</code></td><td>
|
||||||
|
<p>Java class name of the implementation to use. This class must
|
||||||
|
implement the <code>org.apache.catalina.Host</code> interface.
|
||||||
|
If not specified, the standard value (defined below) will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">deployIgnore</code></td><td>
|
||||||
|
<p>A regular expression defining paths to ignore when
|
||||||
|
<code>autoDeploy</code> and <code>deployOnStartup</code> are set. This
|
||||||
|
allows you to keep your configuration in a version control system, for
|
||||||
|
example, and not deploy a .svn or CVS folder that happens to be in the
|
||||||
|
<code>appBase</code>.</p>
|
||||||
|
<p>This regular expression is relative to <code>appBase</code>. It is
|
||||||
|
also <em>anchored</em>, meaning the match is performed against the
|
||||||
|
entire file/directory name. So, <code>foo</code> matches only a file or
|
||||||
|
directory named <code>foo</code> but not <code>foo.war</code>,
|
||||||
|
<code>foobar</code>, or <code>myfooapp</code>. To match anything with
|
||||||
|
"foo", you could use <code>.*foo.*</code>.</p>
|
||||||
|
<p>See <a href="#Automatic_Application_Deployment">Automatic Application
|
||||||
|
Deployment</a> for more information.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">deployOnStartup</code></td><td>
|
||||||
|
<p>This flag value indicates if web applications from this host should
|
||||||
|
be automatically deployed when Tomcat starts. The flag's value defaults
|
||||||
|
to true. See
|
||||||
|
<a href="#Automatic_Application_Deployment">Automatic Application
|
||||||
|
Deployment</a> for more information.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">failCtxIfServletStartFails</code></td><td>
|
||||||
|
<p>Set to <code>true</code> to have each child contexts fail its startup
|
||||||
|
if any of its servlet that has load-on-startup >=0 fails its own
|
||||||
|
startup.</p>
|
||||||
|
<p>Each child context may override this attribute.</p>
|
||||||
|
<p>If not specified, the default value of <code>false</code> is
|
||||||
|
used.</p>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">name</code></strong></td><td>
|
||||||
|
<p>Usually the network name of this virtual host, as registered in your
|
||||||
|
<em>Domain Name Service</em> server. Regardless of the case used to
|
||||||
|
specify the host name, Tomcat will convert it to lower case internally.
|
||||||
|
One of the Hosts nested within an <a href="engine.html">Engine</a> MUST
|
||||||
|
have a name that matches the <code>defaultHost</code> setting for that
|
||||||
|
Engine. See <a href="#Host_Name_Aliases">Host Name Aliases</a> for
|
||||||
|
information on how to assign more than one network name to the same
|
||||||
|
virtual host.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">startStopThreads</code></td><td>
|
||||||
|
<p>The number of threads this <strong>Host</strong> will use to start
|
||||||
|
child <a href="context.html">Context</a> elements in parallel. The same
|
||||||
|
thread pool will be used to deploy new
|
||||||
|
<a href="context.html">Context</a>s if automatic deployment is being
|
||||||
|
used. The special value of 0 will result in the value of
|
||||||
|
<code>Runtime.getRuntime().availableProcessors()</code> being used.
|
||||||
|
Negative values will result in
|
||||||
|
<code>Runtime.getRuntime().availableProcessors() + value</code> being
|
||||||
|
used unless this is less than 1 in which case 1 thread will be used. If
|
||||||
|
not specified, the default value of 1 will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">undeployOldVersions</code></td><td>
|
||||||
|
<p>This flag determines if Tomcat, as part of the auto deployment
|
||||||
|
process, will check for old, unused versions of web applications
|
||||||
|
deployed using parallel deployment and, if any are found, remove them.
|
||||||
|
This flag only applies if <code>autoDeploy</code> is true. If not
|
||||||
|
specified the default value of false will be used.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Standard_Implementation">Standard Implementation</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The standard implementation of <strong>Host</strong> is
|
||||||
|
<strong>org.apache.catalina.core.StandardHost</strong>.
|
||||||
|
It supports the following additional attributes (in addition to the
|
||||||
|
common attributes listed above):</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">copyXML</code></td><td>
|
||||||
|
<p>Set to <code>true</code> if you want a context XML descriptor
|
||||||
|
embedded inside the application (located at
|
||||||
|
<code>/META-INF/context.xml</code>) to be copied to <code>xmlBase</code>
|
||||||
|
when the application is deployed. On subsequent starts, the copied
|
||||||
|
context XML descriptor will be used in preference to any context XML
|
||||||
|
descriptor embedded inside the application even if the descriptor
|
||||||
|
embedded inside the application is more recent. The flag's value
|
||||||
|
defaults to <code>false</code>. Note if <strong>deployXML</strong>
|
||||||
|
is <code>false</code>, this attribute will have no effect.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">deployXML</code></td><td>
|
||||||
|
<p>Set to <code>false</code> if you want to disable parsing the context
|
||||||
|
XML descriptor embedded inside the application (located at
|
||||||
|
<code>/META-INF/context.xml</code>). Security conscious environments
|
||||||
|
should set this to <code>false</code> to prevent applications from
|
||||||
|
interacting with the container's configuration. The administrator will
|
||||||
|
then be responsible for providing an external context configuration
|
||||||
|
file, and putting it in the location defined by the
|
||||||
|
<strong>xmlBase</strong> attribute. If this flag is <code>false</code>,
|
||||||
|
a descriptor is located at <code>/META-INF/context.xml</code> and no
|
||||||
|
descriptor is present in <strong>xmlBase</strong> then the context will
|
||||||
|
fail to start in case the descriptor contains necessary configuration
|
||||||
|
for secure deployment (such as a RemoteAddrValve) which should not be
|
||||||
|
ignored. The flag's value defaults to <code>true</code> unless a
|
||||||
|
security manager is enabled when the default is <code>false</code>.
|
||||||
|
When running under a security manager this may be enabled on a per web
|
||||||
|
application basis by granting the
|
||||||
|
<code>org.apache.catalina.security.DeployXmlPermission</code> to the web
|
||||||
|
application. The Manager and Host Manager applications are granted this
|
||||||
|
permission by default so that they continue to work when running under a
|
||||||
|
security manager.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">errorReportValveClass</code></td><td>
|
||||||
|
<p>Java class name of the error reporting valve which will be used
|
||||||
|
by this Host. The responsibility of this valve is to output error
|
||||||
|
reports. Setting this property allows to customize the look of the
|
||||||
|
error pages which will be generated by Tomcat. This class must
|
||||||
|
implement the
|
||||||
|
<code>org.apache.catalina.Valve</code> interface. If none is specified,
|
||||||
|
the value <code>org.apache.catalina.valves.ErrorReportValve</code>
|
||||||
|
will be used by default.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">unpackWARs</code></td><td>
|
||||||
|
<p>Set to <code>true</code> if you want web applications that are
|
||||||
|
placed in the <code>appBase</code> directory as web application
|
||||||
|
archive (WAR) files to be unpacked into a corresponding disk directory
|
||||||
|
structure, <code>false</code> to run such web applications directly
|
||||||
|
from a WAR file. See
|
||||||
|
<a href="#Automatic_Application_Deployment">Automatic Application
|
||||||
|
Deployment</a> for more information.</p>
|
||||||
|
<p>Note: If Tomcat expands the WAR file then it will add a file
|
||||||
|
(<code>/META-INF/war-tracking</code>) to the unpacked directory
|
||||||
|
structure which it uses to detect changes in the WAR file while Tomcat
|
||||||
|
is not running. Any such change will trigger the deletion of the
|
||||||
|
expanded directory and the deployment of the updated WAR file when
|
||||||
|
Tomcat next starts.</p>
|
||||||
|
<p>Note: Running with this option set to <code>false</code> will incur
|
||||||
|
a performance penalty. To avoid a significant performance penalty, the
|
||||||
|
web application should be configured such that class scanning for
|
||||||
|
Servlet 3.0+ pluggability features is not required. Users may also wish
|
||||||
|
to consider the <strong>ExtractingRoot</strong>
|
||||||
|
<a href="resources.html">Resources</a> implementation.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">workDir</code></td><td>
|
||||||
|
<p>Pathname to a scratch directory to be used by applications for
|
||||||
|
this Host. Each application will have its own sub directory with
|
||||||
|
temporary read-write use. Configuring a Context workDir will override
|
||||||
|
use of the Host workDir configuration. This directory will be made
|
||||||
|
visible to servlets in the web application by a servlet context
|
||||||
|
attribute (of type <code>java.io.File</code>) named
|
||||||
|
<code>javax.servlet.context.tempdir</code> as described in the
|
||||||
|
Servlet Specification. If not specified, a suitable directory
|
||||||
|
underneath <code>$CATALINA_BASE/work</code> will be provided.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
</div><h3 id="Nested_Components">Nested Components</h3><div class="text">
|
||||||
|
|
||||||
|
<p>You can nest one or more <a href="context.html">Context</a> elements
|
||||||
|
inside this <strong>Host</strong> element, each representing a different web
|
||||||
|
application associated with this virtual host.</p>
|
||||||
|
|
||||||
|
<p>You can nest at most one instance of the following utility components
|
||||||
|
by nesting a corresponding element inside your <strong>Host</strong>
|
||||||
|
element:</p>
|
||||||
|
<ul>
|
||||||
|
<li><a href="realm.html"><strong>Realm</strong></a> -
|
||||||
|
Configure a realm that will allow its
|
||||||
|
database of users, and their associated roles, to be shared across all
|
||||||
|
<a href="context.html">Contexts</a> nested inside this Host (unless
|
||||||
|
overridden by a <a href="realm.html">Realm</a> configuration
|
||||||
|
at a lower level).</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Special_Features">Special Features</h3><div class="text">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Logging">Logging</h4><div class="text">
|
||||||
|
|
||||||
|
<p>A host is associated with the
|
||||||
|
<code>org.apache.catalina.core.ContainerBase.[engine_name].[host_name]</code>
|
||||||
|
log category. Note that the brackets are part of the name,
|
||||||
|
don't omit them.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Access_Logs">Access Logs</h4><div class="text">
|
||||||
|
|
||||||
|
<p>When you run a web server, one of the output files normally generated
|
||||||
|
is an <em>access log</em>, which generates one line of information for
|
||||||
|
each request processed by the server, in a standard format. Catalina
|
||||||
|
includes an optional <a href="valve.html">Valve</a> implementation that
|
||||||
|
can create access logs in the same standard format created by web servers,
|
||||||
|
or in any number of custom formats.</p>
|
||||||
|
|
||||||
|
<p>You can ask Catalina to create an access log for all requests
|
||||||
|
processed by an <a href="engine.html">Engine</a>,
|
||||||
|
<a href="host.html">Host</a>, or <a href="context.html">Context</a>
|
||||||
|
by nesting a <a href="valve.html">Valve</a> element like this:</p>
|
||||||
|
|
||||||
|
<div class="codeBox"><pre><code><Host name="localhost" ...>
|
||||||
|
...
|
||||||
|
<Valve className="org.apache.catalina.valves.AccessLogValve"
|
||||||
|
prefix="localhost_access_log" suffix=".txt"
|
||||||
|
pattern="common"/>
|
||||||
|
...
|
||||||
|
</Host></code></pre></div>
|
||||||
|
|
||||||
|
<p>See <a href="valve.html#Access_Logging">Access Logging Valves</a>
|
||||||
|
for more information on the configuration attributes that are
|
||||||
|
supported.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Automatic_Application_Deployment">Automatic Application Deployment</h4><div class="text">
|
||||||
|
|
||||||
|
<p>If you are using the standard <strong>Host</strong> implementation with
|
||||||
|
default settings then applications in the <em>appBase</em> or with context
|
||||||
|
files in the <em>configBase</em> are automatically deployed when Tomcat
|
||||||
|
starts (the <code>deployOnStartup</code> property defaults to
|
||||||
|
<code>true</code>) and reloaded or redeployed (as appropriate) when a change
|
||||||
|
is detected while Tomcat is running (the <code>autoDeploy</code> attribute
|
||||||
|
also defaults to <code>true</code>).</p>
|
||||||
|
|
||||||
|
<p><code>deployOnStartup</code> and <code>autoDeploy</code> trigger
|
||||||
|
execution of exactly the same code so the behaviour is very similar.
|
||||||
|
However, there is one key difference. When Tomcat starts it has no knowledge
|
||||||
|
of which files are the same, which have been changed and which are new. It
|
||||||
|
therefore treats all files as new. While Tomcat is running, it can
|
||||||
|
differentiate between unchanged, modified and new files. This leads to some
|
||||||
|
differences in behaviour between files being modified while Tomcat is
|
||||||
|
running and files being modified while Tomcat is stopped.</p>
|
||||||
|
|
||||||
|
<p>When you use automatic deployment, related files (a web application may
|
||||||
|
have a context.xml file, a WAR and a directory) that exist in the
|
||||||
|
<strong>Host</strong>'s <em>appBase</em> and/or <em>configBase</em>
|
||||||
|
must conform to the expected <a href="context.html#Naming">naming
|
||||||
|
convention</a>. In short, this means files for the same web application must
|
||||||
|
share the same <em>base name</em>.</p>
|
||||||
|
|
||||||
|
<p>The automatic deployment process identifies new and/or modified web
|
||||||
|
applications using the following search order:</p>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li>Web applications with a context.xml file located in the Host's
|
||||||
|
<em>configBase</em>.</li>
|
||||||
|
<li>Web applications with a WAR file located in the Host's
|
||||||
|
<em>appBase</em> that have not already been identified during the scan for
|
||||||
|
context.xml files.</li>
|
||||||
|
<li>Web applications with a directory located in the Host's
|
||||||
|
<em>appBase</em> that have not already been identified during the scans
|
||||||
|
for context.xml and/or WAR files.</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<p>When <code>autoDeploy</code> is <code>true</code>, the automatic
|
||||||
|
deployment process will monitor the deployed web applications for changes.
|
||||||
|
Depending on exactly what changes, the web application will either be
|
||||||
|
re-deployed or reloaded. Re-deployment involves the creation of a new web
|
||||||
|
application and, if using the standard session manager, user sessions will
|
||||||
|
not be retained. Reloading uses the existing web application but re-parses
|
||||||
|
the web.xml and reloads any classes. If using the standard session manager,
|
||||||
|
user sessions will be persisted.</p>
|
||||||
|
|
||||||
|
<p>Users may add to the files that the automatic deployment process monitors
|
||||||
|
for reloading (i.e. any change to one of these files triggers a reload of
|
||||||
|
the web application) by adding a <em>WatchedResources</em> element to the
|
||||||
|
context.xml file. See the
|
||||||
|
<a href="context.html#Nested_Components">Context</a> documentation for
|
||||||
|
further details.</p>
|
||||||
|
|
||||||
|
<p>When using automatic deployment, the <code>docBase</code> defined by
|
||||||
|
an XML <a href="context.html">Context</a> file should be outside of the
|
||||||
|
<code>appBase</code> directory. If this is not the case, difficulties
|
||||||
|
may be experienced deploying the web application or the application may
|
||||||
|
be deployed twice. The <code>deployIgnore</code> attribute can be used
|
||||||
|
to avoid this situation.</p>
|
||||||
|
|
||||||
|
<p>Note that if you are defining contexts explicitly in server.xml, you
|
||||||
|
should probably turn off automatic application deployment or specify
|
||||||
|
<code>deployIgnore</code> carefully. Otherwise, the web applications
|
||||||
|
will each be deployed twice, and that may cause problems for the
|
||||||
|
applications.</p>
|
||||||
|
|
||||||
|
<p>There are many possible combinations of settings, new files, changed
|
||||||
|
files and deleted files. A separate page describes the
|
||||||
|
<a href="automatic-deployment.html">expected behaviour of the automatic
|
||||||
|
deployment process</a> in many of these scenarios.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Host_Name_Aliases">Host Name Aliases</h4><div class="text">
|
||||||
|
|
||||||
|
<p>In many server environments, Network Administrators have configured
|
||||||
|
more than one network name (in the <em>Domain Name Service</em> (DNS)
|
||||||
|
server), that resolve to the IP address of the same server. Normally,
|
||||||
|
each such network name would be configured as a separate
|
||||||
|
<strong>Host</strong> element in <code>conf/server.xml</code>, each
|
||||||
|
with its own set of web applications.</p>
|
||||||
|
|
||||||
|
<p>However, in some circumstances, it is desirable that two or more
|
||||||
|
network names should resolve to the <strong>same</strong> virtual host,
|
||||||
|
running the same set of applications. A common use case for this
|
||||||
|
scenario is a corporate web site, where it is desirable that users
|
||||||
|
be able to utilize either <code>www.mycompany.com</code> or
|
||||||
|
<code>company.com</code> to access exactly the same content and
|
||||||
|
applications.</p>
|
||||||
|
|
||||||
|
<p>This is accomplished by utilizing one or more <strong>Alias</strong>
|
||||||
|
elements nested inside your <strong>Host</strong> element. For
|
||||||
|
example:</p>
|
||||||
|
<div class="codeBox"><pre><code><Host name="www.mycompany.com" ...>
|
||||||
|
...
|
||||||
|
<Alias>mycompany.com</Alias>
|
||||||
|
...
|
||||||
|
</Host></code></pre></div>
|
||||||
|
|
||||||
|
<p>In order for this strategy to be effective, all of the network names
|
||||||
|
involved must be registered in your DNS server to resolve to the
|
||||||
|
same computer that is running this instance of Catalina.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Lifecycle_Listeners">Lifecycle Listeners</h4><div class="text">
|
||||||
|
|
||||||
|
<p>If you have implemented a Java object that needs to know when this
|
||||||
|
<strong>Host</strong> is started or stopped, you can declare it by
|
||||||
|
nesting a <strong>Listener</strong> element inside this element. The
|
||||||
|
class name you specify must implement the
|
||||||
|
<code>org.apache.catalina.LifecycleListener</code> interface, and
|
||||||
|
it will be notified about the occurrence of the corresponding
|
||||||
|
lifecycle events. Configuration of such a listener looks like this:</p>
|
||||||
|
|
||||||
|
<div class="codeBox"><pre><code><Host name="localhost" ...>
|
||||||
|
...
|
||||||
|
<Listener className="com.mycompany.mypackage.MyListener" ... >
|
||||||
|
...
|
||||||
|
</Host></code></pre></div>
|
||||||
|
|
||||||
|
<p>Note that a Listener can have any number of additional properties
|
||||||
|
that may be configured from this element. Attribute names are matched
|
||||||
|
to corresponding JavaBean property names using the standard property
|
||||||
|
method naming patterns.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Request_Filters">Request Filters</h4><div class="text">
|
||||||
|
|
||||||
|
<p>You can ask Catalina to check the IP address, or host name, on every
|
||||||
|
incoming request directed to the surrounding
|
||||||
|
<a href="engine.html">Engine</a>, <a href="host.html">Host</a>, or
|
||||||
|
<a href="context.html">Context</a> element. The remote address or name
|
||||||
|
will be checked against configured "accept" and/or "deny"
|
||||||
|
filters, which are defined using <code>java.util.regex</code> Regular
|
||||||
|
Expression syntax. Requests that come from locations that are
|
||||||
|
not accepted will be rejected with an HTTP "Forbidden" error.
|
||||||
|
Example filter declarations:</p>
|
||||||
|
|
||||||
|
<div class="codeBox"><pre><code><Host name="localhost" ...>
|
||||||
|
...
|
||||||
|
<Valve className="org.apache.catalina.valves.RemoteHostValve"
|
||||||
|
allow=".*\.mycompany\.com|www\.yourcompany\.com"/>
|
||||||
|
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
|
||||||
|
deny="192\.168\.1\.\d+"/>
|
||||||
|
...
|
||||||
|
</Host></code></pre></div>
|
||||||
|
|
||||||
|
<p>See <a href="valve.html#Remote_Address_Filter">Remote Address Filter</a>
|
||||||
|
and <a href="valve.html#Remote_Host_Filter">Remote Host Filter</a> for
|
||||||
|
more information about the configuration options that are supported.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Single_Sign_On">Single Sign On</h4><div class="text">
|
||||||
|
|
||||||
|
<p>In many environments, but particularly in portal environments, it
|
||||||
|
is desirable to have a user challenged to authenticate themselves only
|
||||||
|
once over a set of web applications deployed on a particular virtual
|
||||||
|
host. This can be accomplished by nesting an element like this inside
|
||||||
|
the Host element for this virtual host:</p>
|
||||||
|
|
||||||
|
<div class="codeBox"><pre><code><Host name="localhost" ...>
|
||||||
|
...
|
||||||
|
<Valve className="org.apache.catalina.authenticator.SingleSignOn"/>
|
||||||
|
...
|
||||||
|
</Host></code></pre></div>
|
||||||
|
|
||||||
|
<p>The Single Sign On facility operates according to the following rules:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>All web applications configured for this virtual host must share the
|
||||||
|
same <a href="realm.html">Realm</a>. In practice, that means you can
|
||||||
|
nest the Realm element inside this Host element (or the surrounding
|
||||||
|
<a href="engine.html">Engine</a> element), but not inside a
|
||||||
|
<a href="context.html">Context</a> element for one of the involved
|
||||||
|
web applications.</li>
|
||||||
|
<li>As long as the user accesses only unprotected resources in any of the
|
||||||
|
web applications on this virtual host, they will not be challenged
|
||||||
|
to authenticate themselves.</li>
|
||||||
|
<li>As soon as the user accesses a protected resource in
|
||||||
|
<strong>any</strong> web application associated with this virtual
|
||||||
|
host, the user will be challenged to authenticate himself or herself,
|
||||||
|
using the login method defined for the web application currently
|
||||||
|
being accessed.</li>
|
||||||
|
<li>Once authenticated, the roles associated with this user will be
|
||||||
|
utilized for access control decisions across <strong>all</strong>
|
||||||
|
of the associated web applications, without challenging the user
|
||||||
|
to authenticate themselves to each application individually.</li>
|
||||||
|
<li>As soon as the user logs out of one web application (for example,
|
||||||
|
by invalidating the corresponding session if form
|
||||||
|
based login is used), the user's sessions in <strong>all</strong>
|
||||||
|
web applications will be invalidated. Any subsequent attempt to
|
||||||
|
access a protected resource in any application will require the
|
||||||
|
user to authenticate himself or herself again.</li>
|
||||||
|
<li>The Single Sign On feature utilizes HTTP cookies to transmit a token
|
||||||
|
that associates each request with the saved user identity, so it can
|
||||||
|
only be utilized in client environments that support cookies.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="User_Web_Applications">User Web Applications</h4><div class="text">
|
||||||
|
|
||||||
|
<p>Many web servers can automatically map a request URI starting with
|
||||||
|
a tilde character ("~") and a username to a directory (commonly named
|
||||||
|
<code>public_html</code>) in that user's home directory on the server.
|
||||||
|
You can accomplish the same thing in Catalina by using a special
|
||||||
|
<strong>Listener</strong> element like this (on a Unix system that
|
||||||
|
uses the <code>/etc/passwd</code> file to identify valid users):</p>
|
||||||
|
|
||||||
|
<div class="codeBox"><pre><code><Host name="localhost" ...>
|
||||||
|
...
|
||||||
|
<Listener className="org.apache.catalina.startup.UserConfig"
|
||||||
|
directoryName="public_html"
|
||||||
|
userClass="org.apache.catalina.startup.PasswdUserDatabase"/>
|
||||||
|
...
|
||||||
|
</Host></code></pre></div>
|
||||||
|
|
||||||
|
<p>On a server where <code>/etc/passwd</code> is not in use, you can
|
||||||
|
request Catalina to consider all directories found in a specified base
|
||||||
|
directory (such as <code>c:\Homes</code> in this example) to be
|
||||||
|
considered "user home" directories for the purposes of this directive:</p>
|
||||||
|
|
||||||
|
<div class="codeBox"><pre><code><Host name="localhost" ...>
|
||||||
|
...
|
||||||
|
<Listener className="org.apache.catalina.startup.UserConfig"
|
||||||
|
directoryName="public_html"
|
||||||
|
homeBase="c:\Homes"
|
||||||
|
userClass="org.apache.catalina.startup.HomesUserDatabase"/>
|
||||||
|
...
|
||||||
|
</Host></code></pre></div>
|
||||||
|
|
||||||
|
<p>If a user home directory has been set up for a user named
|
||||||
|
<code>craigmcc</code>, then its contents will be visible from a
|
||||||
|
client browser by making a request to a URL like:</p>
|
||||||
|
|
||||||
|
<div class="codeBox"><pre><code>http://www.mycompany.com:8080/~craigmcc</code></pre></div>
|
||||||
|
|
||||||
|
<p>Successful use of this feature requires recognition of the following
|
||||||
|
considerations:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Each user web application will be deployed with characteristics
|
||||||
|
established by the global and host level default context settings.</li>
|
||||||
|
<li>It is legal to include more than one instance of this Listener
|
||||||
|
element. This would only be useful, however, in circumstances
|
||||||
|
where you wanted to configure more than one "homeBase" directory.</li>
|
||||||
|
<li>The operating system username under which Catalina is executed
|
||||||
|
MUST have read access to each user's web application directory,
|
||||||
|
and all of its contents.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,107 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - Overview</title><meta name="author" content="Craig R. McClanahan"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/index">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Overview</h2><h3 id="Overview">Overview</h3><div class="text">
|
||||||
|
|
||||||
|
<p>This manual contains reference information about all of the configuration
|
||||||
|
directives that can be included in a <code>conf/server.xml</code> file to
|
||||||
|
configure the behavior of the Tomcat Servlet/JSP container. It does not
|
||||||
|
attempt to describe which configuration directives should be used to perform
|
||||||
|
specific tasks - for that, see the various <em>HOW-TO</em> documents on the
|
||||||
|
main index page.</p>
|
||||||
|
|
||||||
|
<p>Tomcat configuration files are formatted as schemaless XML; elements and
|
||||||
|
attributes are case-sensitive. Apache Ant-style variable substitution
|
||||||
|
is supported; a system property with the name <code>propname</code> may be
|
||||||
|
used in a configuration file using the syntax <code>${propname}</code>. All
|
||||||
|
system properties are available including those set using the <code>-D</code>
|
||||||
|
syntax, those automatically made available by the JVM and those configured in
|
||||||
|
the <code>$CATALINA_BASE/conf/catalina.properties</code> file.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>The configuration element descriptions are organized into the following
|
||||||
|
major categories:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>Top Level Elements</strong> - <code><Server></code> is the
|
||||||
|
root element of the entire configuration file, while
|
||||||
|
<code><Service></code> represents a group of Connectors that is
|
||||||
|
associated with an Engine.</li>
|
||||||
|
<li><strong>Connectors</strong> - Represent the interface between external
|
||||||
|
clients sending requests to (and receiving responses from) a particular
|
||||||
|
Service.</li>
|
||||||
|
<li><strong>Containers</strong> - Represent components whose function is to
|
||||||
|
process incoming requests, and create the corresponding responses.
|
||||||
|
An Engine handles all requests for a Service, a Host handles all requests
|
||||||
|
for a particular virtual host, and a Context handles all requests for a
|
||||||
|
specific web application.</li>
|
||||||
|
<li><strong>Nested Components</strong> - Represent elements that can be
|
||||||
|
nested inside the element for a Container. Some elements can be nested
|
||||||
|
inside any Container, while others can only be nested inside a
|
||||||
|
Context.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>For each element, the corresponding documentation follows this general
|
||||||
|
outline:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>Introduction</strong> - Overall description of this particular
|
||||||
|
component. There will be a corresponding Java <em>interface</em> (in
|
||||||
|
the <code>org.apache.catalina</code> package) that is implemented by one
|
||||||
|
or more standard implementations.</li>
|
||||||
|
<li><strong>Attributes</strong> - The set of attributes that are legal for
|
||||||
|
this element. Generally, this will be subdivided into <em>Common</em>
|
||||||
|
attributes that are supported by all implementations of the corresponding
|
||||||
|
Java interface, and <em>Standard Implementation</em> attributes that are
|
||||||
|
specific to a particular Java class that implements this interface.
|
||||||
|
The names of required attributes are <strong>bolded</strong>.</li>
|
||||||
|
<li><strong>Nested Components</strong> - Enumerates which of the <em>Nested
|
||||||
|
Components</em> can be legally nested within this element.</li>
|
||||||
|
<li><strong>Special Features</strong> - Describes the configuration of a large
|
||||||
|
variety of special features (specific to each element type) that are
|
||||||
|
supported by the standard implementation of this interface.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,183 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The Jar Scan Filter Component</title><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/jar-scan-filter">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The Jar Scan Filter Component</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Common_Attributes">Common Attributes</a></li><li><a href="#Standard_Implementation">Standard Implementation</a></li></ol></li><li><a href="#Nested_Components">Nested Components</a></li><li><a href="#Special_Features">Special Features</a></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>Jar Scan Filter</strong> element represents the component that
|
||||||
|
filters results from the <a href="jar-scanner.html">Jar Scanner</a> before
|
||||||
|
they are passed back to the application. It is typically used to skip the
|
||||||
|
scanning of JARs that are known not to be relevant to some or all types of
|
||||||
|
scan.</p>
|
||||||
|
|
||||||
|
<p>A Jar Scan Filter element MAY be nested inside a
|
||||||
|
<a href="jar-scanner.html">Jar Scanner</a> component.</p>
|
||||||
|
|
||||||
|
<p>For example you can specify additional jar files when scanning for pluggable
|
||||||
|
features:</p>
|
||||||
|
<div class="codeBox"><pre><code><Context>
|
||||||
|
...
|
||||||
|
<JarScanner>
|
||||||
|
<JarScanFilter
|
||||||
|
pluggabilityScan="${tomcat.util.scan.StandardJarScanFilter.jarsToScan},
|
||||||
|
my_pluggable_feature.jar"/>
|
||||||
|
</JarScanner>
|
||||||
|
...
|
||||||
|
</Context></code></pre></div>
|
||||||
|
|
||||||
|
<p>If a Jar Scan Filter element is not included, a default Jar Scan Filter
|
||||||
|
configuration will be created automatically, which is sufficient for most
|
||||||
|
requirements.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Common_Attributes">Common Attributes</h4><div class="text">
|
||||||
|
|
||||||
|
<p>All implementations of <strong>Jar Scan Filter</strong>
|
||||||
|
support the following attributes:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">className</code></td><td>
|
||||||
|
<p>Java class name of the implementation to use. This class must
|
||||||
|
implement the <code>org.apache.tomcat.JarScanFilter</code> interface.
|
||||||
|
If not specified, the standard value (defined below) will be used.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Standard_Implementation">Standard Implementation</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The standard implementation of <strong>Jar Scan Filter</strong> is
|
||||||
|
<strong>org.apache.tomcat.util.scan.StandardJarScanFilter</strong>.
|
||||||
|
Additional attributes that it supports (in addition to the common attributes
|
||||||
|
listed above) are listed in the table.</p>
|
||||||
|
|
||||||
|
<p>The values for <strong>pluggabilitySkip</strong>,
|
||||||
|
<strong>pluggabilityScan</strong>, <strong>tldSkip</strong>,
|
||||||
|
<strong>tldScan</strong> attributes are lists of file name pattern. The
|
||||||
|
patterns are separated by comma (','). The leading and trailing whitespace
|
||||||
|
characters in a pattern are ignored. The patterns are matched
|
||||||
|
case-sensitively. The following two special characters are supported:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>'*' - means zero or more characters,</li>
|
||||||
|
<li>'?' - means one and only one character.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Note that excluding a JAR from the pluggability scan will prevent a
|
||||||
|
ServletContainerInitializer from being loaded from a web application JAR
|
||||||
|
(i.e. one located in <code>/WEB-INF/lib</code>) but it will not prevent
|
||||||
|
a ServletContainerInitializer from being loaded from the container (Tomcat).
|
||||||
|
To prevent a ServletContainerInitializer provided by container from being
|
||||||
|
loaded, use the <code>containerSciFilter</code> property of the
|
||||||
|
<a href="context.html">Context</a>.</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">pluggabilitySkip</code></td><td>
|
||||||
|
<p>The comma separated list of JAR file name patterns
|
||||||
|
to skip when scanning for pluggable features introduced by Servlet 3.0
|
||||||
|
specification. If not specified, the default is obtained from the
|
||||||
|
<code>tomcat.util.scan.StandardJarScanFilter.jarsToSkip</code> system
|
||||||
|
property.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">pluggabilityScan</code></td><td>
|
||||||
|
<p>The comma separated list of JAR file name patterns
|
||||||
|
to scan when scanning for pluggable features introduced by Servlet 3.0
|
||||||
|
specification. If not specified, the default is obtained from the
|
||||||
|
<code>tomcat.util.scan.StandardJarScanFilter.jarsToScan</code> system
|
||||||
|
property.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">defaultPluggabilityScan</code></td><td>
|
||||||
|
<p>Controls if JARs are scanned or skipped by default when scanning
|
||||||
|
for the pluggable features.
|
||||||
|
If <code>true</code>, a JAR is scanned when its name either matches
|
||||||
|
none of <strong>pluggabilitySkip</strong> patterns or
|
||||||
|
any of <strong>pluggabilityScan</strong> patterns.
|
||||||
|
If <code>false</code>, a JAR is scanned when its name matches
|
||||||
|
any of <strong>pluggabilityScan</strong> patterns and
|
||||||
|
none of <strong>pluggabilitySkip</strong> patterns.
|
||||||
|
If not specified, the default value is <code>true</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">tldSkip</code></td><td>
|
||||||
|
<p>The comma separated list of JAR file name patterns
|
||||||
|
to skip when scanning for tag libraries (TLDs).
|
||||||
|
If not specified, the default is obtained
|
||||||
|
from the <code>tomcat.util.scan.StandardJarScanFilter.jarsToSkip</code>
|
||||||
|
system property.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">tldScan</code></td><td>
|
||||||
|
<p>The comma separated list of JAR file name patterns
|
||||||
|
to scan when scanning for tag libraries (TLDs).
|
||||||
|
If not specified, the default is obtained
|
||||||
|
from the <code>tomcat.util.scan.StandardJarScanFilter.jarsToScan</code>
|
||||||
|
system property.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">defaultTldScan</code></td><td>
|
||||||
|
<p>Controls if JARs are scanned or skipped by default when scanning
|
||||||
|
for TLDs.
|
||||||
|
If <code>true</code>, a JAR is scanned when its name either matches
|
||||||
|
none of <strong>tldSkip</strong> patterns or
|
||||||
|
any of <strong>tldScan</strong> patterns.
|
||||||
|
If <code>false</code>, a JAR is scanned when its name matches
|
||||||
|
any of <strong>tldScan</strong> patterns and
|
||||||
|
none of <strong>tldSkip</strong> patterns.
|
||||||
|
If not specified, the default value is <code>true</code>.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
</div><h3 id="Nested_Components">Nested Components</h3><div class="text">
|
||||||
|
<p>No components may be nested inside a <strong>Jar Scan Filter</strong> element.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Special_Features">Special Features</h3><div class="text">
|
||||||
|
<p>No special features are associated with a <strong>Jar Scan Filter</strong>
|
||||||
|
element.</p>
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,141 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The Jar Scanner Component</title><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/jar-scanner">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The Jar Scanner Component</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Common_Attributes">Common Attributes</a></li><li><a href="#Standard_Implementation">Standard Implementation</a></li></ol></li><li><a href="#Nested_Components">Nested Components</a></li><li><a href="#Special_Features">Special Features</a></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>Jar Scanner</strong> element represents the component that is
|
||||||
|
used to scan the web application for JAR files and directories of class files.
|
||||||
|
It is typically used during web application start to identify configuration
|
||||||
|
files such as TLDs or web-fragment.xml files that must be processed as part of
|
||||||
|
the web application initialisation.</p>
|
||||||
|
|
||||||
|
<p>A Jar Scanner element MAY be nested inside a
|
||||||
|
<a href="context.html">Context</a> component.</p>
|
||||||
|
|
||||||
|
<p>For example you can include the bootstrap classpath when scanning for jar
|
||||||
|
files:</p>
|
||||||
|
<div class="codeBox"><pre><code><Context>
|
||||||
|
...
|
||||||
|
<JarScanner scanBootstrapClassPath="true"/>
|
||||||
|
...
|
||||||
|
</Context></code></pre></div>
|
||||||
|
|
||||||
|
<p>If a Jar Scanner element is not included, a default Jar Scanner configuration
|
||||||
|
will be created automatically, which is sufficient for most requirements.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Common_Attributes">Common Attributes</h4><div class="text">
|
||||||
|
|
||||||
|
<p>All implementations of <strong>Jar Scanner</strong>
|
||||||
|
support the following attributes:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">className</code></td><td>
|
||||||
|
<p>Java class name of the implementation to use. This class must
|
||||||
|
implement the <code>org.apache.tomcat.JarScanner</code> interface.
|
||||||
|
If not specified, the standard value (defined below) will be used.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Standard_Implementation">Standard Implementation</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The standard implementation of <strong>Jar Scanner</strong> is
|
||||||
|
<strong>org.apache.tomcat.util.scan.StandardJarScanner</strong>.
|
||||||
|
It supports the following additional attributes (in addition to the
|
||||||
|
common attributes listed above):</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">scanAllDirectories</code></td><td>
|
||||||
|
<p>If <code>true</code>, any directories found on the classpath will be
|
||||||
|
checked to see if they are expanded JAR files.
|
||||||
|
The default is <code>false</code>.</p>
|
||||||
|
<p>Tomcat determines if a directory is an expanded JAR file by looking
|
||||||
|
for a META-INF sub-directory. Only if the META-INF sub-directory exists,
|
||||||
|
the directory is assumed to be an expanded JAR file. Note that for scans
|
||||||
|
for matches to <code>@HandlesTypes</code> annotations, all directories
|
||||||
|
will be scanned irrespective of the presence or not of a META-INF
|
||||||
|
sub-directory.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">scanAllFiles</code></td><td>
|
||||||
|
<p>If <code>true</code>, any files found on the classpath will be checked
|
||||||
|
to see if they are Jar files rather than relying on the file extension
|
||||||
|
being <code>.jar</code>. The default is <code>false</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">scanClassPath</code></td><td>
|
||||||
|
<p>If <code>true</code>, the full web application classpath, including
|
||||||
|
the shared and common classloaders and the system classpath (but not the
|
||||||
|
bootstrap classpath) will be scanned for Jar files in addition to the web
|
||||||
|
application. The default is <code>true</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">scanBootstrapClassPath</code></td><td>
|
||||||
|
<p>If <strong>scanClassPath</strong> is <code>true</code> and this is
|
||||||
|
<code>true</code> the bootstrap classpath will also be scanned for Jar
|
||||||
|
files. The default is <code>false</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">scanManifest</code></td><td>
|
||||||
|
<p>If <code>true</code>, the Manifest files of any JARs found will be
|
||||||
|
scanned for additional class path entries and those entries will be added
|
||||||
|
to the URLs to scan. The default is <code>true</code>.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
</div><h3 id="Nested_Components">Nested Components</h3><div class="text">
|
||||||
|
<p>Only a <a href="jar-scan-filter.html">Jar Scan Filter</a> may be nested
|
||||||
|
inside a <strong>Jar Scanner</strong> element.</p>
|
||||||
|
</div><h3 id="Special_Features">Special Features</h3><div class="text">
|
||||||
|
<p>No special features are associated with a <strong>Jar Scanner</strong>
|
||||||
|
element.</p>
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,556 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The LifeCycle Listener Component</title><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/listeners">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The LifeCycle Listener Component</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Common_Attributes">Common Attributes</a></li></ol></li><li><a href="#Nested_Components">Nested Components</a></li><li><a href="#Standard_Implementations">Standard Implementations</a><ol><li><a href="#APR_Lifecycle_Listener_-_org.apache.catalina.core.AprLifecycleListener">APR Lifecycle Listener - org.apache.catalina.core.AprLifecycleListener</a></li><li><a href="#Global_Resources_Lifecycle_Listener_-_org.apache.catalina.mbeans.GlobalResourcesLifecycleListener">Global Resources Lifecycle Listener - org.apache.catalina.mbeans.GlobalResourcesLifecycleListener</a></li><li><a href="#JRE_Memory_Leak_Prevention_Listener_-_org.apache.catalina.core.JreMemoryLeakPreventionListener">JRE Memory Leak Prevention Listener - org.apache.catalina.core.JreMemoryLeakPreventionListener</a><ol><li><a href="#JreMemoryLeakPreventionListener_Examples">JreMemoryLeakPreventionListener Examples</a></li></ol></li><li><a href="#Security_Lifecycle_Listener_-_org.apache.catalina.security.SecurityListener">Security Lifecycle Listener - org.apache.catalina.security.SecurityListener</a></li><li><a href="#StoreConfig_Lifecycle_Listener_-_org.apache.catalina.storeconfig.StoreConfigLifecycleListener">StoreConfig Lifecycle Listener - org.apache.catalina.storeconfig.StoreConfigLifecycleListener</a></li><li><a href="#ThreadLocal_Leak_Prevention_Listener_-_org.apache.catalina.core.ThreadLocalLeakPreventionListener">ThreadLocal Leak Prevention Listener - org.apache.catalina.core.ThreadLocalLeakPreventionListener</a></li><li><a href="#UserConfig_-_org.apache.catalina.startup.UserConfig">UserConfig - org.apache.catalina.startup.UserConfig</a></li><li><a href="#Version_Logging_Lifecycle_Listener_-_org.apache.catalina.startup.VersionLoggerListener">Version Logging Lifecycle Listener - org.apache.catalina.startup.VersionLoggerListener</a></li></ol></li><li><a href="#Additional_Implementations">Additional Implementations</a><ol><li><a href="#JMX_Remote_Lifecycle_Listener_-_org.apache.catalina.mbeans.JmxRemoteLifecycleListener">JMX Remote Lifecycle Listener - org.apache.catalina.mbeans.JmxRemoteLifecycleListener</a></li></ol></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
|
||||||
|
<p>A <strong>Listener</strong> element defines a component that performs
|
||||||
|
actions when specific events occur, usually Tomcat starting or Tomcat
|
||||||
|
stopping.</p>
|
||||||
|
|
||||||
|
<p>Listeners may be nested inside a <a href="server.html">Server</a>,
|
||||||
|
<a href="engine.html">Engine</a>, <a href="host.html">Host</a> or
|
||||||
|
<a href="context.html">Context</a>. Some Listeners are only intended to be
|
||||||
|
nested inside specific elements. These constraints are noted in the
|
||||||
|
documentation below.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Common_Attributes">Common Attributes</h4><div class="text">
|
||||||
|
|
||||||
|
<p>All implementations of <strong>Listener</strong>
|
||||||
|
support the following attributes:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
|
||||||
|
<p>Java class name of the implementation to use. This class must
|
||||||
|
implement the <code>org.apache.catalina.LifecycleListener</code>
|
||||||
|
interface.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><h3 id="Nested_Components">Nested Components</h3><div class="text">
|
||||||
|
|
||||||
|
<p>No element may be nested inside a <strong>Listener</strong>.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Standard_Implementations">Standard Implementations</h3><div class="text">
|
||||||
|
|
||||||
|
<p>Unlike most Catalina components, there are several standard
|
||||||
|
<strong>Listener</strong> implementations available. As a result,
|
||||||
|
the <code>className</code> attribute MUST be used to select the
|
||||||
|
implementation you wish to use.</p>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="APR_Lifecycle_Listener_-_org.apache.catalina.core.AprLifecycleListener">APR Lifecycle Listener - org.apache.catalina.core.AprLifecycleListener</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>APR Lifecycle Listener</strong> checks for the presence of
|
||||||
|
the APR/native library and loads the library if it is present. For more
|
||||||
|
information see the <a href="../apr.html">APR/native guide</a>.</p>
|
||||||
|
|
||||||
|
<p>This listener must only be nested within <a href="server.html">Server</a>
|
||||||
|
elements.</p>
|
||||||
|
|
||||||
|
<p>The following additional attributes are supported by the <strong>APR
|
||||||
|
Lifecycle Listener</strong>:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">SSLEngine</code></td><td>
|
||||||
|
<p>Name of the SSLEngine to use. <code>off</code>: do not use SSL,
|
||||||
|
<code>on</code>: use SSL but no specific ENGINE.</p>
|
||||||
|
<p>The default value is <b>on</b>. This initializes the
|
||||||
|
native SSL engine, which must be enabled in the APR/native connector by
|
||||||
|
the use of the <code>SSLEnabled</code> attribute.</p>
|
||||||
|
<p>See the <a href="http://www.openssl.org/">Official OpenSSL website</a>
|
||||||
|
for more details on supported SSL hardware engines and manufacturers.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">SSLRandomSeed</code></td><td>
|
||||||
|
<p>Entropy source used to seed the SSLEngine's PRNG. The default value
|
||||||
|
is <code>builtin</code>. On development systems, you may want to set
|
||||||
|
this to <code>/dev/urandom</code> to allow quicker start times.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">FIPSMode</code></td><td>
|
||||||
|
<p>Set to <code>on</code> to request that OpenSSL be in FIPS mode
|
||||||
|
(if OpenSSL is already in FIPS mode, it will remain in FIPS mode).
|
||||||
|
Set to <code>enter</code> to force OpenSSL to enter FIPS mode (an error
|
||||||
|
will occur if OpenSSL is already in FIPS mode).
|
||||||
|
Set to <code>require</code> to require that OpenSSL <i>already</i> be
|
||||||
|
in FIPS mode (an error will occur if OpenSSL is not already in FIPS
|
||||||
|
mode).</p>
|
||||||
|
<p>FIPS mode <em>requires you to have a FIPS-capable OpenSSL library which
|
||||||
|
you must build yourself</em>.
|
||||||
|
If this attribute is set to any of the above values, the <b>SSLEngine</b>
|
||||||
|
must be enabled as well.</p>
|
||||||
|
<p>The default value is <code>off</code>.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Global_Resources_Lifecycle_Listener_-_org.apache.catalina.mbeans.GlobalResourcesLifecycleListener">Global Resources Lifecycle Listener - org.apache.catalina.mbeans.GlobalResourcesLifecycleListener</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>Global Resources Lifecycle Listener</strong> initializes the
|
||||||
|
Global JNDI resources defined in server.xml as part of the <a href="globalresources.html">Global Resources</a> element. Without this
|
||||||
|
listener, none of the Global Resources will be available.</p>
|
||||||
|
|
||||||
|
<p>This listener must only be nested within <a href="server.html">Server</a>
|
||||||
|
elements.</p>
|
||||||
|
|
||||||
|
<p>No additional attributes are supported by the <strong>Global Resources
|
||||||
|
Lifecycle Listener</strong>.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="JRE_Memory_Leak_Prevention_Listener_-_org.apache.catalina.core.JreMemoryLeakPreventionListener">JRE Memory Leak Prevention Listener - org.apache.catalina.core.JreMemoryLeakPreventionListener</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>JRE Memory Leak Prevention Listener</strong> provides
|
||||||
|
work-arounds for known places where the Java Runtime environment uses
|
||||||
|
the context class loader to load a singleton as this will cause a memory
|
||||||
|
leak if a web application class loader happens to be the context class
|
||||||
|
loader at the time. The work-around is to initialise these singletons when
|
||||||
|
this listener starts as Tomcat's common class loader is the context class
|
||||||
|
loader at that time. It also provides work-arounds for known issues that
|
||||||
|
can result in locked JAR files.</p>
|
||||||
|
|
||||||
|
<p>This listener must only be nested within <a href="server.html">Server</a>
|
||||||
|
elements.</p>
|
||||||
|
|
||||||
|
<p>The following additional attributes are supported by the <strong>JRE
|
||||||
|
Memory Leak Prevention Listener</strong>:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">appContextProtection</code></td><td>
|
||||||
|
<p>Enables protection so that calls to
|
||||||
|
<code>sun.awt.AppContext.getAppContext()</code> triggered by a web
|
||||||
|
application do not result in a memory leak. Note that enabling this
|
||||||
|
protection will trigger a requirement for a graphical environment unless
|
||||||
|
Java is started in head-less mode. The default is <code>false</code>.
|
||||||
|
This protection is disabled if running on Java 8 onwards since the leak
|
||||||
|
has been fixed for Java 8 onwards.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">AWTThreadProtection</code></td><td>
|
||||||
|
<p>Enables protection so that calls to
|
||||||
|
<code>java.awt.Toolkit.getDefaultToolkit()</code> triggered by a web
|
||||||
|
application do not result in a memory leak.
|
||||||
|
Defaults to <code>false</code> because an AWT thread is launched. This
|
||||||
|
protection is disabled if running on Java 9 onwards since the leak has
|
||||||
|
been fixed for Java 9 onwards.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">classesToInitialize</code></td><td>
|
||||||
|
<p>List of comma-separated fully qualified class names to load and initialize
|
||||||
|
during the startup of this Listener. This allows to pre-load classes that are
|
||||||
|
known to provoke classloader leaks if they are loaded during a request
|
||||||
|
processing. Non-JRE classes may be referenced, like
|
||||||
|
<code>oracle.jdbc.driver.OracleTimeoutThreadPerVM</code>.
|
||||||
|
The default value is empty, but specific JRE classes are loaded by other leak
|
||||||
|
protection features managed by other attributes of this Listener.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">driverManagerProtection</code></td><td>
|
||||||
|
<p>The first use of <code>java.sql.DriverManager</code> will trigger the
|
||||||
|
loading of JDBC Driver in the current class loader. The web
|
||||||
|
application level memory leak protection can take care of this in most
|
||||||
|
cases but triggering the loading here has fewer side-effects. The
|
||||||
|
default is <code>true</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">forkJoinCommonPoolProtection</code></td><td>
|
||||||
|
<p>Enables protection so the threads created for
|
||||||
|
<code>ForkJoinPool.commonPool()</code> do not result in a memory leak.
|
||||||
|
The protection is enabled by setting the
|
||||||
|
<code>java.util.concurrent.ForkJoinPool.common.threadFactory</code>
|
||||||
|
system property. If this property is set when Tomcat starts, Tomcat will
|
||||||
|
not over-ride it even if this protection is explicitly enabled. The
|
||||||
|
default is <code>true</code>. This protection is only used when running
|
||||||
|
on Java 8. The common pool does not exist in earlier versions and the
|
||||||
|
leak has been fixed for Java 9 onwards.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">gcDaemonProtection</code></td><td>
|
||||||
|
<p>Enables protection so that calls to
|
||||||
|
<code>sun.misc.GC.requestLatency(long)</code> triggered by a web
|
||||||
|
application do not result in a memory leak. Use of RMI is likely to
|
||||||
|
trigger a call to this method. A side effect of enabling this protection
|
||||||
|
is the creation of a thread named "GC Daemon". The protection uses
|
||||||
|
reflection to access internal Sun classes and may generate errors on
|
||||||
|
startup on non-Sun JVMs. The default is <code>true</code>. This
|
||||||
|
protection is disabled if running on Java 9 onwards since the leak has
|
||||||
|
been fixed for Java 9 onwards.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">ldapPoolProtection</code></td><td>
|
||||||
|
<p>Enables protection so that the PoolCleaner thread started by
|
||||||
|
<code>com.sun.jndi.ldap.LdapPoolManager</code> does not result in a
|
||||||
|
memory leak. The thread is started the first time the
|
||||||
|
<code>LdapPoolManager</code> class is used if the system property
|
||||||
|
<code>com.sun.jndi.ldap.connect.pool.timeout</code> is set to a value
|
||||||
|
greater than 0. Without this protection, if a web application uses this
|
||||||
|
class the PoolCleaner thread will be configured with the thread's
|
||||||
|
context class loader set to the web application class loader which in
|
||||||
|
turn will trigger a memory leak on reload. Defaults to
|
||||||
|
<code>true</code>. This protection is disabled if running on Java 9
|
||||||
|
onwards since the leak has been fixed for Java 9 onwards.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">securityLoginConfigurationProtection</code></td><td>
|
||||||
|
<p>Enables protection so that usage of the
|
||||||
|
<code>javax.security.auth.login.Configuration</code> class by a web
|
||||||
|
application does not provoke a memory leak. The first access of this
|
||||||
|
class will trigger the initializer that will retain a static reference
|
||||||
|
to the context class loader. The protection loads the class with the
|
||||||
|
system class loader to ensure that the static initializer is not
|
||||||
|
triggered by a web application. Defaults to <code>true</code>. This
|
||||||
|
protection is disabled if running on Java 8 onwards since the leak has
|
||||||
|
been fixed for Java 8 onwards.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">securityPolicyProtection</code></td><td>
|
||||||
|
<p>Enables protection so that usage of the deprecated
|
||||||
|
<code>javax.security.auth.Policy</code> class by a web application does not
|
||||||
|
result in a memory leak. The first access of this class will trigger the
|
||||||
|
static initializer that will retain a static reference to the context
|
||||||
|
class loader. The protection calls the <code>getPolicy()</code> method
|
||||||
|
of this class to ensure that the static initializer is not triggered by
|
||||||
|
a web application. Defaults to <code>true</code>.</p>
|
||||||
|
<p>Note: The underlying leak has been fixed in Java 7 update 51 onwards
|
||||||
|
and Java 8 onwards. This protection is therefor disabled if running on
|
||||||
|
Java 8 onwards.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">tokenPollerProtection</code></td><td>
|
||||||
|
<p>Enables protection so that any token poller thread initialized by
|
||||||
|
<code>sun.security.pkcs11.SunPKCS11.initToken()</code> does not
|
||||||
|
result in a memory leak. The thread is started depending on various
|
||||||
|
conditions as part of the initialization of the Java Cryptography
|
||||||
|
Architecture. Without the protection this can happen during Webapp
|
||||||
|
deployment when the MessageDigest for generating session IDs is
|
||||||
|
initialized. As a result the thread has the Webapp class loader as its
|
||||||
|
thread context class loader. Enabling the protection initializes JCA
|
||||||
|
early during Tomcat startup. Defaults to <code>true</code>. This
|
||||||
|
protection is disabled if running on Java 9 onwards since the leak has
|
||||||
|
been fixed for Java 9 onwards.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">urlCacheProtection</code></td><td>
|
||||||
|
<p>Enables protection so that reading resources from JAR files using
|
||||||
|
<code>java.net.URLConnection</code>s does not result in the JAR file
|
||||||
|
being locked. Note that enabling this protection disables caching by
|
||||||
|
default for all resources obtained via
|
||||||
|
<code>java.net.URLConnection</code>s. Caching may be re-enabled on a
|
||||||
|
case by case basis as required. Defaults to <code>true</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">xmlParsingProtection</code></td><td>
|
||||||
|
<p>Enables protection so that parsing XML files within a web application
|
||||||
|
does not result in a memory leak. Note that memory profilers may not
|
||||||
|
display the GC root associated with this leak making it particularly
|
||||||
|
hard to diagnose. Defaults to <code>true</code>. This protection is
|
||||||
|
disabled if running on Java 9 onwards since the leak has been fixed for
|
||||||
|
Java 9 onwards.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="JreMemoryLeakPreventionListener_Examples">JreMemoryLeakPreventionListener Examples</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The following is an example of how to configure the
|
||||||
|
<code>classesToInitialize</code> attribute of this listener.</p>
|
||||||
|
|
||||||
|
<p>If this listener was configured in server.xml as:</p>
|
||||||
|
|
||||||
|
<div class="codeBox"><pre><code> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"
|
||||||
|
classesToInitialize="oracle.jdbc.driver.OracleTimeoutThreadPerVM" /></code></pre></div>
|
||||||
|
|
||||||
|
<p>then the <code>OracleTimeoutThreadPerVM</code> class would be loaded
|
||||||
|
and initialized during listener startup instead of during request
|
||||||
|
processing.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Security_Lifecycle_Listener_-_org.apache.catalina.security.SecurityListener">Security Lifecycle Listener - org.apache.catalina.security.SecurityListener</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>Security Lifecycle Listener</strong> performs a number of
|
||||||
|
security checks when Tomcat starts and prevents Tomcat from starting if they
|
||||||
|
fail. The listener is not enabled by default. To enabled it uncomment the
|
||||||
|
listener in $CATALINA_BASE/conf/server.xml. If the operating system supports
|
||||||
|
umask then the line in $CATALINA_HOME/bin/catalina.sh that obtains the umask
|
||||||
|
also needs to be uncommented.</p>
|
||||||
|
|
||||||
|
<p>This listener must only be nested within <a href="server.html">Server</a>
|
||||||
|
elements.</p>
|
||||||
|
|
||||||
|
<p>The following additional attributes are supported by the <strong>Security
|
||||||
|
Lifecycle Listener</strong>:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">checkedOsUsers</code></td><td>
|
||||||
|
<p>A comma separated list of OS users that must not be used to start
|
||||||
|
Tomcat. If not specified, the default value of <b>root</b> is used. To
|
||||||
|
disable this check, set the attribute to the empty string. Usernames
|
||||||
|
are checked in a case-insensitive manner.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">minimumUmask</code></td><td>
|
||||||
|
<p>The least restrictive umask that must be configured before Tomcat
|
||||||
|
will start. If not specified, the default value of <b>0007</b> is used.
|
||||||
|
To disable this check, set the attribute to the empty string. The check
|
||||||
|
is not performed on Windows platforms.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="StoreConfig_Lifecycle_Listener_-_org.apache.catalina.storeconfig.StoreConfigLifecycleListener">StoreConfig Lifecycle Listener - org.apache.catalina.storeconfig.StoreConfigLifecycleListener</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>StoreConfig Lifecycle Listener</strong> configures a
|
||||||
|
StoreConfig MBean that may be used to save the current server configuration
|
||||||
|
in server.xml or the current configuration for a web application in a
|
||||||
|
context.xml file.</p>
|
||||||
|
|
||||||
|
<p>This listener must only be nested within <a href="server.html">Server</a>
|
||||||
|
elements.</p>
|
||||||
|
|
||||||
|
<p>The following additional attributes are supported by the
|
||||||
|
<strong>StoreConfig Lifecycle Listener</strong>:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">storeConfigClass</code></td><td>
|
||||||
|
<p>The name of the <code>IStoreConfig</code> implementation to use. If
|
||||||
|
not specified the default of
|
||||||
|
<code>org.apache.catalina.storeconfig.StoreConfig</code> will be
|
||||||
|
used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">storeRegistry</code></td><td>
|
||||||
|
<p>The URL of the configuration file that configures how the
|
||||||
|
<code>IStoreConfig</code> is to save the configuration. If not specified
|
||||||
|
the built in resource
|
||||||
|
<code>/org/apache/catalina/storeconfig/server-registry.xml</code> will
|
||||||
|
be used.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="ThreadLocal_Leak_Prevention_Listener_-_org.apache.catalina.core.ThreadLocalLeakPreventionListener">ThreadLocal Leak Prevention Listener - org.apache.catalina.core.ThreadLocalLeakPreventionListener</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>ThreadLocal Leak Prevention Listener</strong> triggers the
|
||||||
|
renewal of threads in <a href="executor.html">Executor</a> pools when a
|
||||||
|
<a href="context.html">Context</a> is being stopped to avoid thread-local
|
||||||
|
related memory leaks. Active threads will be renewed one by one when they
|
||||||
|
come back to the pool after executing their task. The renewal happens
|
||||||
|
only for contexts that have their <code>renewThreadsWhenStoppingContext</code>
|
||||||
|
attribute set to <code>true</code>.</p>
|
||||||
|
|
||||||
|
<p>This listener must only be nested within <a href="server.html">Server</a>
|
||||||
|
elements.</p>
|
||||||
|
|
||||||
|
<p>No additional attributes are supported by the <strong>ThreadLocal Leak
|
||||||
|
Prevention Listener</strong>.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="UserConfig_-_org.apache.catalina.startup.UserConfig">UserConfig - org.apache.catalina.startup.UserConfig</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>UserConfig</strong> provides feature of User Web Applications.
|
||||||
|
User Web Applications map a request URI starting with a tilde character ("~")
|
||||||
|
and a username to a directory (commonly named public_html) in that user's
|
||||||
|
home directory on the server.</p>
|
||||||
|
|
||||||
|
<p>See the <a href="host.html#User_Web_Applications">User Web Applications</a>
|
||||||
|
special feature on the <strong>Host</strong> element for more information.</p>
|
||||||
|
|
||||||
|
<p>The following additional attributes are supported by the
|
||||||
|
<strong>UserConfig</strong>:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">directoryName</code></td><td>
|
||||||
|
<p>The directory name to be searched for within each user home directory.
|
||||||
|
The default is <code>public_html</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">userClass</code></td><td>
|
||||||
|
<p>The class name of the user database class.
|
||||||
|
There are currently two user database, the
|
||||||
|
<code>org.apache.catalina.startup.PasswdUserDatabase</code> is used on a
|
||||||
|
Unix system that uses the /etc/passwd file to identify valid users.
|
||||||
|
The <code>org.apache.catalina.startup.HomesUserDatabase</code> is used on
|
||||||
|
a server where /etc/passwd is not in use. HomesUserDatabase deploy all
|
||||||
|
directories found in a specified base directory.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">homeBase</code></td><td>
|
||||||
|
<p>The base directory containing user home directories. This is effective
|
||||||
|
only when <code>org.apache.catalina.startup.HomesUserDatabase</code> is
|
||||||
|
used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">allow</code></td><td>
|
||||||
|
<p>A regular expression defining user who deployment is allowed. If this
|
||||||
|
attribute is specified, the user to deploy must match for this pattern.
|
||||||
|
If this attribute is not specified, all users will be deployed unless the
|
||||||
|
user matches a deny pattern.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">deny</code></td><td>
|
||||||
|
<p>A regular expression defining user who deployment is denied. If this
|
||||||
|
attribute is specified, the user to deploy must not match for this
|
||||||
|
pattern. If this attribute is not specified, deployment of user will be
|
||||||
|
governed by a allow attribute.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Version_Logging_Lifecycle_Listener_-_org.apache.catalina.startup.VersionLoggerListener">Version Logging Lifecycle Listener - org.apache.catalina.startup.VersionLoggerListener</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>Version Logging Lifecycle Listener</strong> logs Tomcat, Java
|
||||||
|
and operating system information when Tomcat starts.</p>
|
||||||
|
|
||||||
|
<p>This listener must only be nested within <a href="server.html">Server</a>
|
||||||
|
elements and should be the first listener defined.</p>
|
||||||
|
|
||||||
|
<p>The following additional attributes are supported by the <strong>Version
|
||||||
|
Logging Lifecycle Listener</strong>:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">logArgs</code></td><td>
|
||||||
|
<p>If <code>true</code>, the command line arguments passed to Java when
|
||||||
|
Tomcat started will be logged. If not specified, the default value of
|
||||||
|
<code>true</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">logEnv</code></td><td>
|
||||||
|
<p>If <code>true</code>, the current environment variables when Tomcat
|
||||||
|
starts will be logged. If not specified, the default value of
|
||||||
|
<code>false</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">logProps</code></td><td>
|
||||||
|
<p>If <code>true</code>, the current Java system properties will be
|
||||||
|
logged. If not specified, the default value of
|
||||||
|
<code>false</code> will be used.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><h3 id="Additional_Implementations">Additional Implementations</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="JMX_Remote_Lifecycle_Listener_-_org.apache.catalina.mbeans.JmxRemoteLifecycleListener">JMX Remote Lifecycle Listener - org.apache.catalina.mbeans.JmxRemoteLifecycleListener</h4><div class="text">
|
||||||
|
|
||||||
|
<p>This listener requires <code>catalina-jmx-remote.jar</code> to be placed
|
||||||
|
in <code>$CATALINA_HOME/lib</code>. This jar may be found in the extras
|
||||||
|
directory of the binary download area.</p>
|
||||||
|
|
||||||
|
<p>The <strong>JMX Remote Lifecycle Listener</strong> fixes the ports used by
|
||||||
|
the JMX/RMI Server making things much simpler if you need to connect
|
||||||
|
jconsole or a similar tool to a remote Tomcat instance that is running
|
||||||
|
behind a firewall. Only these ports are configured via the listener. The
|
||||||
|
remainder of the configuration is via the standard system properties for
|
||||||
|
configuring JMX. For further information on configuring JMX see
|
||||||
|
<a href="http://docs.oracle.com/javase/6/docs/technotes/guides/management/agent.html">
|
||||||
|
Monitoring and Management Using JMX</a> included with the Java SDK
|
||||||
|
documentation.</p>
|
||||||
|
|
||||||
|
<p>This listener must only be nested within a <a href="server.html">Server</a>
|
||||||
|
element.</p>
|
||||||
|
|
||||||
|
<p>The following additional attributes are supported by the <strong>JMX Remote
|
||||||
|
Lifecycle Listener</strong>:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">rmiRegistryPortPlatform</code></strong></td><td>
|
||||||
|
<p>The port to be used by the JMX/RMI registry for the Platform MBeans.
|
||||||
|
This replaces the use of the
|
||||||
|
<code>com.sun.management.jmxremote.port</code> system property that
|
||||||
|
should not be set when using this listener.</p>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">rmiServerPortPlatform</code></strong></td><td>
|
||||||
|
<p>The port to be used by the Platform JMX/RMI server.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">rmiBindAddress</code></td><td>
|
||||||
|
<p>The address of the interface to be used by JMX/RMI server.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">useLocalPorts</code></td><td>
|
||||||
|
<p>Should any clients using these ports be forced to use local ports to
|
||||||
|
connect to the JMX/RMI server. This is useful when tunnelling
|
||||||
|
connections over SSH or similar. Defaults to <code>false</code>.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
<h3>Using file-based Authentication and Authorisation</h3>
|
||||||
|
|
||||||
|
<p>If this listener was configured in server.xml as:</p>
|
||||||
|
<div class="codeBox"><pre><code> <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
|
||||||
|
rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" /></code></pre></div>
|
||||||
|
<p>with the following system properties set (e.g. in setenv.sh):</p>
|
||||||
|
<div class="codeBox"><pre><code> -Dcom.sun.management.jmxremote.password.file=$CATALINA_BASE/conf/jmxremote.password
|
||||||
|
-Dcom.sun.management.jmxremote.access.file=$CATALINA_BASE/conf/jmxremote.access
|
||||||
|
-Dcom.sun.management.jmxremote.ssl=false</code></pre></div>
|
||||||
|
<p>$CATALINA_BASE/conf/jmxremote.password containing:</p>
|
||||||
|
<div class="codeBox"><pre><code>admin letmein</code></pre></div>
|
||||||
|
<p>$CATALINA_BASE/conf/jmxremote.access containing:</p>
|
||||||
|
<div class="codeBox"><pre><code>admin readwrite</code></pre></div>
|
||||||
|
<p>then opening ports 10001 (RMI Registry) and 10002 (JMX/RMI Server) in your
|
||||||
|
firewall would enable jconsole to connect to a Tomcat instance running
|
||||||
|
behind a firewall using a connection string of the form:</p>
|
||||||
|
<div class="codeBox"><pre><code>service:jmx:rmi://<hostname>:10002/jndi/rmi://<hostname>:10001/jmxrmi</code></pre></div>
|
||||||
|
<p>
|
||||||
|
with a user name of <code>admin</code> and a password of
|
||||||
|
<code>letmein</code>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3>Using JAAS</h3>
|
||||||
|
|
||||||
|
<p>If we use the following system properties instead:</p>
|
||||||
|
<div class="codeBox"><pre><code> -Dcom.sun.management.jmxremote.login.config=Tomcat
|
||||||
|
-Djava.security.auth.login.config=$CATALINA_BASE/conf/login.config
|
||||||
|
-Dcom.sun.management.jmxremote.access.file=$CATALINA_BASE/conf/jmxremote.access
|
||||||
|
-Dcom.sun.management.jmxremote.ssl=false</code></pre></div>
|
||||||
|
<p>$CATALINA_BASE/conf/login.config containing your choice of JAAS LoginModule implementation, for example:</p>
|
||||||
|
<div class="codeBox"><pre><code> Tomcat { /* should match to the com.sun.management.jmxremote.login.config property */
|
||||||
|
|
||||||
|
/* for illustration purposes only */
|
||||||
|
com.sun.security.auth.module.LdapLoginModule REQUIRED
|
||||||
|
userProvider="ldap://ldap-svr/ou=people,dc=example,dc=com"
|
||||||
|
userFilter="(&(uid={USERNAME})(objectClass=inetOrgPerson))"
|
||||||
|
authzIdentity="admin"
|
||||||
|
debug=true;
|
||||||
|
};</code></pre></div>
|
||||||
|
<p>$CATALINA_BASE/conf/jmxremote.access containing:</p>
|
||||||
|
<div class="codeBox"><pre><code>admin readwrite</code></pre></div>
|
||||||
|
<p>
|
||||||
|
then we would need to provide LDAP credentials instead.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p><strong>Note that the examples above do not use SSL. JMX access should
|
||||||
|
be considered equivalent to administrative access and secured accordingly.
|
||||||
|
</strong></p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,161 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The Loader Component</title><meta name="author" content="Craig R. McClanahan"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/loader">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The Loader Component</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Common_Attributes">Common Attributes</a></li><li><a href="#Standard_Implementation">Standard Implementation</a></li></ol></li><li><a href="#Nested_Components">Nested Components</a></li><li><a href="#Special_Features">Special Features</a><ol><li><a href="#Logging">Logging</a></li></ol></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>Loader</strong> element represents the <em>web
|
||||||
|
application class loader</em> that will be used to load Java
|
||||||
|
classes and resources for your web application. Such
|
||||||
|
a class loader must follow the requirements of the Servlet
|
||||||
|
Specification, and load classes from the following locations:</p>
|
||||||
|
<ul>
|
||||||
|
<li>From the <code>/WEB-INF/classes</code> directory inside your
|
||||||
|
web application.</li>
|
||||||
|
<li>From JAR files in the <code>/WEB-INF/lib</code> directory
|
||||||
|
inside your web application.</li>
|
||||||
|
<li>From resources made available by Catalina to all web
|
||||||
|
applications globally.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>A Loader element MAY be nested inside a <a href="context.html">Context</a>
|
||||||
|
component. If it is not included, a default Loader configuration will be
|
||||||
|
created automatically, which is sufficient for most requirements.</p>
|
||||||
|
|
||||||
|
<p>For a more in-depth description of the class loader hierarchy
|
||||||
|
that is implemented by Catalina, see <a href="../class-loader-howto.html">the ClassLoader HowTo</a>.</p>
|
||||||
|
|
||||||
|
<p><em>The description below uses the variable name $CATALINA_BASE to refer the
|
||||||
|
base directory against which most relative paths are resolved. If you have
|
||||||
|
not configured Tomcat for multiple instances by setting a CATALINA_BASE
|
||||||
|
directory, then $CATALINA_BASE will be set to the value of $CATALINA_HOME,
|
||||||
|
the directory into which you have installed Tomcat.</em></p>
|
||||||
|
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Common_Attributes">Common Attributes</h4><div class="text">
|
||||||
|
|
||||||
|
<p>All implementations of <strong>Loader</strong>
|
||||||
|
support the following attributes:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">className</code></td><td>
|
||||||
|
<p>Java class name of the implementation to use. This class must
|
||||||
|
implement the <code>org.apache.catalina.Loader</code> interface.
|
||||||
|
If not specified, the standard value (defined below) will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">delegate</code></td><td>
|
||||||
|
<p>Set to <code>true</code> if you want the class loader to follow
|
||||||
|
the standard Java2 delegation model, and attempt to load classes from
|
||||||
|
parent class loaders <strong>before</strong> looking inside the web
|
||||||
|
application. Set to <code>false</code> (the default) to have the
|
||||||
|
class loader look inside the web application first, before asking
|
||||||
|
parent class loaders to find requested classes or resources.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">reloadable</code></td><td>
|
||||||
|
<p>Set to <code>true</code> if you want Catalina to monitor classes in
|
||||||
|
<code>/WEB-INF/classes/</code> and <code>/WEB-INF/lib</code> for
|
||||||
|
changes, and automatically reload the web application if a change
|
||||||
|
is detected. This feature is very useful during application
|
||||||
|
development, but it requires significant runtime overhead and is
|
||||||
|
not recommended for use on deployed production applications. You
|
||||||
|
can use the <a href="../manager-howto.html">Manager</a> web
|
||||||
|
application, however, to trigger reloads of deployed applications
|
||||||
|
on demand.</p>
|
||||||
|
|
||||||
|
<p><strong>NOTE</strong> - The value for this property will be
|
||||||
|
inherited from the <code>reloadable</code> attribute you set on
|
||||||
|
the surrounding <a href="context.html">Context</a> component,
|
||||||
|
and any value you explicitly set here will be replaced.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Standard_Implementation">Standard Implementation</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The standard implementation of <strong>Loader</strong> is
|
||||||
|
<strong>org.apache.catalina.loader.WebappLoader</strong>.
|
||||||
|
It supports the following additional attributes (in addition to the
|
||||||
|
common attributes listed above):</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">loaderClass</code></td><td>
|
||||||
|
<p>Java class name of the <code>java.lang.ClassLoader</code>
|
||||||
|
implementation class to use. Custom implementations must extend
|
||||||
|
<code>org.apache.catalina.loader.WebappClassLoaderBase</code>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>If not specified, the default value is
|
||||||
|
<code>org.apache.catalina.loader.WebappClassLoader</code>. The
|
||||||
|
default <strong>loaderClass</strong> is not parallel capable, which
|
||||||
|
means that loading a class from this classloader is performed by one
|
||||||
|
thread at a time. A parallel capable <strong>loaderClass</strong> is
|
||||||
|
available and can be used by specifying
|
||||||
|
<code>org.apache.catalina.loader.ParallelWebappClassLoader</code>.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><h3 id="Nested_Components">Nested Components</h3><div class="text">
|
||||||
|
|
||||||
|
<p>No components may be nested inside a <strong>Loader</strong> element.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Special_Features">Special Features</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Logging">Logging</h4><div class="text">
|
||||||
|
|
||||||
|
<p>A loader is associated with the log category based on its classname.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,524 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The Manager Component</title><meta name="author" content="Craig R. McClanahan"><meta name="author" content="Yoav Shapira"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/manager">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The Manager Component</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Common_Attributes">Common Attributes</a></li><li><a href="#Standard_Implementation">Standard Implementation</a></li></ol></li><li><a href="#Nested_Components">Nested Components</a></li><li><a href="#Special_Features">Special Features</a><ol><li><a href="#Persistence_Across_Restarts">Persistence Across Restarts</a></li><li><a href="#Disable_Session_Persistence">Disable Session Persistence</a></li></ol></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>Manager</strong> element represents the <em>session
|
||||||
|
manager</em> that will be used to create and maintain HTTP sessions
|
||||||
|
as requested by the associated web application.</p>
|
||||||
|
|
||||||
|
<p>A Manager element MAY be nested inside a
|
||||||
|
<a href="context.html">Context</a> component. If it is not included,
|
||||||
|
a default Manager configuration will be created automatically, which
|
||||||
|
is sufficient for most requirements, — see
|
||||||
|
<em>Standard Manager Implementation</em> below for the details
|
||||||
|
of this configuration.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Common_Attributes">Common Attributes</h4><div class="text">
|
||||||
|
|
||||||
|
<p>All implementations of <strong>Manager</strong>
|
||||||
|
support the following attributes:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">className</code></td><td>
|
||||||
|
<p>Java class name of the implementation to use. This class must
|
||||||
|
implement the <code>org.apache.catalina.Manager</code> interface.
|
||||||
|
If not specified, the standard value (defined below) will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">distributable</code></td><td>
|
||||||
|
<p><strong>Deprecated</strong>: This should be configured via the
|
||||||
|
Context.</p>
|
||||||
|
<p>Set to <code>true</code> to ask the session manager to enforce
|
||||||
|
the restrictions described in the Servlet Specification on
|
||||||
|
distributable applications (primarily, this would mean that all
|
||||||
|
session attributes must implement <code>java.io.Serializable</code>).
|
||||||
|
Set to <code>false</code> (the default) to not enforce these
|
||||||
|
restrictions.</p>
|
||||||
|
|
||||||
|
<p><strong>NOTE</strong> - The value for this property is inherited
|
||||||
|
automatically based on the presence or absence of the
|
||||||
|
<code><distributable></code> element in the web application
|
||||||
|
deployment descriptor (<code>/WEB-INF/web.xml</code>).</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxActiveSessions</code></td><td>
|
||||||
|
<p>The maximum number of active sessions that will be created by
|
||||||
|
this Manager, or <code>-1</code> (the default) for no limit.</p>
|
||||||
|
|
||||||
|
<p>When the limit is reached, any attempt to create a new session
|
||||||
|
(e.g. with <code>HttpServletRequest.getSession()</code> call)
|
||||||
|
will fail with an <code>IllegalStateException</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxInactiveInterval</code></td><td>
|
||||||
|
<p><strong>Deprecated</strong>: This should be configured via the
|
||||||
|
Context.</p>
|
||||||
|
<p>The initial maximum time interval, in seconds,
|
||||||
|
between client requests before a session is invalidated. A negative value
|
||||||
|
will result in sessions never timing out. If the attribute is not provided,
|
||||||
|
a default of 1800 seconds (30 minutes) is used.</p>
|
||||||
|
|
||||||
|
<p>This attribute provides the initial value whenever a
|
||||||
|
new session is created, but the interval may be dynamically
|
||||||
|
varied by a servlet via the
|
||||||
|
<code>setMaxInactiveInterval</code> method of the <code>HttpSession</code> object.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">sessionIdLength</code></td><td>
|
||||||
|
<p>The length of session ids created by this Manager, measured in bytes,
|
||||||
|
excluding subsequent conversion to a hexadecimal string and
|
||||||
|
excluding any JVM route information used for load balancing.
|
||||||
|
This attribute is deprecated. Set the length on a nested
|
||||||
|
<strong>SessionIdGenerator</strong> element instead.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Standard_Implementation">Standard Implementation</h4><div class="text">
|
||||||
|
|
||||||
|
<p>Tomcat provides two standard implementations of <strong>Manager</strong>
|
||||||
|
for use — the default one stores active sessions, while the optional one
|
||||||
|
stores active sessions that have been swapped out (in addition to saving
|
||||||
|
sessions across a restart of Tomcat) in a storage location that is selected
|
||||||
|
via the use of an appropriate <strong>Store</strong> nested element.</p>
|
||||||
|
|
||||||
|
<h3>Standard Manager Implementation</h3>
|
||||||
|
|
||||||
|
<p>The standard implementation of <strong>Manager</strong> is
|
||||||
|
<strong>org.apache.catalina.session.StandardManager</strong>.
|
||||||
|
It supports the following additional attributes (in addition to the
|
||||||
|
common attributes listed above):</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">pathname</code></td><td>
|
||||||
|
<p>Absolute or relative (to the work directory for this Context)
|
||||||
|
pathname of the file in which session state will be preserved
|
||||||
|
across application restarts, if possible. The default is
|
||||||
|
"SESSIONS.ser".<br>See
|
||||||
|
<a href="#Persistence_Across_Restarts">Persistence Across Restarts</a>
|
||||||
|
for more information. This persistence may be
|
||||||
|
disabled by setting this attribute to an empty string.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">processExpiresFrequency</code></td><td>
|
||||||
|
<p>Frequency of the session expiration, and related manager operations.
|
||||||
|
Manager operations will be done once for the specified amount of
|
||||||
|
backgroundProcess calls (i.e., the lower the amount, the more often the
|
||||||
|
checks will occur). The minimum value is 1, and the default value is 6.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">secureRandomClass</code></td><td>
|
||||||
|
<p>Name of the Java class that extends
|
||||||
|
<code>java.security.SecureRandom</code> to use to generate session IDs.
|
||||||
|
If not specified, the default value is
|
||||||
|
<code>java.security.SecureRandom</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">secureRandomProvider</code></td><td>
|
||||||
|
<p>Name of the provider to use to create the
|
||||||
|
<code>java.security.SecureRandom</code> instances that generate session
|
||||||
|
IDs. If an invalid algorithm and/or provider is specified, the Manager
|
||||||
|
will use the platform default provider and the default algorithm. If not
|
||||||
|
specified, the platform default provider will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">secureRandomAlgorithm</code></td><td>
|
||||||
|
<p>Name of the algorithm to use to create the
|
||||||
|
<code>java.security.SecureRandom</code> instances that generate session
|
||||||
|
IDs. If an invalid algorithm and/or provider is specified, the Manager
|
||||||
|
will use the platform default provider and the default algorithm. If not
|
||||||
|
specified, the default algorithm of SHA1PRNG will be used. If the
|
||||||
|
default algorithm is not supported, the platform default will be used.
|
||||||
|
To specify that the platform default should be used, do not set the
|
||||||
|
secureRandomProvider attribute and set this attribute to the empty
|
||||||
|
string.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">sessionAttributeNameFilter</code></td><td>
|
||||||
|
<p>A regular expression used to filter which session attributes will be
|
||||||
|
distributed. An attribute will only be distributed if its name matches
|
||||||
|
this pattern. If the pattern is zero length or <code>null</code>, all
|
||||||
|
attributes are eligible for distribution. The pattern is anchored so the
|
||||||
|
session attribute name must fully match the pattern. As an example, the
|
||||||
|
value <code>(userName|sessionHistory)</code> will only distribute the
|
||||||
|
two session attributes named <code>userName</code> and
|
||||||
|
<code>sessionHistory</code>. If not specified, the default value of
|
||||||
|
<code>null</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">sessionAttributeValueClassNameFilter</code></td><td>
|
||||||
|
<p>A regular expression used to filter which session attributes will be
|
||||||
|
distributed. An attribute will only be distributed if the implementation
|
||||||
|
class name of the value matches this pattern. If the pattern is zero
|
||||||
|
length or <code>null</code>, all attributes are eligible for
|
||||||
|
distribution. The pattern is anchored so the fully qualified class name
|
||||||
|
must fully match the pattern. If not specified, the default value of
|
||||||
|
<code>null</code> will be used unless a <code>SecurityManager</code> is
|
||||||
|
enabled in which case the default will be
|
||||||
|
<code>java\\.lang\\.(?:Boolean|Integer|Long|Number|String)</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">warnOnSessionAttributeFilterFailure</code></td><td>
|
||||||
|
<p>If <strong>sessionAttributeNameFilter</strong> or
|
||||||
|
<strong>sessionAttributeValueClassNameFilter</strong> blocks an
|
||||||
|
attribute, should this be logged at <code>WARN</code> level? If
|
||||||
|
<code>WARN</code> level logging is disabled then it will be logged at
|
||||||
|
<code>DEBUG</code>. The default value of this attribute is
|
||||||
|
<code>false</code> unless a <code>SecurityManager</code> is enabled in
|
||||||
|
which case the default will be <code>true</code>.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
<h3>Persistent Manager Implementation</h3>
|
||||||
|
|
||||||
|
<p><strong>NOTE:</strong> You must set either the
|
||||||
|
<code>org.apache.catalina.session.StandardSession.ACTIVITY_CHECK</code> or
|
||||||
|
<code>org.apache.catalina.STRICT_SERVLET_COMPLIANCE</code>
|
||||||
|
<a href="systemprops.html">system properties</a> to <code>true</code> for
|
||||||
|
the persistent manager to work correctly.</p>
|
||||||
|
|
||||||
|
<p>The persistent implementation of <strong>Manager</strong> is
|
||||||
|
<strong>org.apache.catalina.session.PersistentManager</strong>. In
|
||||||
|
addition to the usual operations of creating and deleting sessions, a
|
||||||
|
<code>PersistentManager</code> has the capability to swap active (but
|
||||||
|
idle) sessions out to a persistent storage mechanism, as well as to save
|
||||||
|
all sessions across a normal restart of Tomcat. The actual persistent
|
||||||
|
storage mechanism used is selected by your choice of a
|
||||||
|
<strong>Store</strong> element nested inside the <strong>Manager</strong>
|
||||||
|
element - this is required for use of <code>PersistentManager</code>.</p>
|
||||||
|
|
||||||
|
<p>This implementation of Manager supports the following attributes in
|
||||||
|
addition to the <a href="#Common_Attributes">Common Attributes</a>
|
||||||
|
described earlier.</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
|
||||||
|
<p>It has the same meaning as described in the
|
||||||
|
<a href="#Common_Attributes">Common Attributes</a> above.
|
||||||
|
You <strong>must</strong> specify
|
||||||
|
<code>org.apache.catalina.session.PersistentManager</code> to use
|
||||||
|
this manager implementation.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxIdleBackup</code></td><td>
|
||||||
|
<p>The time interval (in seconds) since the last access to a session
|
||||||
|
before it is eligible for being persisted to the session store, or
|
||||||
|
<code>-1</code> to disable this feature. By default, this feature is
|
||||||
|
disabled.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">maxIdleSwap</code></td><td>
|
||||||
|
<p>The maximum time a session may be idle before it is eligible to be
|
||||||
|
swapped to disk due to inactivity. Setting this to <code>-1</code> means
|
||||||
|
sessions should not be swapped out just because of inactivity. If this
|
||||||
|
feature is enabled, the time interval specified here should be equal to
|
||||||
|
or longer than the value specified for <code>maxIdleBackup</code>. By
|
||||||
|
default, this feature is disabled.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">minIdleSwap</code></td><td>
|
||||||
|
<p>The minimum time in seconds a session must be idle before it is
|
||||||
|
eligible to be swapped to disk to keep the active session count below
|
||||||
|
maxActiveSessions. Setting to <code>-1</code> means sessions will not be
|
||||||
|
swapped out to keep the active session count down. If specified, this
|
||||||
|
value should be less than that specified by <code>maxIdleSwap</code>.
|
||||||
|
By default, this value is set to <code>-1</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">processExpiresFrequency</code></td><td>
|
||||||
|
<p>It is the same as described above for the
|
||||||
|
<code>org.apache.catalina.session.StandardManager</code> class.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">saveOnRestart</code></td><td>
|
||||||
|
<p>Should all sessions be persisted and reloaded when Tomcat is shut
|
||||||
|
down and restarted (or when this application is reloaded)? By default,
|
||||||
|
this attribute is set to <code>true</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">secureRandomClass</code></td><td>
|
||||||
|
<p>It is the same as described above for the
|
||||||
|
<code>org.apache.catalina.session.StandardManager</code> class.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">secureRandomProvider</code></td><td>
|
||||||
|
<p>It is the same as described above for the
|
||||||
|
<code>org.apache.catalina.session.StandardManager</code> class.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">secureRandomAlgorithm</code></td><td>
|
||||||
|
<p>It is the same as described above for the
|
||||||
|
<code>org.apache.catalina.session.StandardManager</code> class.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">sessionAttributeNameFilter</code></td><td>
|
||||||
|
<p>A regular expression used to filter which session attributes will be
|
||||||
|
distributed. An attribute will only be distributed if its name matches
|
||||||
|
this pattern. If the pattern is zero length or <code>null</code>, all
|
||||||
|
attributes are eligible for distribution. The pattern is anchored so the
|
||||||
|
session attribute name must fully match the pattern. As an example, the
|
||||||
|
value <code>(userName|sessionHistory)</code> will only distribute the
|
||||||
|
two session attributes named <code>userName</code> and
|
||||||
|
<code>sessionHistory</code>. If not specified, the default value of
|
||||||
|
<code>null</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">sessionAttributeValueClassNameFilter</code></td><td>
|
||||||
|
<p>A regular expression used to filter which session attributes will be
|
||||||
|
distributed. An attribute will only be distributed if the implementation
|
||||||
|
class name of the value matches this pattern. If the pattern is zero
|
||||||
|
length or <code>null</code>, all attributes are eligible for
|
||||||
|
distribution. The pattern is anchored so the fully qualified class name
|
||||||
|
must fully match the pattern. If not specified, the default value of
|
||||||
|
<code>null</code> will be used unless a <code>SecurityManager</code> is
|
||||||
|
enabled in which case the default will be
|
||||||
|
<code>java\\.lang\\.(?:Boolean|Integer|Long|Number|String)</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">warnOnSessionAttributeFilterFailure</code></td><td>
|
||||||
|
<p>If <strong>sessionAttributeNameFilter</strong> or
|
||||||
|
<strong>sessionAttributeValueClassNameFilter</strong> blocks an
|
||||||
|
attribute, should this be logged at <code>WARN</code> level? If
|
||||||
|
<code>WARN</code> level logging is disabled then it will be logged at
|
||||||
|
<code>DEBUG</code>. The default value of this attribute is
|
||||||
|
<code>false</code> unless a <code>SecurityManager</code> is enabled in
|
||||||
|
which case the default will be <code>true</code>.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
<p>In order to successfully use a PersistentManager, you must nest inside
|
||||||
|
it a <strong><Store></strong> element, as described below.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
</div><h3 id="Nested_Components">Nested Components</h3><div class="text">
|
||||||
|
|
||||||
|
<h3>All Manager Implementations</h3>
|
||||||
|
|
||||||
|
<p>All Manager implementations allow nesting of a
|
||||||
|
<strong><SessionIdGenerator></strong> element. It defines
|
||||||
|
the behavior of session id generation. All implementations
|
||||||
|
of the <a href="sessionidgenerator.html">SessionIdGenerator</a> allow the
|
||||||
|
following attributes:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">sessionIdLength</code></td><td>
|
||||||
|
<p>The length of the session ID may be changed with the
|
||||||
|
<strong>sessionIdLength</strong> attribute.
|
||||||
|
</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
<h3>Persistent Manager Implementation</h3>
|
||||||
|
|
||||||
|
<p>If you are using the <em>Persistent Manager Implementation</em>
|
||||||
|
as described above, you <strong>MUST</strong> nest a
|
||||||
|
<strong><Store></strong> element inside, which defines the
|
||||||
|
characteristics of the persistent data storage. Two implementations
|
||||||
|
of the <code><Store></code> element are currently available,
|
||||||
|
with different characteristics, as described below.</p>
|
||||||
|
|
||||||
|
<h5>File Based Store</h5>
|
||||||
|
|
||||||
|
<p>The <em>File Based Store</em> implementation saves swapped out
|
||||||
|
sessions in individual files (named based on the session identifier)
|
||||||
|
in a configurable directory. Therefore, you are likely to encounter
|
||||||
|
scalability problems as the number of active sessions increases, and
|
||||||
|
this should primarily be considered a means to easily experiment.</p>
|
||||||
|
|
||||||
|
<p>To configure this, add a <code><Store></code> nested inside
|
||||||
|
your <code><Manager></code> element with the following attributes:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
|
||||||
|
<p>Java class name of the implementation to use. This class must
|
||||||
|
implement the <code>org.apache.catalina.Store</code> interface. You
|
||||||
|
<strong>must</strong> specify
|
||||||
|
<code>org.apache.catalina.session.FileStore</code>
|
||||||
|
to use this implementation.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">directory</code></td><td>
|
||||||
|
<p>Absolute or relative (to the temporary work directory for this web
|
||||||
|
application) pathname of the directory into which individual session
|
||||||
|
files are written. If not specified, the temporary work directory
|
||||||
|
assigned by the container is utilized.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
|
||||||
|
<h5>JDBC Based Store</h5>
|
||||||
|
|
||||||
|
<p>The <em>JDBC Based Store</em> implementation saves swapped out
|
||||||
|
sessions in individual rows of a preconfigured table in a database
|
||||||
|
that is accessed via a JDBC driver. With large numbers of swapped out
|
||||||
|
sessions, this implementation will exhibit improved performance over
|
||||||
|
the File Based Store described above.</p>
|
||||||
|
|
||||||
|
<p>To configure this, add a <code><Store></code> nested inside
|
||||||
|
your <code><Manager></code> element with the following attributes:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
|
||||||
|
<p>Java class name of the implementation to use. This class must
|
||||||
|
implement the <code>org.apache.catalina.Store</code> interface. You
|
||||||
|
<strong>must</strong> specify
|
||||||
|
<code>org.apache.catalina.session.JDBCStore</code>
|
||||||
|
to use this implementation.</p>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">connectionName</code></strong></td><td>
|
||||||
|
<p>The user name that will be handed to the configured JDBC driver to
|
||||||
|
establish a connection to the database containing the session table.</p>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">connectionPassword</code></strong></td><td>
|
||||||
|
<p>The password that will be handed to the configured JDBC driver to
|
||||||
|
establish a connection to the database containing the session table.</p>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">connectionURL</code></strong></td><td>
|
||||||
|
<p>The connection URL that will be handed to the configured JDBC
|
||||||
|
driver to establish a connection to the database containing our
|
||||||
|
session table.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">dataSourceName</code></td><td>
|
||||||
|
<p>Name of the JNDI resource for a JDBC DataSource-factory. If this option
|
||||||
|
is given and a valid JDBC resource can be found, it will be used and any
|
||||||
|
direct configuration of a JDBC connection via <code>connectionURL</code>,
|
||||||
|
<code>connectionName</code>, <code>connectionPassword</code> and
|
||||||
|
<code>driverName</code> will be ignored. Since this code uses prepared
|
||||||
|
statements, you might want to configure pooled prepared statements as
|
||||||
|
shown in <a href="../jndi-resources-howto.html">the JNDI resources
|
||||||
|
HOW-TO</a>.</p>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">driverName</code></strong></td><td>
|
||||||
|
<p>Java class name of the JDBC driver to be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">localDataSource</code></td><td>
|
||||||
|
<p>This allows the Store to use a DataSource defined for the Context
|
||||||
|
rather than a global DataSource. If not specified, the default is
|
||||||
|
<code>false</code>: use a global DataSource.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">sessionAppCol</code></td><td>
|
||||||
|
<p>Name of the database column, contained in the specified session table,
|
||||||
|
that contains the Engine, Host, and Web Application Context name in the
|
||||||
|
format <code>/Engine/Host/Context</code>. If not specified the default
|
||||||
|
value of <code>app</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">sessionDataCol</code></td><td>
|
||||||
|
<p>Name of the database column, contained in the specified session table,
|
||||||
|
that contains the serialized form of all session attributes for a swapped
|
||||||
|
out session. The column type must accept a binary object (typically called
|
||||||
|
a BLOB). If not specified the default value of <code>data</code> will be
|
||||||
|
used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">sessionIdCol</code></td><td>
|
||||||
|
<p>Name of the database column, contained in the specified session table,
|
||||||
|
that contains the session identifier of the swapped out session. The
|
||||||
|
column type must accept character string data of at least as many
|
||||||
|
characters as are contained in session identifiers created by Tomcat
|
||||||
|
(typically 32). If not specified the default value of <code>id</code> will
|
||||||
|
be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">sessionLastAccessedCol</code></td><td>
|
||||||
|
<p>Name of the database column, contained in the specified session table,
|
||||||
|
that contains the <code>lastAccessedTime</code> property of this session.
|
||||||
|
The column type must accept a Java <code>long</code> (64 bits). If not
|
||||||
|
specified the default value of <code>maxinactive</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">sessionMaxInactiveCol</code></td><td>
|
||||||
|
<p>Name of the database column, contained in the specified session table,
|
||||||
|
that contains the <code>maxInactiveInterval</code> property of this
|
||||||
|
session. The column type must accept a Java <code>integer</code> (32
|
||||||
|
bits). If not specified, the default value of <code>maxinactive</code>
|
||||||
|
will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">sessionTable</code></td><td>
|
||||||
|
<p>Name of the database table to be used for storing swapped out sessions.
|
||||||
|
This table must contain (at least) the database columns that are
|
||||||
|
configured by the other attributes of this element. If not specified the
|
||||||
|
default value of <code>tomcat$sessions</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">sessionValidCol</code></td><td>
|
||||||
|
<p>Name of the database column, contained in the specified session table,
|
||||||
|
that contains a flag indicating whether this swapped out session is still
|
||||||
|
valid or not. The column type must accept a single character. If not
|
||||||
|
specified the default value of <code>valid</code> will be used.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
<p>Before attempting to use the JDBC Based Store for the first time,
|
||||||
|
you must create the table that will be used to store swapped out sessions.
|
||||||
|
Detailed SQL commands vary depending on the database you are using, but
|
||||||
|
a script like this will generally be required:</p>
|
||||||
|
|
||||||
|
<div class="codeBox"><pre><code>create table tomcat_sessions (
|
||||||
|
session_id varchar(100) not null primary key,
|
||||||
|
valid_session char(1) not null,
|
||||||
|
max_inactive int not null,
|
||||||
|
last_access bigint not null,
|
||||||
|
app_name varchar(255),
|
||||||
|
session_data mediumblob,
|
||||||
|
KEY kapp_name(app_name)
|
||||||
|
);</code></pre></div>
|
||||||
|
|
||||||
|
<p>Note: The SQL command above does not use the default names for either the
|
||||||
|
table or the columns so the JDBC Store would need to be configured to reflect
|
||||||
|
this.</p>
|
||||||
|
|
||||||
|
<p>In order for the JDBC Based Store to successfully connect to your
|
||||||
|
database, the JDBC driver you configure must be visible to Tomcat's
|
||||||
|
internal class loader. Generally, that means you must place the JAR
|
||||||
|
file containing this driver into the <code>$CATALINA_HOME/lib</code>
|
||||||
|
directory.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Special_Features">Special Features</h3><div class="text">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Persistence_Across_Restarts">Persistence Across Restarts</h4><div class="text">
|
||||||
|
|
||||||
|
<p>Whenever Apache Tomcat is shut down normally and restarted, or when an
|
||||||
|
application reload is triggered, the standard Manager implementation
|
||||||
|
will attempt to serialize all currently active sessions to a disk
|
||||||
|
file located via the <code>pathname</code> attribute. All such saved
|
||||||
|
sessions will then be deserialized and activated (assuming they have
|
||||||
|
not expired in the mean time) when the application reload is completed.</p>
|
||||||
|
|
||||||
|
<p>In order to successfully restore the state of session attributes,
|
||||||
|
all such attributes MUST implement the <code>java.io.Serializable</code>
|
||||||
|
interface. You MAY cause the Manager to enforce this restriction by
|
||||||
|
including the <code><distributable></code> element in your web
|
||||||
|
application deployment descriptor (<code>/WEB-INF/web.xml</code>).</p>
|
||||||
|
|
||||||
|
<p>The persistence across restarts provided by the
|
||||||
|
<strong>StandardManager</strong> is a simpler implementation than that
|
||||||
|
provided by the <strong>PersistentManager</strong>. If robust, production
|
||||||
|
quality persistence across restarts is required then the
|
||||||
|
<strong>PersistentManager</strong> should be used with an appropriate
|
||||||
|
configuration.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Disable_Session_Persistence">Disable Session Persistence</h4><div class="text">
|
||||||
|
|
||||||
|
<p>As documented above, every web application by default has
|
||||||
|
standard manager implementation configured, and it performs session
|
||||||
|
persistence across restarts. To disable this persistence feature, create
|
||||||
|
a <a href="context.html">Context</a> configuration file for your web
|
||||||
|
application and add the following element there:</p>
|
||||||
|
|
||||||
|
<div class="codeBox"><pre><code><Manager pathname="" /></code></pre></div>
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,320 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The Resources Component</title><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/resources">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The Resources Component</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Common_Attributes">Common Attributes</a></li><li><a href="#Standard_Implementation">Standard Implementation</a></li></ol></li><li><a href="#Nested_Components">Nested Components</a></li><li><a href="#Special_Features">Special Features</a></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>Resources</strong> element represents all the resources
|
||||||
|
available to the web application. This includes classes, JAR files, HTML, JSPs
|
||||||
|
and any other files that contribute to the web application. Implementations
|
||||||
|
are provided to use directories, JAR files and WARs as the source of these
|
||||||
|
resources and the resources implementation may be extended to provide support
|
||||||
|
for files stored in other forms such as in a database or a versioned
|
||||||
|
repository.</p>
|
||||||
|
|
||||||
|
<p>Resources are cached by default.</p>
|
||||||
|
|
||||||
|
<p><strong>Note: Running a webapp with non-filesystem based
|
||||||
|
Resources implementations is only possible when the webapp does not
|
||||||
|
rely on direct filesystem access to its own resources, and uses the methods
|
||||||
|
in the ServletContext interface to access them.</strong></p>
|
||||||
|
|
||||||
|
<p>A Resources element MAY be nested inside a
|
||||||
|
<a href="context.html">Context</a> component. If it is not included,
|
||||||
|
a default filesystem based Resources will be created automatically,
|
||||||
|
which is sufficient for most requirements.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Common_Attributes">Common Attributes</h4><div class="text">
|
||||||
|
|
||||||
|
<p>All implementations of <strong>Resources</strong> support the following
|
||||||
|
attributes:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">allowLinking</code></td><td>
|
||||||
|
<p>If the value of this flag is <code>true</code>, symlinks will be
|
||||||
|
allowed inside the web application, pointing to resources inside or
|
||||||
|
outside the web application base path. If not specified, the default
|
||||||
|
value of the flag is <code>false</code>.</p>
|
||||||
|
<p><b>NOTE: This flag MUST NOT be set to true on the Windows platform
|
||||||
|
(or any other OS which does not have a case sensitive filesystem),
|
||||||
|
as it will disable case sensitivity checks, allowing JSP source code
|
||||||
|
disclosure, among other security problems.</b></p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">cacheMaxSize</code></td><td>
|
||||||
|
<p>The maximum size of the static resource cache in kilobytes.
|
||||||
|
If not specified, the default value is <code>10240</code>
|
||||||
|
(10 megabytes). This value may be changed while the web application is
|
||||||
|
running (e.g. via JMX). If the cache is using more memory than the new
|
||||||
|
limit the cache will attempt to reduce in size over time to meet the
|
||||||
|
new limit. If necessary, <strong>cacheObjectMaxSize</strong> will be
|
||||||
|
reduced to ensure that it is no larger than
|
||||||
|
<code>cacheMaxSize/20</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">cacheObjectMaxSize</code></td><td>
|
||||||
|
<p>Maximum size of the static resource that will be placed in the cache.
|
||||||
|
If not specified, the default value is <code>512</code>
|
||||||
|
(512 kilobytes). If this value is greater than
|
||||||
|
<code>cacheMaxSize/20</code> it will be reduced to
|
||||||
|
<code>cacheMaxSize/20</code>. This value may be changed while the web
|
||||||
|
application is running (e.g. via JMX).</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">cacheTtl</code></td><td>
|
||||||
|
<p>The amount of time in milliseconds between the revalidation of cache
|
||||||
|
entries. If not specified, the default value is <code>5000</code> (5
|
||||||
|
seconds). This value may be changed while the web application is running
|
||||||
|
(e.g. via JMX). When a resource is cached it will inherit the TTL in
|
||||||
|
force at the time it was cached and retain that TTL until the resource
|
||||||
|
is evicted from the cache regardless of any subsequent changes that may
|
||||||
|
be made to this attribute.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">cachingAllowed</code></td><td>
|
||||||
|
<p>If the value of this flag is <code>true</code>, the cache for static
|
||||||
|
resources will be used. If not specified, the default value
|
||||||
|
of the flag is <code>true</code>. This value may be changed while the
|
||||||
|
web application is running (e.g. via JMX). When the cache is disabled
|
||||||
|
any resources currently in the cache are cleared from the cache.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">className</code></td><td>
|
||||||
|
<p>Java class name of the implementation to use. This class must
|
||||||
|
implement the <code>org.apache.catalina.WebResourceRoot</code>
|
||||||
|
interface. If not specified, the standard value (defined below) will be
|
||||||
|
used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">trackLockedFiles</code></td><td>
|
||||||
|
<p>Controls whether the track locked files feature is enabled. If
|
||||||
|
enabled, all calls to methods that return objects that lock a file and
|
||||||
|
need to be closed to release that lock (e.g.
|
||||||
|
<code>ServletContext.getResourceAsStream()</code>) will perform a number
|
||||||
|
of additional tasks.</p>
|
||||||
|
<ul>
|
||||||
|
<li>The stack trace at the point where the method was called will be
|
||||||
|
recorded and associated with the returned object.</li>
|
||||||
|
<li>The returned object will be wrapped so that the point where
|
||||||
|
close() (or equivalent) is called to release the resources can be
|
||||||
|
detected. Tracking of the object will cease once the resources have
|
||||||
|
been released.</li>
|
||||||
|
<li>All remaining locked resources on web application shutdown will be
|
||||||
|
logged and then closed.</li>
|
||||||
|
</ul>
|
||||||
|
<p>If not specified, the default value of <code>false</code> will be
|
||||||
|
used.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Standard_Implementation">Standard Implementation</h4><div class="text">
|
||||||
|
|
||||||
|
<h3>Standard Root Implementation</h3>
|
||||||
|
|
||||||
|
<p>The standard implementation of <strong>Resources</strong> is
|
||||||
|
<strong>org.apache.catalina.webresources.StandardRoot</strong>. It does not
|
||||||
|
support any additional attributes.</p>
|
||||||
|
|
||||||
|
<h3>Extracting Root Implementation</h3>
|
||||||
|
|
||||||
|
<p>The extracting implementation of <strong>Resources</strong> is
|
||||||
|
<strong>org.apache.catalina.webresources.ExtractingRoot</strong>. It does not
|
||||||
|
support any additional attributes.</p>
|
||||||
|
|
||||||
|
<p>When deploying web applications as packed WAR files, the extracting root
|
||||||
|
will extract any JAR files from <code>/WEB-INF/lib</code> to a
|
||||||
|
<code>application-jars</code> directory located in the web
|
||||||
|
application's working directory. These extracted JARs will be removed
|
||||||
|
when the web application stops.</p>
|
||||||
|
|
||||||
|
<p>Extracting JAR files from a packed WAR may provide a performance
|
||||||
|
improvement, particularly at web application start when JAR scanning is
|
||||||
|
required by the application.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><h3 id="Nested_Components">Nested Components</h3><div class="text">
|
||||||
|
|
||||||
|
<p>A web application's main resources are defined by the
|
||||||
|
<strong>docBase</strong> defined for the <a href="context.html">Context</a>.
|
||||||
|
Additional resources may be made available to the web application by defining
|
||||||
|
one or more nested components.</p>
|
||||||
|
|
||||||
|
<h3>PreResources</h3>
|
||||||
|
|
||||||
|
<p>PreResources are searched before the main resources. They will be searched
|
||||||
|
in the order they are defined. To configure PreResources, nest a
|
||||||
|
<PreResources> element inside the <Resources> element with the
|
||||||
|
following attributes:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><strong><code class="attributeName">base</code></strong></td><td>
|
||||||
|
<p>Identifies where the resources to be used are located. This attribute
|
||||||
|
is required by the <code>org.apache.catalina.WebResourceSet</code>
|
||||||
|
implementations provided by Tomcat and should specify the absolute path to
|
||||||
|
the file, directory or JAR where the resources are located. Custom
|
||||||
|
implementations may not require it.</p>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
|
||||||
|
<p>Java class name of the implementation to use. This class must
|
||||||
|
implement the <code>org.apache.catalina.WebResourceSet</code> interface.
|
||||||
|
Tomcat provides three standard implementations:
|
||||||
|
<code>org.apache.catalina.webresources.DirResourceSet</code>,
|
||||||
|
<code>org.apache.catalina.webresources.FileResourceSet</code> and
|
||||||
|
<code>org.apache.catalina.webresources.JarResourceSet</code>. Custom
|
||||||
|
implementations may also be used.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">internalPath</code></td><td>
|
||||||
|
<p>Identifies the path within the <strong>base</strong> where the
|
||||||
|
resources are to be found. This is typically only used with JAR files when
|
||||||
|
the resources are not located at the root of the JAR as is the case with
|
||||||
|
resource JARs. This attribute is required by the
|
||||||
|
<code>org.apache.catalina.WebResourceSet</code> implementations provided
|
||||||
|
by Tomcat and must start with '/'. Custom implementations may not require
|
||||||
|
it. If not specified, the default value '/' will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">readOnly</code></td><td>
|
||||||
|
<p>If <code>true</code>, resources within this resource set may not be
|
||||||
|
deleted, created or modified. For instance of
|
||||||
|
<code>org.apache.catalina.webresources.JarResourceSet</code>, this
|
||||||
|
attribute is hard-coded to <code>true</code> and may not be changed. For
|
||||||
|
instances of <code>org.apache.catalina.webresources.DirResourceSet</code>
|
||||||
|
and <code>org.apache.catalina.webresources.FileResourceSet</code> the
|
||||||
|
default value of this attribute is <code>false</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">webAppMount</code></td><td>
|
||||||
|
<p>Identifies the path within the web application that these resources
|
||||||
|
will be made available. For the
|
||||||
|
<code>org.apache.catalina.WebResourceSet</code> implementations provided
|
||||||
|
by Tomcat, this attribute is required and must start with '/'. Custom
|
||||||
|
implementations may not require it. If not specified, the default value of
|
||||||
|
'/' will be used.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
<h3>JAR resources</h3>
|
||||||
|
|
||||||
|
<p>JarResources are searched after the main resources but before the
|
||||||
|
PostResources. They will be searched in the order they are defined. To
|
||||||
|
configure JarResources, nest a <JarResources> element inside the
|
||||||
|
<Resources> element. The configuration attributes are the same as for
|
||||||
|
<strong>PreResources</strong>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>During web application start, the JAR scanning process checks scanned JARs
|
||||||
|
for content under <code>/META-INF/resources</code>. Where found, this static
|
||||||
|
content is added to the JarResources.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3>Post-resources</h3>
|
||||||
|
|
||||||
|
<p>PostResources are searched after the resource JARs. They will be searched
|
||||||
|
in the order they are defined. To configure PostResources, nest a
|
||||||
|
<PostResources> element inside the <Resources> element. The
|
||||||
|
configuration attributes are the same as for <strong>PreResources</strong>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3>Ordering</h3>
|
||||||
|
|
||||||
|
<p>In addition to the sets of resources described above, the standard
|
||||||
|
implementation also maintains ClassResources which represent the classes
|
||||||
|
contained in the JAR files mapped to <code>/WEB-INF/classes</code>. This
|
||||||
|
allows other components to search for classes with a single call rather than
|
||||||
|
one call to search <code>/WEB-INF/classes</code> followed by another to search
|
||||||
|
the JARs in <code>/WEB-INF/lib</code>. The ClassResources are populated
|
||||||
|
from the JARs mapped to <code>/WEB-INF/lib</code> when the web application
|
||||||
|
starts.</p>
|
||||||
|
|
||||||
|
<p>Therefore, the complete search order is:</p>
|
||||||
|
<ul>
|
||||||
|
<li>PreResources</li>
|
||||||
|
<li>MainResources</li>
|
||||||
|
<li>ClassResources</li>
|
||||||
|
<li>JarResources</li>
|
||||||
|
<li>PostResources</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>The population of ClassResources and JarResources at web application start
|
||||||
|
means that care needs to be taken to add JAR based resources correctly to
|
||||||
|
obtain the desired behaviour. Consider the following example:</p>
|
||||||
|
|
||||||
|
<div class="codeBox"><pre><code><Resources>
|
||||||
|
<PostResources base="D:\Projects\external\classes"
|
||||||
|
className="org.apache.catalina.webresources.DirResourceSet"
|
||||||
|
webAppMount="/WEB-INF/classes"/>
|
||||||
|
<PostResources base="D:\Projects\lib\library1.jar"
|
||||||
|
className="org.apache.catalina.webresources.FileResourceSet"
|
||||||
|
webAppMount="/WEB-INF/lib/library1.jar"/>
|
||||||
|
</Resources></code></pre></div>
|
||||||
|
|
||||||
|
<p>Since both resources are PostResources, it might be expected that
|
||||||
|
<code>D:\Projects\external\classes</code> will be searched for classes before
|
||||||
|
<code>D:\Projects\lib\library1.jar</code>. However, by adding the JAR using a
|
||||||
|
<code>FileResourceSet</code>, the JAR is mapped to <code>/WEB-INF/lib</code>
|
||||||
|
and will be processed at application start along with the other JARs in
|
||||||
|
<code>/WEB-INF/lib</code>. The classes from the JAR file will be added to the
|
||||||
|
ClassResources which means they will be searched before the classes from
|
||||||
|
<code>D:\Projects\external\classes</code>. If the desired behaviour is that
|
||||||
|
<code>D:\Projects\external\classes</code> is searched before
|
||||||
|
<code>D:\Projects\lib\library1.jar</code> then a slightly different
|
||||||
|
configuration is required:</p>
|
||||||
|
|
||||||
|
<div class="codeBox"><pre><code><Resources>
|
||||||
|
<PostResources base="D:\Projects\external\classes"
|
||||||
|
className="org.apache.catalina.webresources.DirResourceSet"
|
||||||
|
webAppMount="/WEB-INF/classes"/>
|
||||||
|
<PostResources base="D:\Projects\lib\library1.jar"
|
||||||
|
className="org.apache.catalina.webresources.JarResourceSet"
|
||||||
|
webAppMount="/WEB-INF/classes"/>
|
||||||
|
</Resources></code></pre></div>
|
||||||
|
|
||||||
|
<p>In short, the JAR file should be added as a <code>JarResourceSet</code>
|
||||||
|
mapped to <code>/WEB-INF/classes</code> rather than using a
|
||||||
|
<code>FileResourceSet</code> mapped to <code>/WEB-INF/lib</code>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div><h3 id="Special_Features">Special Features</h3><div class="text">
|
||||||
|
|
||||||
|
<p>No special features are associated with a <strong>Resources</strong>
|
||||||
|
element.</p>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,123 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The Server Component</title><meta name="author" content="Craig R. McClanahan"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/server">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The Server Component</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Common_Attributes">Common Attributes</a></li><li><a href="#Standard_Implementation">Standard Implementation</a></li></ol></li><li><a href="#Nested_Components">Nested Components</a></li><li><a href="#Special_Features">Special Features</a></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
|
||||||
|
<p>A <strong>Server</strong> element represents the entire Catalina
|
||||||
|
servlet container. Therefore, it must be the single outermost element
|
||||||
|
in the <code>conf/server.xml</code> configuration file. Its attributes
|
||||||
|
represent the characteristics of the servlet container as a whole.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Common_Attributes">Common Attributes</h4><div class="text">
|
||||||
|
|
||||||
|
<p>All implementations of <strong>Server</strong>
|
||||||
|
support the following attributes:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">className</code></td><td>
|
||||||
|
<p>Java class name of the implementation to use. This class must
|
||||||
|
implement the <code>org.apache.catalina.Server</code> interface.
|
||||||
|
If no class name is specified, the standard implementation will
|
||||||
|
be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">address</code></td><td>
|
||||||
|
<p>The TCP/IP address on which this server waits for a shutdown
|
||||||
|
command. If no address is specified, <code>localhost</code> is used.</p>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">port</code></strong></td><td>
|
||||||
|
<p>The TCP/IP port number on which this server waits for a shutdown
|
||||||
|
command. Set to <code>-1</code> to disable the shutdown port.</p>
|
||||||
|
<p>Note: Disabling the shutdown port works well when Tomcat is started
|
||||||
|
using <a href="https://commons.apache.org/daemon/">Apache Commons Daemon</a>
|
||||||
|
(running as a service on Windows or with jsvc on un*xes). It cannot be
|
||||||
|
used when running Tomcat with the standard shell scripts though, as it
|
||||||
|
will prevent shutdown.bat|.sh and catalina.bat|.sh from stopping it
|
||||||
|
gracefully.</p>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">shutdown</code></strong></td><td>
|
||||||
|
<p>The command string that must be received via a TCP/IP connection
|
||||||
|
to the specified port number, in order to shut down Tomcat.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Standard_Implementation">Standard Implementation</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The standard implementation of <strong>Server</strong> is
|
||||||
|
<strong>org.apache.catalina.core.StandardServer</strong>.
|
||||||
|
It supports the following additional attributes (in addition to the
|
||||||
|
common attributes listed above):</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><h3 id="Nested_Components">Nested Components</h3><div class="text">
|
||||||
|
|
||||||
|
<p>The following components may be nested inside a <strong>Server</strong>
|
||||||
|
element:</p>
|
||||||
|
<ul>
|
||||||
|
<li><a href="service.html"><strong>Service</strong></a> -
|
||||||
|
One or more service element.</li>
|
||||||
|
<li><a href="globalresources.html"><strong>GlobalNamingResources</strong></a> -
|
||||||
|
Configure the JNDI global resources for the server.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Special_Features">Special Features</h3><div class="text">
|
||||||
|
|
||||||
|
<p>There are no special features associated with a <strong>Server</strong>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,110 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The Service Component</title><meta name="author" content="Craig R. McClanahan"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/service">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The Service Component</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Common_Attributes">Common Attributes</a></li><li><a href="#Standard_Implementation">Standard Implementation</a></li></ol></li><li><a href="#Nested_Components">Nested Components</a></li><li><a href="#Special_Features">Special Features</a></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
|
||||||
|
<p>A <strong>Service</strong> element represents the combination of one or
|
||||||
|
more <strong>Connector</strong> components that share a single
|
||||||
|
<a href="engine.html">Engine</a> component for processing incoming
|
||||||
|
requests. One or more <strong>Service</strong> elements may be nested
|
||||||
|
inside a <a href="server.html">Server</a> element.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Common_Attributes">Common Attributes</h4><div class="text">
|
||||||
|
|
||||||
|
<p>All implementations of <strong>Service</strong>
|
||||||
|
support the following attributes:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">className</code></td><td>
|
||||||
|
<p>Java class name of the implementation to use. This class must
|
||||||
|
implement the <code>org.apache.catalina.Service</code> interface.
|
||||||
|
If no class name is specified, the standard implementation will
|
||||||
|
be used.</p>
|
||||||
|
</td></tr><tr><td><strong><code class="attributeName">name</code></strong></td><td>
|
||||||
|
<p>The display name of this <strong>Service</strong>, which will
|
||||||
|
be included in log messages if you utilize standard Catalina
|
||||||
|
components. The name of each <strong>Service</strong> that is
|
||||||
|
associated with a particular <a href="server.html">Server</a>
|
||||||
|
must be unique.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Standard_Implementation">Standard Implementation</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The standard implementation of <strong>Service</strong> is
|
||||||
|
<strong>org.apache.catalina.core.StandardService</strong>.
|
||||||
|
It supports the following additional attributes (in addition to the
|
||||||
|
common attributes listed above):</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><h3 id="Nested_Components">Nested Components</h3><div class="text">
|
||||||
|
|
||||||
|
<p>The only components that may be nested inside a <strong>Service</strong>
|
||||||
|
element are one or more <strong>Connector</strong> elements,
|
||||||
|
followed by exactly one <a href="engine.html">Engine</a> element.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Special_Features">Special Features</h3><div class="text">
|
||||||
|
|
||||||
|
<p>There are no special features associated with a <strong>Service</strong>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,131 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - The SessionIdGenerator Component</title><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/sessionidgenerator">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The SessionIdGenerator Component</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Common_Attributes">Common Attributes</a></li><li><a href="#Standard_Implementation">Standard Implementation</a></li></ol></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
|
||||||
|
<p>The <strong>SessionIdGenerator</strong> element represents the <em>session
|
||||||
|
id generator</em> that will be used to create session ids used by
|
||||||
|
web application HTTP sessions.</p>
|
||||||
|
|
||||||
|
<p>A SessionIdGenerator element MAY be nested inside a
|
||||||
|
<a href="manager.html">Manager</a> component. If it is not included,
|
||||||
|
a default SessionIdGenerator configuration will be created automatically, which
|
||||||
|
is sufficient for most requirements, — see
|
||||||
|
<em>Standard SessionIdGenerator Implementation</em> below for the details
|
||||||
|
of this configuration.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Attributes">Attributes</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Common_Attributes">Common Attributes</h4><div class="text">
|
||||||
|
|
||||||
|
<p>All implementations of <strong>SessionIdGenerator</strong>
|
||||||
|
support the following attributes:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">className</code></td><td>
|
||||||
|
<p>Java class name of the implementation to use. This class must
|
||||||
|
implement the <code>org.apache.catalina.SessionIdGenerator</code> interface.
|
||||||
|
If not specified, the standard value (defined below) will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">jvmRoute</code></td><td>
|
||||||
|
<p>A routing identifier for this Tomcat instance. It will be added
|
||||||
|
to the session id to allow for stateless stickyness routing by
|
||||||
|
load balancers. The details on how the <code>jvmRoute</code>
|
||||||
|
will be included in the id are implementation dependent.
|
||||||
|
See <a href="#Standard_Implementation">Standard Implementation</a>
|
||||||
|
for the default behavior.</p>
|
||||||
|
|
||||||
|
<p><strong>NOTE</strong> - The value for this property is inherited
|
||||||
|
automatically from the <code>jvmRoute</code> attribute of the
|
||||||
|
<a href="engine.html">Engine</a> element.</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">sessionIdLength</code></td><td>
|
||||||
|
<p>The length of session ids created by this SessionIdGenerator.
|
||||||
|
The details on how the <code>sessionIdLength</code>
|
||||||
|
influences the session id length are implementation dependent.
|
||||||
|
See <a href="#Standard_Implementation">Standard Implementation</a>
|
||||||
|
for the default behavior.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Standard_Implementation">Standard Implementation</h4><div class="text">
|
||||||
|
|
||||||
|
<p>Tomcat provides a standard implementations of <strong>SessionIdGenerator</strong>
|
||||||
|
for use.</p>
|
||||||
|
|
||||||
|
<h3>Standard SessionIdGenerator Implementation</h3>
|
||||||
|
|
||||||
|
<p>The standard implementation of <strong>SessionIdGenerator</strong> is
|
||||||
|
<strong>org.apache.catalina.util.StandardSessionIdGenerator</strong>.
|
||||||
|
It supports the following attributes:</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Attribute
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="attributeName">jvmRoute</code></td><td>
|
||||||
|
<p>A routing identifier for this Tomcat instance. It will be added
|
||||||
|
to the end of the session id separated by a ".".</p>
|
||||||
|
</td></tr><tr><td><code class="attributeName">sessionIdLength</code></td><td>
|
||||||
|
<p>The length of session ids created by this SessionIdGenerator.
|
||||||
|
More precisely the session id length is twice the value of
|
||||||
|
<code>sessionIdLength</code> plus the length of the trailing
|
||||||
|
<code>jvmRoute</code> if given. The factor 2 is because
|
||||||
|
the session id is constructed using <code>sessionIdLength</code>
|
||||||
|
random bytes, each byte being encoded in two hex characters
|
||||||
|
in the actual id. The default value is 16.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,626 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.0.53) - System Properties</title><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/config/systemprops">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>System Properties</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Property_replacements">Property replacements</a></li><li><a href="#Clustering">Clustering</a></li><li><a href="#Expression_Language">Expression Language</a></li><li><a href="#Jasper">Jasper</a></li><li><a href="#Security">Security</a></li><li><a href="#Specifications">Specifications</a></li><li><a href="#Sessions">Sessions</a></li><li><a href="#Logging">Logging</a></li><li><a href="#JAR_Scanning">JAR Scanning</a></li><li><a href="#Websockets">Websockets</a></li><li><a href="#Other">Other</a></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
<p>The following sections list the system properties that may be set to modify
|
||||||
|
the default Tomcat behaviour.</p>
|
||||||
|
</div><h3 id="Property_replacements">Property replacements</h3><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Property
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="propertyName">org.apache.tomcat.util.digester. PROPERTY_SOURCE</code></td><td>
|
||||||
|
<p>Set this to a fully qualified name of a class that implements
|
||||||
|
<code>org.apache.tomcat.util.IntrospectionUtils.PropertySource</code>.
|
||||||
|
Required to have a public constructor with no arguments.</p>
|
||||||
|
<p>Use this to add a property source, that will be invoked when <code>${parameter}</code>
|
||||||
|
denoted parameters are found in the XML files that Tomcat parses.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div><h3 id="Clustering">Clustering</h3><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Property
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="propertyName">org.apache.catalina. tribes.dns_lookups</code></td><td>
|
||||||
|
<p>If <code>true</code>, the clustering module will attempt to use DNS to
|
||||||
|
resolve any host names provided in the cluster configuration.</p>
|
||||||
|
<p>If not specified, the default value of <code>false</code> will be used.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div><h3 id="Expression_Language">Expression Language</h3><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Property
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="propertyName">org.apache.el.BeanELResolver. CACHE_SIZE</code></td><td>
|
||||||
|
<p>The number of javax.el.BeanELResolver.BeanProperties objects that will
|
||||||
|
be cached by the EL Parser.</p>
|
||||||
|
<p>If not specified, the default of <code>1000</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.el.ExpressionBuilder. CACHE_SIZE</code></td><td>
|
||||||
|
<p>The number of parsed EL expressions that will be cached by the EL
|
||||||
|
Parser.</p>
|
||||||
|
<p>If not specified, the default of <code>5000</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.el.parser. COERCE_TO_ZERO</code></td><td>
|
||||||
|
<p>If <code>true</code>, when coercing <code>null</code>s to objects of
|
||||||
|
type Number, Character or Boolean the result will be <code>0</code> for
|
||||||
|
Number and Character types and <code>false</code> for Boolean as required
|
||||||
|
by the EL 2.2 and earlier specifications. If this property is
|
||||||
|
<code>false</code> the result of the coercion will be <code>null</code> as
|
||||||
|
required by the EL 3.0 specification.</p>
|
||||||
|
<p>If not specified, the default value of <code>false</code> will be
|
||||||
|
used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.el.parser. SKIP_IDENTIFIER_CHECK</code></td><td>
|
||||||
|
<p>If <code>true</code>, when parsing expressions, identifiers will not be
|
||||||
|
checked to ensure that they conform to the Java Language Specification for
|
||||||
|
Java identifiers.</p>
|
||||||
|
<p>If not specified, the default value of <code>false</code> will be used.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
</div><h3 id="Jasper">Jasper</h3><div class="text">
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Property
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="propertyName">org.apache.jasper.compiler. Generator.POOL_TAGS_WITH_EXTENDS</code></td><td>
|
||||||
|
<p>By default, JSPs that use their own base class via the extends
|
||||||
|
attribute of the page directive, will have Tag pooling disabled since
|
||||||
|
Jasper cannot guarantee that the necessary initialisation will have taken
|
||||||
|
place. This can have a negative impact on performance. Providing the
|
||||||
|
alternative base class calls _jspInit() from Servlet.init(), setting this
|
||||||
|
property to <code>true</code> will enable pooling with an alternative base
|
||||||
|
class. If the alternative base class does not call _jspInit() and this
|
||||||
|
property is <code>true</code>, NPEs will occur when attempting to use
|
||||||
|
tags.</p>
|
||||||
|
<p>If not specified, the default value of <code>false</code> will be used.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.jasper.compiler. Generator.STRICT_GET_PROPERTY</code></td><td>
|
||||||
|
<p>If <code>true</code>, the requirement to have the object referenced in
|
||||||
|
<code>jsp:getProperty</code> action to be previously "introduced"
|
||||||
|
to the JSP processor, as specified in the chapter JSP.5.3 of JSP 2.0 and
|
||||||
|
later specifications, is enforced.</p>
|
||||||
|
<p>If not specified, the specification compliant default of
|
||||||
|
<code>true</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.jasper.compiler. Generator.VAR_EXPRESSIONFACTORY</code></td><td>
|
||||||
|
<p>The name of the variable to use for the expression language expression
|
||||||
|
factory.</p>
|
||||||
|
<p>If not specified, the default value of <code>_el_expressionfactory</code>
|
||||||
|
will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.jasper.compiler. Generator.VAR_INSTANCEMANAGER</code></td><td>
|
||||||
|
<p>The name of the variable to use for the instance manager factory.</p>
|
||||||
|
<p>If not specified, the default value of <code>_jsp_instancemanager</code>
|
||||||
|
will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.jasper.compiler. Parser.STRICT_QUOTE_ESCAPING</code></td><td>
|
||||||
|
<p><strong>Deprecated</strong>. Configures the default setting for the
|
||||||
|
<code>strictQuoteEscaping</code> JSP initialisation paramater.</p>
|
||||||
|
<p>If not specified, the specification compliant default of
|
||||||
|
<code>true</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.jasper.compiler. Parser.STRICT_WHITESPACE</code></td><td>
|
||||||
|
<p>If <code>false</code> the requirements for whitespace before an
|
||||||
|
attribute name will be relaxed so that the lack of whitespace will not
|
||||||
|
cause an error.</p>
|
||||||
|
<p>If not specified, the specification compliant default of
|
||||||
|
<code>true</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.jasper.runtime. BodyContentImpl.BUFFER_SIZE</code></td><td>
|
||||||
|
<p>The size (in characters) to use when creating a tag buffer.</p>
|
||||||
|
<p>If not specified, the default value of
|
||||||
|
<code>org.apache.jasper.Constants.DEFAULT_TAG_BUFFER_SIZE</code> (512)
|
||||||
|
will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.jasper.runtime. BodyContentImpl.LIMIT_BUFFER</code></td><td>
|
||||||
|
<p>If <code>true</code>, any tag buffer that expands beyond
|
||||||
|
<code>org.apache.jasper.runtime.BodyContentImpl.BUFFER_SIZE</code> will be
|
||||||
|
destroyed and a new buffer created.</p>
|
||||||
|
<p>If not specified, the default value of <code>false</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.jasper.runtime. JspFactoryImpl.USE_POOL</code></td><td>
|
||||||
|
<p>If <code>true</code>, a ThreadLocal <code>PageContext</code> pool will
|
||||||
|
be used.</p>
|
||||||
|
<p>If not specified, the default value of <code>true</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.jasper.runtime. JspFactoryImpl.POOL_SIZE</code></td><td>
|
||||||
|
<p>The size of the ThreadLocal <code>PageContext</code>.</p>
|
||||||
|
<p>If not specified, the default value of <code>8</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.jasper.Constants. JSP_SERVLET_BASE</code></td><td>
|
||||||
|
<p>The base class of the Servlets generated from the JSPs.</p>
|
||||||
|
<p>If not specified, the default value of
|
||||||
|
<code>org.apache.jasper.runtime.HttpJspBase</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.jasper.Constants. SERVICE_METHOD_NAME</code></td><td>
|
||||||
|
<p>The name of the service method called by the base class.</p>
|
||||||
|
<p>If not specified, the default value of <code>_jspService</code>
|
||||||
|
will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.jasper.Constants. SERVLET_CLASSPATH</code></td><td>
|
||||||
|
<p>The name of the ServletContext attribute that provides the classpath
|
||||||
|
for the JSP.</p>
|
||||||
|
<p>If not specified, the default value of
|
||||||
|
<code>org.apache.catalina.jsp_classpath</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.jasper.Constants. JSP_FILE</code></td><td>
|
||||||
|
<p>The name of the request attribute for <code><jsp-file></code>
|
||||||
|
element of a servlet definition. If present on a request, this overrides
|
||||||
|
the value returned by <code>request.getServletPath()</code> to select the
|
||||||
|
JSP page to be executed.</p>
|
||||||
|
<p>If not specified, the default value of
|
||||||
|
<code>org.apache.catalina.jsp_file</code> will be used.</p>
|
||||||
|
<p><strong>Deprecated:</strong> This will be removed in Tomcat 9.0.x
|
||||||
|
onwards. It is replaced by the use of the jspFile servlet initialisation
|
||||||
|
parameter</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.jasper.Constants. PRECOMPILE</code></td><td>
|
||||||
|
<p>The name of the query parameter that causes the JSP engine to just
|
||||||
|
pregenerate the servlet but not invoke it.</p>
|
||||||
|
<p>If not specified, the default value of <code>jsp_precompile</code>
|
||||||
|
will be used, as defined by JSP specification (JSP.11.4.2).</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.jasper.Constants. JSP_PACKAGE_NAME</code></td><td>
|
||||||
|
<p>The default package name for compiled jsp pages.</p>
|
||||||
|
<p>If not specified, the default value of <code>org.apache.jsp</code>
|
||||||
|
will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.jasper.Constants. TAG_FILE_PACKAGE_NAME</code></td><td>
|
||||||
|
<p>The default package name for tag handlers generated from tag files.</p>
|
||||||
|
<p>If not specified, the default value of <code>org.apache.jsp.tag</code>
|
||||||
|
will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.jasper.Constants. ALT_DD_ATTR</code></td><td>
|
||||||
|
<p>The servlet context attribute under which the alternate deployment
|
||||||
|
descriptor for this web application is stored.</p>
|
||||||
|
<p>If not specified, the default value of
|
||||||
|
<code>org.apache.catalina.deploy.alt_dd</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.jasper.Constants. TEMP_VARIABLE_NAME_PREFIX</code></td><td>
|
||||||
|
<p>Prefix to use for generated temporary variable names.</p>
|
||||||
|
<p>If not specified, the default value of <code>_jspx_temp</code>
|
||||||
|
will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.jasper.Constants. USE_INSTANCE_MANAGER_FOR_TAGS</code></td><td>
|
||||||
|
<p>If <code>true</code>, the instance manager is used to obtain tag
|
||||||
|
handler instances.</p>
|
||||||
|
<p>If not specified, the default value of <code>false</code> will be used.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div><h3 id="Security">Security</h3><div class="text">
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Property
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="propertyName">org.apache.catalina.connector. RECYCLE_FACADES</code></td><td>
|
||||||
|
<p>If this is <code>true</code> or if a security manager is in use a new
|
||||||
|
facade object will be created for each request.</p>
|
||||||
|
<p>If not specified, the default value of <code>false</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.catalina.connector. CoyoteAdapter.ALLOW_BACKSLASH</code></td><td>
|
||||||
|
<p>If this is <code>true</code> the '\' character will be permitted as a
|
||||||
|
path delimiter.</p>
|
||||||
|
<p>If not specified, the default value of <code>false</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.tomcat.util.buf. UDecoder.ALLOW_ENCODED_SLASH</code></td><td>
|
||||||
|
<p>If this is <code>true</code> '%2F' and '%5C' will be permitted as path
|
||||||
|
delimiters.</p>
|
||||||
|
<p>If not specified, the default value of <code>false</code> will be used.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div><h3 id="Specifications">Specifications</h3><div class="text">
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Property
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="propertyName">org.apache.catalina. STRICT_SERVLET_COMPLIANCE</code></td><td>
|
||||||
|
<p>The default value of this system property is <code>false</code>.</p>
|
||||||
|
<p>If this is <code>true</code> the default values will be changed for:</p>
|
||||||
|
<ul>
|
||||||
|
<li><code>org.apache.catalina.core.<br>ApplicationContext.GET_RESOURCE_REQUIRE_SLASH</code></li>
|
||||||
|
<li><code>org.apache.catalina.core.<br>ApplicationDispatcher.WRAP_SAME_OBJECT</code></li>
|
||||||
|
<li><code>org.apache.catalina.core.<br>StandardHostValve.ACCESS_SESSION</code></li>
|
||||||
|
<li><code>org.apache.catalina.session.<br>StandardSession.ACTIVITY_CHECK</code></li>
|
||||||
|
<li><code>org.apache.catalina.session.<br>StandardSession.LAST_ACCESS_AT_START</code></li>
|
||||||
|
<li><code>org.apache.tomcat.util.http.<br>ServerCookie.ALWAYS_ADD_EXPIRES</code></li>
|
||||||
|
<li><code>org.apache.tomcat.util.http.<br>ServerCookie.FWD_SLASH_IS_SEPARATOR</code></li>
|
||||||
|
<li><code>org.apache.tomcat.util.http.<br>ServerCookie.STRICT_NAMING</code></li>
|
||||||
|
<li>The <code>URIEncoding</code> attribute of any
|
||||||
|
<a href="http.html">HTTP connector</a> or
|
||||||
|
<a href="ajp.html">AJP connector</a> element.</li>
|
||||||
|
<li>The <code>resourceOnlyServlets</code> attribute of any
|
||||||
|
<a href="context.html">Context</a> element.</li>
|
||||||
|
<li>The <code>tldValidation</code> attribute of any
|
||||||
|
<a href="context.html">Context</a> element.</li>
|
||||||
|
<li>The <code>useRelativeRedirects</code> attribute of any
|
||||||
|
<a href="context.html">Context</a> element.</li>
|
||||||
|
<li>The <code>xmlNamespaceAware</code> attribute of any
|
||||||
|
<a href="context.html">Context</a> element.</li>
|
||||||
|
<li>The <code>xmlValidation</code> attribute of any
|
||||||
|
<a href="context.html">Context</a> element.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Note that changing a number of the above defaults is likely to break
|
||||||
|
the majority of systems as some browsers are unable to correctly handle
|
||||||
|
the cookie headers that result from a strict adherence to the
|
||||||
|
specifications. Defaults, regardless of whether or not they have been
|
||||||
|
changed by setting
|
||||||
|
<code>org.apache.catalina.STRICT_SERVLET_COMPLIANCE</code> can always be
|
||||||
|
overridden by explicitly setting the appropriate system property or element
|
||||||
|
attribute.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.catalina.connector. Response.ENFORCE_ENCODING_IN_GET_WRITER</code></td><td>
|
||||||
|
<p>If this is <code>true</code> then
|
||||||
|
a call to <code>Response.getWriter()</code> if no character encoding
|
||||||
|
has been specified will result in subsequent calls to
|
||||||
|
<code>Response.getCharacterEncoding()</code> returning
|
||||||
|
<code>ISO-8859-1</code> and the <code>Content-Type</code> response header
|
||||||
|
will include a <code>charset=ISO-8859-1</code> component. (SRV.15.2.22.1)</p>
|
||||||
|
<p>If not specified, the default specification compliant value of
|
||||||
|
<code>true</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.catalina.core.ApplicationContext .GET_RESOURCE_REQUIRE_SLASH</code></td><td>
|
||||||
|
<p>If this is <code>true</code> then the path passed to
|
||||||
|
<code>ServletContext.getResource()</code> or
|
||||||
|
<code>ServletContext.getResourceAsStream()</code> must start with
|
||||||
|
"/". If <code>false</code>, code like
|
||||||
|
<code>getResource("myfolder/myresource.txt")</code> will work as Tomcat
|
||||||
|
will prepend "/" to the provided path.</p>
|
||||||
|
<p>If <code>org.apache.catalina.STRICT_SERVLET_COMPLIANCE</code> is set to
|
||||||
|
<code>true</code>, the default of this setting will be <code>true</code>,
|
||||||
|
else the default value will be <code>false</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.catalina.core. ApplicationDispatcher.WRAP_SAME_OBJECT</code></td><td>
|
||||||
|
<p>If this is <code>true</code> then any wrapped request or response
|
||||||
|
object passed to an application dispatcher will be checked to ensure that
|
||||||
|
it has wrapped the original request or response.</p>
|
||||||
|
<p>If <code>org.apache.catalina.STRICT_SERVLET_COMPLIANCE</code> is set to
|
||||||
|
<code>true</code>, the default of this setting will be <code>true</code>,
|
||||||
|
else the default value will be <code>false</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.tomcat.websocket. STRICT_SPEC_COMPLIANCE</code></td><td>
|
||||||
|
<p>The default value of this system property is <code>false</code>.</p>
|
||||||
|
<p>If this is <code>true</code> the default values will be changed for:</p>
|
||||||
|
<ul>
|
||||||
|
<li><code>org.apache.tomcat.websocket.server#isEnforceNoAddAfterHandshake</code>
|
||||||
|
(default changes from <code>false</code> to <code>true</code>)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.tomcat.util.http. ServerCookie.ALLOW_EQUALS_IN_VALUE</code></td><td>
|
||||||
|
<p>Deprecated. This will be removed in Tomcat 9. Specify the
|
||||||
|
<code>allowEqualsInValue</code> attribute on the
|
||||||
|
<a href="cookie-processor.html">org.apache.tomcat.util.http.LegacyCookieProcessor</a>
|
||||||
|
instead.</p>
|
||||||
|
<p>This sets the default value for <code>allowEqualsInValue</code>
|
||||||
|
attribute on the
|
||||||
|
<code>org.apache.tomcat.util.http.LegacyCookieProcessor</code>.
|
||||||
|
If this is <code>true</code> Tomcat will allow '<code>=</code>'
|
||||||
|
characters when parsing unquoted cookie values. If <code>false</code>,
|
||||||
|
cookie values containing '<code>=</code>' will be terminated when the
|
||||||
|
'<code>=</code>' is encountered and the remainder of the cookie value will
|
||||||
|
be dropped.</p>
|
||||||
|
<p>If not specified, the default specification compliant value of
|
||||||
|
<code>false</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.tomcat.util.http. ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V0</code></td><td>
|
||||||
|
<p>Deprecated. This will be removed in Tomcat 9. Specify the
|
||||||
|
<code>allowHttpSepsInV0</code> attribute on the
|
||||||
|
<a href="cookie-processor.html">org.apache.tomcat.util.http.LegacyCookieProcessor</a>
|
||||||
|
instead.</p>
|
||||||
|
<p>This sets the default value for <code>allowHttpSepsInV0</code>
|
||||||
|
attribute on the
|
||||||
|
<code>org.apache.tomcat.util.http.LegacyCookieProcessor</code>.
|
||||||
|
If this is <code>true</code> Tomcat will allow HTTP separators in
|
||||||
|
cookie names and values.</p>
|
||||||
|
<p>If not specified, the default specification compliant value of
|
||||||
|
<code>false</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.tomcat.util.http. ServerCookie.ALLOW_NAME_ONLY</code></td><td>
|
||||||
|
<p>Deprecated. This will be removed in Tomcat 9. Specify the
|
||||||
|
<code>allowNameOnly</code> attribute on the
|
||||||
|
<a href="cookie-processor.html">org.apache.tomcat.util.http.LegacyCookieProcessor</a>
|
||||||
|
instead.</p>
|
||||||
|
<p>If this is <code>false</code> then the requirements of the cookie specifications
|
||||||
|
that cookies must have values will be enforced and cookies consisting only
|
||||||
|
of a name but no value will be ignored.</p>
|
||||||
|
<p>If not specified, the default specification compliant value of
|
||||||
|
<code>false</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.tomcat.util.http. ServerCookie.ALWAYS_ADD_EXPIRES</code></td><td>
|
||||||
|
<p>If this is <code>true</code> Tomcat will always add an expires
|
||||||
|
parameter to a SetCookie header even for cookies with version greater than
|
||||||
|
zero. This is to work around a known IE6 and IE7 bug that causes IE to
|
||||||
|
ignore the Max-Age parameter in a SetCookie header.</p>
|
||||||
|
<p>If <code>org.apache.catalina.STRICT_SERVLET_COMPLIANCE</code> is set to
|
||||||
|
<code>true</code>, the default of this setting will be <code>false</code>,
|
||||||
|
else the default value will be <code>true</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.tomcat.util.http. ServerCookie.FWD_SLASH_IS_SEPARATOR</code></td><td>
|
||||||
|
<p> If this is true then the <code>/</code> (forward slash) character will
|
||||||
|
be treated as a separator. Note that this character is frequently used in
|
||||||
|
cookie path attributes and some browsers will fail to process a cookie if
|
||||||
|
the path attribute is quoted as is required by a strict adherence to the
|
||||||
|
specifications. This is highly likely to break session tracking using
|
||||||
|
cookies.</p>
|
||||||
|
<p>If <code>org.apache.catalina.STRICT_SERVLET_COMPLIANCE</code> is set to
|
||||||
|
<code>true</code>, the default of this setting will be <code>true</code>,
|
||||||
|
else the default value will be <code>false</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.tomcat.util.http. ServerCookie.PRESERVE_COOKIE_HEADER</code></td><td>
|
||||||
|
<p>Deprecated. This attribute is no longer used. From Tomcat 8.0.31,
|
||||||
|
Tomcat will always preserve the cookie header returned by
|
||||||
|
<code>HttpServletRequest.getHeader()</code>. This will be removed in
|
||||||
|
Tomcat 9.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.tomcat.util.http. ServerCookie.STRICT_NAMING</code></td><td>
|
||||||
|
<p> If this is <code>true</code> then the requirements of the Servlet specification
|
||||||
|
that Cookie names must adhere to RFC2109 (no use of separators) will be
|
||||||
|
enforced.</p>
|
||||||
|
<p>If <code>org.apache.catalina.STRICT_SERVLET_COMPLIANCE</code> is set to
|
||||||
|
<code>true</code>, the default of this setting will be <code>true</code>,
|
||||||
|
else the default value will be <code>false</code>.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div><h3 id="Sessions">Sessions</h3><div class="text">
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Property
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="propertyName">org.apache.catalina.authenticator. Constants.SSO_SESSION_COOKIE_NAME</code></td><td>
|
||||||
|
<p>An alternative name for the single sign on session cookie. Defaults to
|
||||||
|
<code>JSESSIONIDSSO</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.catalina.core. StandardHostValve.ACCESS_SESSION</code></td><td>
|
||||||
|
<p>If this is <code>true</code>, every request that is associated with a
|
||||||
|
session will cause the session's last accessed time to be updated
|
||||||
|
regardless of whether or not the request explicitly accesses the session.</p>
|
||||||
|
<p>If <code>org.apache.catalina.STRICT_SERVLET_COMPLIANCE</code> is set to
|
||||||
|
<code>true</code>, the default of this setting will be <code>true</code>,
|
||||||
|
else the default value will be <code>false</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.catalina.session. StandardSession.ACTIVITY_CHECK</code></td><td>
|
||||||
|
<p>If this is <code>true</code>, Tomcat will track the number of active
|
||||||
|
requests for each session. When determining if a session is valid, any
|
||||||
|
session with at least one active request will always be considered valid.</p>
|
||||||
|
<p>If <code>org.apache.catalina.STRICT_SERVLET_COMPLIANCE</code> is set to
|
||||||
|
<code>true</code>, the default of this setting will be <code>true</code>,
|
||||||
|
else the default value will be <code>false</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.catalina.session. StandardSession.LAST_ACCESS_AT_START</code></td><td>
|
||||||
|
<p>If this is <code>true</code>, the last accessed time for sessions will
|
||||||
|
be calculated from the beginning of the previous request. If
|
||||||
|
<code>false</code>, the last accessed time for sessions will be calculated
|
||||||
|
from the end of the previous request. This also affects how the idle time
|
||||||
|
is calculated.</p>
|
||||||
|
<p>If <code>org.apache.catalina.STRICT_SERVLET_COMPLIANCE</code> is set to
|
||||||
|
<code>true</code>, the default of this setting will be <code>true</code>,
|
||||||
|
else the default value will be <code>false</code>.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div><h3 id="Logging">Logging</h3><div class="text">
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Property
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="propertyName">org.apache.juli.formatter</code></td><td>
|
||||||
|
<p>If no logging configuration file is specified and no logging configuration class is specified
|
||||||
|
using the <code>java.util.logging.config.class</code> and <code>java.util.logging.config.file</code>
|
||||||
|
properties the default logging framework <code>org.apache.juli</code> will use the default
|
||||||
|
<code>java.util.logging.SimpleFormatter</code> for all console output.
|
||||||
|
To simply override the console output formatter, one can use the described property. Example:
|
||||||
|
<code>-Dorg.apache.juli.formatter=org.apache.juli.OneLineFormatter</code></p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.juli. AsyncOverflowDropType</code></td><td>
|
||||||
|
<p>When the memory limit of records has been reached the system needs to determine what action to take.
|
||||||
|
Currently there are three actions that can be taken:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li><code>int OVERFLOW_DROP_LAST = 1</code> - the record that caused the overflow will be dropped and not logged</li>
|
||||||
|
<li><code>int OVERFLOW_DROP_FIRST = 2</code> - the record that is next in line to be logged will be dropped to make room for the latest record on the queue</li>
|
||||||
|
<li><code>int OVERFLOW_DROP_FLUSH = 3</code> - suspend the thread while the queue empties out and flushes the entries to the write buffer</li>
|
||||||
|
<li><code>int OVERFLOW_DROP_CURRENT = 4</code> - drop the current log entry</li>
|
||||||
|
</ul>
|
||||||
|
<p>The default value is <code>1</code> (OVERFLOW_DROP_LAST).</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.juli. AsyncMaxRecordCount</code></td><td>
|
||||||
|
<p>The max number of log records that the async logger will keep in memory. When this limit is reached and a new record is being logged by the
|
||||||
|
JULI framework the system will take an action based on the <code>org.apache.juli.AsyncOverflowDropType</code> setting.</p>
|
||||||
|
<p>The default value is <code>10000</code> records.
|
||||||
|
This number represents the global number of records, not on a per handler basis.
|
||||||
|
</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.juli. AsyncLoggerPollInterval</code></td><td>
|
||||||
|
<p>The poll interval in milliseconds for the asynchronous logger thread in milliseconds.
|
||||||
|
If the log queue is empty, the async thread will issue a poll(poll interval)
|
||||||
|
in order to not wake up too often.</p>
|
||||||
|
<p>The default value is <code>1000</code> milliseconds.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.juli.logging. UserDataHelper.CONFIG</code></td><td>
|
||||||
|
<p>The type of logging to use for errors generated by invalid input data.
|
||||||
|
The options are: <code>DEBUG_ALL</code>, <code>INFO_THEN_DEBUG</code>,
|
||||||
|
<code>INFO_ALL</code> and <code>NONE</code>. When
|
||||||
|
<code>INFO_THEN_DEBUG</code> is used, the period for which errors are
|
||||||
|
logged at DEBUG rather than INFO is controlled by the system property
|
||||||
|
<code>org.apache.juli.logging.UserDataHelper.SUPPRESSION_TIME</code>.
|
||||||
|
</p>
|
||||||
|
<p>The default value is <code>INFO_THEN_DEBUG</code>.</p>
|
||||||
|
<p>The errors currently logged using this system are:</p>
|
||||||
|
<ul>
|
||||||
|
<li>invalid cookies;</li>
|
||||||
|
<li>invalid parameters;</li>
|
||||||
|
<li>too many headers, too many parameters (hitting
|
||||||
|
<code>maxHeaderCount</code> or <code>maxParameterCount</code> limits
|
||||||
|
of a <a href="http.html">connector</a>).</li>
|
||||||
|
<li>invalid host names</li>
|
||||||
|
</ul>
|
||||||
|
<p>Other errors triggered by invalid input data may be added to this
|
||||||
|
system in later versions.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.juli.logging. UserDataHelper.SUPPRESSION_TIME</code></td><td>
|
||||||
|
<p>When using <code>INFO_THEN_DEBUG</code> for
|
||||||
|
<code>org.apache.juli.logging.UserDataHelper.CONFIG</code> this system
|
||||||
|
property controls how long messages are logged at DEBUG after a message
|
||||||
|
has been logged at INFO. Once this period has elapsed, the next message
|
||||||
|
will be logged at INFO followed by a new suppression period where
|
||||||
|
messages are logged at DEBUG and so on. The value is measured
|
||||||
|
in seconds.</p>
|
||||||
|
<p>A value of <code>0</code> is equivalent to using <code>INFO_ALL</code>
|
||||||
|
for <code>org.apache.juli.logging.UserDataHelper.CONFIG</code>.</p>
|
||||||
|
<p>A negative value means an infinite suppression period.</p>
|
||||||
|
<p>The default value is <code>86400</code> (24 hours).</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div><h3 id="JAR_Scanning">JAR Scanning</h3><div class="text">
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Property
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="propertyName">tomcat.util.scan. StandardJarScanFilter.jarsToSkip</code></td><td>
|
||||||
|
<p>A list of comma-separated file name patters that is used as the default
|
||||||
|
value for <code>pluggabilitySkip</code> and <code>tldSkip</code>
|
||||||
|
attributes of the standard
|
||||||
|
<a href="jar-scan-filter.html">JarScanFilter</a> implementation.</p>
|
||||||
|
<p>The coded default empty, however the system property is set in
|
||||||
|
a default Tomcat installation via the
|
||||||
|
<code>$CATALINA_BASE/conf/catalina.properties</code> file.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">tomcat.util.scan. StandardJarScanFilter.jarsToScan</code></td><td>
|
||||||
|
<p>A list of comma-separated file name patters that is used as the default
|
||||||
|
value for <code>pluggabilityScan</code> and <code>tldScan</code>
|
||||||
|
attributes of the standard
|
||||||
|
<a href="jar-scan-filter.html">JarScanFilter</a> implementation.</p>
|
||||||
|
<p>The coded default empty, however the system property is set in
|
||||||
|
a default Tomcat installation via the
|
||||||
|
<code>$CATALINA_BASE/conf/catalina.properties</code> file.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div><h3 id="Websockets">Websockets</h3><div class="text">
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Property
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="propertyName">org.apache.tomcat .websocket.ALLOW_UNSUPPORTED_EXTENSIONS</code></td><td>
|
||||||
|
<p>If <code>true</code>, allow unknown extensions to be declared by
|
||||||
|
the user.</p>
|
||||||
|
<p>The default value is <code>false</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.tomcat. websocket.DEFAULT_ORIGIN_HEADER_VALUE</code></td><td>
|
||||||
|
<p>Default value of the origin header that will be sent by the client
|
||||||
|
during the upgrade handshake.</p>
|
||||||
|
<p>The default is null so that no origin header is sent.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.tomcat. websocket.DEFAULT_PROCESS_PERIOD</code></td><td>
|
||||||
|
<p>The number of periodic ticks between periodic processing which
|
||||||
|
involves in particular session expiration checks.</p>
|
||||||
|
<p>The default value is <code>10</code> which corresponds to 10
|
||||||
|
seconds.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.tomcat. websocket.DISABLE_BUILTIN_EXTENSIONS</code></td><td>
|
||||||
|
<p>If <code>true</code>, disable all built-in extensions provided by the
|
||||||
|
server, such as message compression.</p>
|
||||||
|
<p>The default value is <code>false</code>.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.tomcat. websocket.STREAMS_DROP_EMPTY_MESSAGES</code></td><td>
|
||||||
|
<p>If <code>true</code>, streams provided to the user (writer and output
|
||||||
|
stream) will not send an empty message when flushing and there is no
|
||||||
|
data to flush, or when it is closed without having been used (for
|
||||||
|
example if an error occurs).</p>
|
||||||
|
<p>The default value is <code>false</code>.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div><h3 id="Other">Other</h3><div class="text">
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Property
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="propertyName">org.apache.coyote. USE_CUSTOM_STATUS_MSG_IN_HEADER</code></td><td><p>If this is
|
||||||
|
<code>true</code>, custom HTTP status messages will be used within HTTP
|
||||||
|
headers. If a custom message is specified that is not valid for use in an
|
||||||
|
HTTP header (as defined by RFC2616) then the custom message will be
|
||||||
|
ignored and the default message used.</p>
|
||||||
|
<p>If not specified, the default value of <code>false</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">catalina.useNaming</code></td><td>
|
||||||
|
<p>If this is <code>false</code> it will override the
|
||||||
|
<code>useNaming</code> attribute for all <a href="context.html">
|
||||||
|
Context</a> elements.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">javax.sql.DataSource.Factory</code></td><td>
|
||||||
|
<p>The class name of the factory to use to create resources of type
|
||||||
|
<code>javax.sql.DataSource</code>. If not specified the default of
|
||||||
|
<code>org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory</code> is used
|
||||||
|
which is a package renamed (to avoid conflicts) copy of
|
||||||
|
<a href="https://commons.apache.org/dbcp">Apache Commons DBCP</a>.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">javax.mail.Session.Factory</code></td><td>
|
||||||
|
<p>The class name of the factory to use to create resources of type
|
||||||
|
<code>javax.mail.Session</code>. If not specified the default of
|
||||||
|
<code>org.apache.naming.factory.MailSessionFactory</code> is used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">jvmRoute</code></td><td>
|
||||||
|
<p>Provides a default value for the <code>jvmRoute</code> attribute of the
|
||||||
|
<a href="engine.html">Engine</a> element. It does not override the value
|
||||||
|
configured on the <a href="engine.html">Engine</a> element.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">catalina.config</code></td><td>
|
||||||
|
<p>The URL for the catalina.properties configuration file.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">tomcat.util.buf.StringCache.byte.enabled</code></td><td>
|
||||||
|
<p>If <code>true</code>, the String cache is enabled for
|
||||||
|
<code>ByteChunk</code>.</p>
|
||||||
|
<p>If not specified, the default value of <code>false</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">tomcat.util.buf.StringCache.char.enabled</code></td><td>
|
||||||
|
<p>If <code>true</code>, the String cache is enabled for
|
||||||
|
<code>CharChunk</code>.</p>
|
||||||
|
<p>If not specified, the default value of <code>false</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">tomcat.util.buf.StringCache.trainThreshold</code></td><td>
|
||||||
|
<p>The number of times <code>toString()</code> must be called before the
|
||||||
|
cache is activated.</p>
|
||||||
|
<p>If not specified, the default value of <code>20000</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">tomcat.util.buf.StringCache.cacheSize</code></td><td>
|
||||||
|
<p>The size of the String cache.</p>
|
||||||
|
<p>If not specified, the default value of <code>200</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.tomcat.util.buf.UriUtil. WAR_SEPARATOR</code></td><td>
|
||||||
|
<p>The character to use to separate the WAR file and WAR content parts of
|
||||||
|
a WAR URL using the custom WAR scheme provided by Tomcat. This is
|
||||||
|
equivalent to how <code>!</code> is used in JAR URLs.</p>
|
||||||
|
<p>If not specified, the default value of <code>*</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">tomcat.util.buf.StringCache.maxStringSize</code></td><td>
|
||||||
|
<p>The maximum length of String that will be cached.</p>
|
||||||
|
<p>If not specified, the default value of <code>128</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.tomcat.util. http.FastHttpDateFormat.CACHE_SIZE</code></td><td>
|
||||||
|
<p>The size of the cache to use parsed and formatted date value.</p>
|
||||||
|
<p>If not specified, the default value of <code>1000</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.tomcat.util. net.NioSelectorShared</code></td><td>
|
||||||
|
<p>If <code>true</code>, use a shared selector for servlet write/read.</p>
|
||||||
|
<p>If not specified, the default value of <code>true</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.catalina.startup. EXIT_ON_INIT_FAILURE</code></td><td>
|
||||||
|
<p>If <code>true</code>, the server will exit if an exception happens
|
||||||
|
during the server initialization phase.</p>
|
||||||
|
<p>If not specified, the default value of <code>false</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.catalina.startup. RealmRuleSet.MAX_NESTED_REALM_LEVELS</code></td><td>
|
||||||
|
<p>The CombinedRealm allows nested Realms. This property controls the
|
||||||
|
maximum permitted number of levels of nesting.</p>
|
||||||
|
<p>If not specified, the default value of <code>3</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">org.apache.catalina.startup. CredentialHandlerRuleSet.MAX_NESTED_LEVELS</code></td><td>
|
||||||
|
<p>The NestedCredentialHandler allows nested CredentialHandlers. This
|
||||||
|
property controls the maximum permitted number of levels of nesting.</p>
|
||||||
|
<p>If not specified, the default value of <code>3</code> will be used.</p>
|
||||||
|
</td></tr><tr><td><code class="propertyName">tomcat.util.http.parser.HttpParser. requestTargetAllow</code></td><td>
|
||||||
|
<p><i>This system property is deprecated. Use the
|
||||||
|
<code>relaxedPathChars</code> and <code>relaxedQueryChars</code>
|
||||||
|
attributes of the Connector instead. These attributes permit a wider range
|
||||||
|
of characters to be configured as valid.</i></p>
|
||||||
|
<p>A string comprised of characters the server should allow even when they are not encoded.
|
||||||
|
These characters would normally result in a 400 status.</p>
|
||||||
|
<p>The acceptable characters for this property are: <code>|</code>, <code>{</code>
|
||||||
|
, and <code>}</code></p>
|
||||||
|
<p><strong>WARNING</strong>: Use of this option may expose the server to CVE-2016-6816.
|
||||||
|
</p>
|
||||||
|
<p>If not specified, the default value of <code>null</code> will be used.</p>
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,86 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="./images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 (8.0.53) - Connectors How To</title><meta name="author" content="Remy Maucherat"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/connectors">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="./images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="./images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="index.html">Docs Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>User Guide</h2><ul><li><a href="introduction.html">1) Introduction</a></li><li><a href="setup.html">2) Setup</a></li><li><a href="appdev/index.html">3) First webapp</a></li><li><a href="deployer-howto.html">4) Deployer</a></li><li><a href="manager-howto.html">5) Manager</a></li><li><a href="host-manager-howto.html">6) Host Manager</a></li><li><a href="realm-howto.html">7) Realms and AAA</a></li><li><a href="security-manager-howto.html">8) Security Manager</a></li><li><a href="jndi-resources-howto.html">9) JNDI Resources</a></li><li><a href="jndi-datasource-examples-howto.html">10) JDBC DataSources</a></li><li><a href="class-loader-howto.html">11) Classloading</a></li><li><a href="jasper-howto.html">12) JSPs</a></li><li><a href="ssl-howto.html">13) SSL/TLS</a></li><li><a href="ssi-howto.html">14) SSI</a></li><li><a href="cgi-howto.html">15) CGI</a></li><li><a href="proxy-howto.html">16) Proxy Support</a></li><li><a href="mbeans-descriptors-howto.html">17) MBeans Descriptors</a></li><li><a href="default-servlet.html">18) Default Servlet</a></li><li><a href="cluster-howto.html">19) Clustering</a></li><li><a href="balancer-howto.html">20) Load Balancer</a></li><li><a href="connectors.html">21) Connectors</a></li><li><a href="monitoring.html">22) Monitoring and Management</a></li><li><a href="logging.html">23) Logging</a></li><li><a href="apr.html">24) APR/Native</a></li><li><a href="virtual-hosting-howto.html">25) Virtual Hosting</a></li><li><a href="aio.html">26) Advanced IO</a></li><li><a href="extras.html">27) Additional Components</a></li><li><a href="maven-jars.html">28) Mavenized</a></li><li><a href="security-howto.html">29) Security Considerations</a></li><li><a href="windows-service-howto.html">30) Windows Service</a></li><li><a href="windows-auth-howto.html">31) Windows Authentication</a></li><li><a href="jdbc-pool.html">32) Tomcat's JDBC Pool</a></li><li><a href="web-socket-howto.html">33) WebSocket</a></li><li><a href="rewrite.html">34) Rewrite</a></li></ul></div><div><h2>Reference</h2><ul><li><a href="RELEASE-NOTES.txt">Release Notes</a></li><li><a href="config/index.html">Configuration</a></li><li><a href="api/index.html">Tomcat Javadocs</a></li><li><a href="servletapi/index.html">Servlet Javadocs</a></li><li><a href="jspapi/index.html">JSP 2.3 Javadocs</a></li><li><a href="elapi/index.html">EL 3.0 Javadocs</a></li><li><a href="websocketapi/index.html">WebSocket 1.1 Javadocs</a></li><li><a href="https://tomcat.apache.org/connectors-doc/">JK 1.2 Documentation</a></li></ul></div><div><h2>Apache Tomcat Development</h2><ul><li><a href="building.html">Building</a></li><li><a href="changelog.html">Changelog</a></li><li><a href="https://wiki.apache.org/tomcat/TomcatVersions">Status</a></li><li><a href="developers.html">Developers</a></li><li><a href="architecture/index.html">Architecture</a></li><li><a href="funcspecs/index.html">Functional Specs.</a></li><li><a href="tribes/introduction.html">Tribes</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Connectors How To</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#HTTP">HTTP</a></li><li><a href="#AJP">AJP</a></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
|
||||||
|
<p>Choosing a connector to use with Tomcat can be difficult. This page will
|
||||||
|
list the connectors which are supported with this Tomcat release, and will
|
||||||
|
hopefully help you make the right choice according to your needs.</p>
|
||||||
|
|
||||||
|
</div><h3 id="HTTP">HTTP</h3><div class="text">
|
||||||
|
|
||||||
|
<p>The HTTP connector is setup by default with Tomcat, and is ready to use. This
|
||||||
|
connector features the lowest latency and best overall performance.</p>
|
||||||
|
|
||||||
|
<p>For clustering, a HTTP load balancer <b>with support for web sessions stickiness</b>
|
||||||
|
must be installed to direct the traffic to the Tomcat servers. Tomcat supports mod_proxy
|
||||||
|
(on Apache HTTP Server 2.x, and included by default in Apache HTTP Server 2.2) as the load balancer.
|
||||||
|
It should be noted that the performance of HTTP proxying is usually lower than the
|
||||||
|
performance of AJP, so AJP clustering is often preferable.</p>
|
||||||
|
|
||||||
|
</div><h3 id="AJP">AJP</h3><div class="text">
|
||||||
|
|
||||||
|
<p>When using a single server, the performance when using a native webserver in
|
||||||
|
front of the Tomcat instance is most of the time significantly worse than a
|
||||||
|
standalone Tomcat with its default HTTP connector, even if a large part of the web
|
||||||
|
application is made of static files. If integration with the native webserver is
|
||||||
|
needed for any reason, an AJP connector will provide faster performance than
|
||||||
|
proxied HTTP. AJP clustering is the most efficient from the Tomcat perspective.
|
||||||
|
It is otherwise functionally equivalent to HTTP clustering.</p>
|
||||||
|
|
||||||
|
<p>The native connectors supported with this Tomcat release are:</p>
|
||||||
|
<ul>
|
||||||
|
<li>JK 1.2.x with any of the supported servers</li>
|
||||||
|
<li>mod_proxy on Apache HTTP Server 2.x (included by default in Apache HTTP Server 2.2),
|
||||||
|
with AJP enabled</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p><b>Other native connectors supporting AJP may work, but are no longer supported.</b></p>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="./comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,292 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="./images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 (8.0.53) - Default Servlet Reference</title><meta name="author" content="Tim Funk"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/default-servlet">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="./images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="./images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="index.html">Docs Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>User Guide</h2><ul><li><a href="introduction.html">1) Introduction</a></li><li><a href="setup.html">2) Setup</a></li><li><a href="appdev/index.html">3) First webapp</a></li><li><a href="deployer-howto.html">4) Deployer</a></li><li><a href="manager-howto.html">5) Manager</a></li><li><a href="host-manager-howto.html">6) Host Manager</a></li><li><a href="realm-howto.html">7) Realms and AAA</a></li><li><a href="security-manager-howto.html">8) Security Manager</a></li><li><a href="jndi-resources-howto.html">9) JNDI Resources</a></li><li><a href="jndi-datasource-examples-howto.html">10) JDBC DataSources</a></li><li><a href="class-loader-howto.html">11) Classloading</a></li><li><a href="jasper-howto.html">12) JSPs</a></li><li><a href="ssl-howto.html">13) SSL/TLS</a></li><li><a href="ssi-howto.html">14) SSI</a></li><li><a href="cgi-howto.html">15) CGI</a></li><li><a href="proxy-howto.html">16) Proxy Support</a></li><li><a href="mbeans-descriptors-howto.html">17) MBeans Descriptors</a></li><li><a href="default-servlet.html">18) Default Servlet</a></li><li><a href="cluster-howto.html">19) Clustering</a></li><li><a href="balancer-howto.html">20) Load Balancer</a></li><li><a href="connectors.html">21) Connectors</a></li><li><a href="monitoring.html">22) Monitoring and Management</a></li><li><a href="logging.html">23) Logging</a></li><li><a href="apr.html">24) APR/Native</a></li><li><a href="virtual-hosting-howto.html">25) Virtual Hosting</a></li><li><a href="aio.html">26) Advanced IO</a></li><li><a href="extras.html">27) Additional Components</a></li><li><a href="maven-jars.html">28) Mavenized</a></li><li><a href="security-howto.html">29) Security Considerations</a></li><li><a href="windows-service-howto.html">30) Windows Service</a></li><li><a href="windows-auth-howto.html">31) Windows Authentication</a></li><li><a href="jdbc-pool.html">32) Tomcat's JDBC Pool</a></li><li><a href="web-socket-howto.html">33) WebSocket</a></li><li><a href="rewrite.html">34) Rewrite</a></li></ul></div><div><h2>Reference</h2><ul><li><a href="RELEASE-NOTES.txt">Release Notes</a></li><li><a href="config/index.html">Configuration</a></li><li><a href="api/index.html">Tomcat Javadocs</a></li><li><a href="servletapi/index.html">Servlet Javadocs</a></li><li><a href="jspapi/index.html">JSP 2.3 Javadocs</a></li><li><a href="elapi/index.html">EL 3.0 Javadocs</a></li><li><a href="websocketapi/index.html">WebSocket 1.1 Javadocs</a></li><li><a href="https://tomcat.apache.org/connectors-doc/">JK 1.2 Documentation</a></li></ul></div><div><h2>Apache Tomcat Development</h2><ul><li><a href="building.html">Building</a></li><li><a href="changelog.html">Changelog</a></li><li><a href="https://wiki.apache.org/tomcat/TomcatVersions">Status</a></li><li><a href="developers.html">Developers</a></li><li><a href="architecture/index.html">Architecture</a></li><li><a href="funcspecs/index.html">Functional Specs.</a></li><li><a href="tribes/introduction.html">Tribes</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Default Servlet Reference</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#what">What is the DefaultServlet</a></li><li><a href="#where">Where is it declared?</a></li><li><a href="#change">What can I change?</a></li><li><a href="#dir">How do I customize directory listings?</a></li><li><a href="#secure">How do I secure directory listings?</a></li></ul>
|
||||||
|
</div><h3 id="what">What is the DefaultServlet</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
The default servlet is the servlet which serves static resources as well
|
||||||
|
as serves the directory listings (if directory listings are enabled).
|
||||||
|
</p>
|
||||||
|
</div><h3 id="where">Where is it declared?</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
It is declared globally in <i>$CATALINA_BASE/conf/web.xml</i>.
|
||||||
|
By default here is it's declaration:
|
||||||
|
</p>
|
||||||
|
<div class="codeBox"><pre><code> <servlet>
|
||||||
|
<servlet-name>default</servlet-name>
|
||||||
|
<servlet-class>
|
||||||
|
org.apache.catalina.servlets.DefaultServlet
|
||||||
|
</servlet-class>
|
||||||
|
<init-param>
|
||||||
|
<param-name>debug</param-name>
|
||||||
|
<param-value>0</param-value>
|
||||||
|
</init-param>
|
||||||
|
<init-param>
|
||||||
|
<param-name>listings</param-name>
|
||||||
|
<param-value>false</param-value>
|
||||||
|
</init-param>
|
||||||
|
<load-on-startup>1</load-on-startup>
|
||||||
|
</servlet>
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>default</servlet-name>
|
||||||
|
<url-pattern>/</url-pattern>
|
||||||
|
</servlet-mapping></code></pre></div>
|
||||||
|
|
||||||
|
So by default, the default servlet is loaded at webapp startup and
|
||||||
|
directory listings are disabled and debugging is turned off.
|
||||||
|
</div><h3 id="change">What can I change?</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
The DefaultServlet allows the following initParamters:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<table class="defaultTable"><tr><th style="width: 15%;">
|
||||||
|
Property
|
||||||
|
</th><th style="width: 85%;">
|
||||||
|
Description
|
||||||
|
</th></tr><tr><td><code class="propertyName">debug</code></td><td>
|
||||||
|
Debugging level. It is not very useful unless you are a tomcat
|
||||||
|
developer. As
|
||||||
|
of this writing, useful values are 0, 1, 11, 1000. [0]
|
||||||
|
</td></tr><tr><td><code class="propertyName">listings</code></td><td>
|
||||||
|
If no welcome file is present, can a directory listing be
|
||||||
|
shown?
|
||||||
|
value may be <b>true</b> or <b>false</b> [false]
|
||||||
|
<br>
|
||||||
|
Welcome files are part of the servlet api.
|
||||||
|
<br>
|
||||||
|
<b>WARNING:</b> Listings of directories containing many entries are
|
||||||
|
expensive. Multiple requests for large directory listings can consume
|
||||||
|
significant proportions of server resources.
|
||||||
|
</td></tr><tr><td><code class="propertyName">gzip</code></td><td>
|
||||||
|
If a gzipped version of a file exists (a file with <code>.gz</code>
|
||||||
|
appended to the file name located alongside the original file), Tomcat
|
||||||
|
will serve the gzipped file if the user agent supports gzip and this
|
||||||
|
option is enabled. [false]
|
||||||
|
<br>
|
||||||
|
The file with the <code>.gz</code> extension will be accessible if
|
||||||
|
requested directly so if the original resource is protected with a
|
||||||
|
security constraint, the gzipped version must be similarly protected.
|
||||||
|
</td></tr><tr><td><code class="propertyName">readmeFile</code></td><td>
|
||||||
|
If a directory listing is presented, a readme file may also
|
||||||
|
be presented with the listing. This file is inserted as is
|
||||||
|
so it may contain HTML.
|
||||||
|
</td></tr><tr><td><code class="propertyName">globalXsltFile</code></td><td>
|
||||||
|
If you wish to customize your directory listing, you
|
||||||
|
can use an XSL transformation. This value is a relative file name (to
|
||||||
|
either $CATALINA_BASE/conf/ or $CATALINA_HOME/conf/) which will be used
|
||||||
|
for all directory listings. This can be overridden per context and/or
|
||||||
|
per directory. See <strong>contextXsltFile</strong> and
|
||||||
|
<strong>localXsltFile</strong> below. The format of the xml is shown
|
||||||
|
below.
|
||||||
|
</td></tr><tr><td><code class="propertyName">contextXsltFile</code></td><td>
|
||||||
|
You may also customize your directory listing by context by
|
||||||
|
configuring <code>contextXsltFile</code>. This must be a context
|
||||||
|
relative path (e.g.: <code>/path/to/context.xslt</code>) to a file with
|
||||||
|
a <code>.xsl</code> or <code>.xslt</code> extension. This overrides
|
||||||
|
<code>globalXsltFile</code>. If this value is present but a file does
|
||||||
|
not exist, then <code>globalXsltFile</code> will be used. If
|
||||||
|
<code>globalXsltFile</code> does not exist, then the default
|
||||||
|
directory listing will be shown.
|
||||||
|
</td></tr><tr><td><code class="propertyName">localXsltFile</code></td><td>
|
||||||
|
You may also customize your directory listing by directory by
|
||||||
|
configuring <code>localXsltFile</code>. This must be a file in the
|
||||||
|
directory where the listing will take place to with a
|
||||||
|
<code>.xsl</code> or <code>.xslt</code> extension. This overrides
|
||||||
|
<code>globalXsltFile</code> and <code>contextXsltFile</code>. If this
|
||||||
|
value is present but a file does not exist, then
|
||||||
|
<code>contextXsltFile</code> will be used. If
|
||||||
|
<code>contextXsltFile</code> does not exist, then
|
||||||
|
<code>globalXsltFile</code> will be used. If
|
||||||
|
<code>globalXsltFile</code> does not exist, then the default
|
||||||
|
directory listing will be shown.
|
||||||
|
</td></tr><tr><td><code class="propertyName">input</code></td><td>
|
||||||
|
Input buffer size (in bytes) when reading
|
||||||
|
resources to be served. [2048]
|
||||||
|
</td></tr><tr><td><code class="propertyName">output</code></td><td>
|
||||||
|
Output buffer size (in bytes) when writing
|
||||||
|
resources to be served. [2048]
|
||||||
|
</td></tr><tr><td><code class="propertyName">readonly</code></td><td>
|
||||||
|
Is this context "read only", so HTTP commands like PUT and
|
||||||
|
DELETE are rejected? [true]
|
||||||
|
</td></tr><tr><td><code class="propertyName">fileEncoding</code></td><td>
|
||||||
|
File encoding to be used when reading static resources.
|
||||||
|
[platform default]
|
||||||
|
</td></tr><tr><td><code class="propertyName">sendfileSize</code></td><td>
|
||||||
|
If the connector used supports sendfile, this represents the minimal
|
||||||
|
file size in KB for which sendfile will be used. Use a negative value
|
||||||
|
to always disable sendfile. [48]
|
||||||
|
</td></tr><tr><td><code class="propertyName">useAcceptRanges</code></td><td>
|
||||||
|
If true, the Accept-Ranges header will be set when appropriate for the
|
||||||
|
response. [true]
|
||||||
|
</td></tr><tr><td><code class="propertyName">showServerInfo</code></td><td>
|
||||||
|
Should server information be presented in the response sent to clients
|
||||||
|
when directory listing is enabled. [true]
|
||||||
|
</td></tr></table>
|
||||||
|
</div><h3 id="dir">How do I customize directory listings?</h3><div class="text">
|
||||||
|
<p>You can override DefaultServlet with you own implementation and use that
|
||||||
|
in your web.xml declaration. If you
|
||||||
|
can understand what was just said, we will assume you can read the code
|
||||||
|
to DefaultServlet servlet and make the appropriate adjustments. (If not,
|
||||||
|
then that method isn't for you)
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
You can use either <code>localXsltFile</code> or
|
||||||
|
<code>globalXsltFile</code> and DefaultServlet will create
|
||||||
|
an xml document and run it through an xsl transformation based
|
||||||
|
on the values provided in <code>localXsltFile</code> and
|
||||||
|
<code>globalXsltFile</code>. <code>localXsltFile</code> is first
|
||||||
|
checked, followed by <code>globalXsltFile</code>, then default
|
||||||
|
behaviors takes place.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Format:
|
||||||
|
</p>
|
||||||
|
<div class="codeBox"><pre><code> <listing>
|
||||||
|
<entries>
|
||||||
|
<entry type='file|dir' urlPath='aPath' size='###' date='gmt date'>
|
||||||
|
fileName1
|
||||||
|
</entry>
|
||||||
|
<entry type='file|dir' urlPath='aPath' size='###' date='gmt date'>
|
||||||
|
fileName2
|
||||||
|
</entry>
|
||||||
|
...
|
||||||
|
</entries>
|
||||||
|
<readme></readme>
|
||||||
|
</listing></code></pre></div>
|
||||||
|
<ul>
|
||||||
|
<li>size will be missing if <code>type='dir'</code></li>
|
||||||
|
<li>Readme is a CDATA entry</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The following is a sample xsl file which mimics the default tomcat behavior:
|
||||||
|
</p>
|
||||||
|
<div class="codeBox"><pre><code><?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||||
|
version="3.0">
|
||||||
|
|
||||||
|
<xsl:output method="html" html-version="5.0"
|
||||||
|
encoding="UTF-8" indent="no"
|
||||||
|
doctype-system="about:legacy-compat"/>
|
||||||
|
|
||||||
|
<xsl:template match="listing">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>
|
||||||
|
Sample Directory Listing For
|
||||||
|
<xsl:value-of select="@directory"/>
|
||||||
|
</title>
|
||||||
|
<style>
|
||||||
|
h1 {color : white;background-color : #0086b2;}
|
||||||
|
h3 {color : white;background-color : #0086b2;}
|
||||||
|
body {font-family : sans-serif,Arial,Tahoma;
|
||||||
|
color : black;background-color : white;}
|
||||||
|
b {color : white;background-color : #0086b2;}
|
||||||
|
a {color : black;} HR{color : #0086b2;}
|
||||||
|
table td { padding: 5px; }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Sample Directory Listing For
|
||||||
|
<xsl:value-of select="@directory"/>
|
||||||
|
</h1>
|
||||||
|
<hr style="height: 1px;" />
|
||||||
|
<table style="width: 100%;">
|
||||||
|
<tr>
|
||||||
|
<th style="text-align: left;">Filename</th>
|
||||||
|
<th style="text-align: center;">Size</th>
|
||||||
|
<th style="text-align: right;">Last Modified</th>
|
||||||
|
</tr>
|
||||||
|
<xsl:apply-templates select="entries"/>
|
||||||
|
</table>
|
||||||
|
<xsl:apply-templates select="readme"/>
|
||||||
|
<hr style="height: 1px;" />
|
||||||
|
<h3>Apache Tomcat/<version-major-minor/></h3>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
|
||||||
|
<xsl:template match="entries">
|
||||||
|
<xsl:apply-templates select="entry"/>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="readme">
|
||||||
|
<hr style="height: 1px;" />
|
||||||
|
<pre><xsl:apply-templates/></pre>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="entry">
|
||||||
|
<tr>
|
||||||
|
<td style="text-align: left;">
|
||||||
|
<xsl:variable name="urlPath" select="@urlPath"/>
|
||||||
|
<a href="{$urlPath}">
|
||||||
|
<pre><xsl:apply-templates/></pre>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td style="text-align: right;">
|
||||||
|
<pre><xsl:value-of select="@size"/></pre>
|
||||||
|
</td>
|
||||||
|
<td style="text-align: right;">
|
||||||
|
<pre><xsl:value-of select="@date"/></pre>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
</xsl:stylesheet></code></pre></div>
|
||||||
|
|
||||||
|
</div><h3 id="secure">How do I secure directory listings?</h3><div class="text">
|
||||||
|
Use web.xml in each individual webapp. See the security section of the
|
||||||
|
Servlet specification.
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="./comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,351 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="./images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 (8.0.53) - Tomcat Web Application Deployment</title><meta name="author" content="Allistair Crossley"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/deployer-howto">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="./images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="./images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="index.html">Docs Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>User Guide</h2><ul><li><a href="introduction.html">1) Introduction</a></li><li><a href="setup.html">2) Setup</a></li><li><a href="appdev/index.html">3) First webapp</a></li><li><a href="deployer-howto.html">4) Deployer</a></li><li><a href="manager-howto.html">5) Manager</a></li><li><a href="host-manager-howto.html">6) Host Manager</a></li><li><a href="realm-howto.html">7) Realms and AAA</a></li><li><a href="security-manager-howto.html">8) Security Manager</a></li><li><a href="jndi-resources-howto.html">9) JNDI Resources</a></li><li><a href="jndi-datasource-examples-howto.html">10) JDBC DataSources</a></li><li><a href="class-loader-howto.html">11) Classloading</a></li><li><a href="jasper-howto.html">12) JSPs</a></li><li><a href="ssl-howto.html">13) SSL/TLS</a></li><li><a href="ssi-howto.html">14) SSI</a></li><li><a href="cgi-howto.html">15) CGI</a></li><li><a href="proxy-howto.html">16) Proxy Support</a></li><li><a href="mbeans-descriptors-howto.html">17) MBeans Descriptors</a></li><li><a href="default-servlet.html">18) Default Servlet</a></li><li><a href="cluster-howto.html">19) Clustering</a></li><li><a href="balancer-howto.html">20) Load Balancer</a></li><li><a href="connectors.html">21) Connectors</a></li><li><a href="monitoring.html">22) Monitoring and Management</a></li><li><a href="logging.html">23) Logging</a></li><li><a href="apr.html">24) APR/Native</a></li><li><a href="virtual-hosting-howto.html">25) Virtual Hosting</a></li><li><a href="aio.html">26) Advanced IO</a></li><li><a href="extras.html">27) Additional Components</a></li><li><a href="maven-jars.html">28) Mavenized</a></li><li><a href="security-howto.html">29) Security Considerations</a></li><li><a href="windows-service-howto.html">30) Windows Service</a></li><li><a href="windows-auth-howto.html">31) Windows Authentication</a></li><li><a href="jdbc-pool.html">32) Tomcat's JDBC Pool</a></li><li><a href="web-socket-howto.html">33) WebSocket</a></li><li><a href="rewrite.html">34) Rewrite</a></li></ul></div><div><h2>Reference</h2><ul><li><a href="RELEASE-NOTES.txt">Release Notes</a></li><li><a href="config/index.html">Configuration</a></li><li><a href="api/index.html">Tomcat Javadocs</a></li><li><a href="servletapi/index.html">Servlet Javadocs</a></li><li><a href="jspapi/index.html">JSP 2.3 Javadocs</a></li><li><a href="elapi/index.html">EL 3.0 Javadocs</a></li><li><a href="websocketapi/index.html">WebSocket 1.1 Javadocs</a></li><li><a href="https://tomcat.apache.org/connectors-doc/">JK 1.2 Documentation</a></li></ul></div><div><h2>Apache Tomcat Development</h2><ul><li><a href="building.html">Building</a></li><li><a href="changelog.html">Changelog</a></li><li><a href="https://wiki.apache.org/tomcat/TomcatVersions">Status</a></li><li><a href="developers.html">Developers</a></li><li><a href="architecture/index.html">Architecture</a></li><li><a href="funcspecs/index.html">Functional Specs.</a></li><li><a href="tribes/introduction.html">Tribes</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Tomcat Web Application Deployment</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Installation">Installation</a></li><li><a href="#A_word_on_Contexts">A word on Contexts</a></li><li><a href="#Deployment_on_Tomcat_startup">Deployment on Tomcat startup</a></li><li><a href="#Deploying_on_a_running_Tomcat_server">Deploying on a running Tomcat server</a></li><li><a href="#Deploying_using_the_Tomcat_Manager">Deploying using the Tomcat Manager</a></li><li><a href="#Deploying_using_the_Client_Deployer_Package">Deploying using the Client Deployer Package</a></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
Deployment is the term used for the process of installing a web
|
||||||
|
application (either a 3rd party WAR or your own custom web application)
|
||||||
|
into the Tomcat server.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Web application deployment may be accomplished in a number of ways
|
||||||
|
within the Tomcat server.
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>Statically; the web application is setup before Tomcat is started</li>
|
||||||
|
<li>
|
||||||
|
Dynamically; by directly manipulating already deployed web
|
||||||
|
applications (relying on <em>auto-deployment</em>
|
||||||
|
feature) or remotely by using the Tomcat Manager web
|
||||||
|
application
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
The <a href="manager-howto.html">Tomcat Manager</a> is a web
|
||||||
|
application that can be used interactively (via HTML GUI) or
|
||||||
|
programmatically (via URL-based API) to deploy and manage web
|
||||||
|
applications.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
There are a number of ways to perform deployment that rely on
|
||||||
|
the Manager web application. Apache Tomcat provides tasks
|
||||||
|
for Apache Ant build tool.
|
||||||
|
<a href="https://tomcat.apache.org/maven-plugin.html">Apache Tomcat Maven Plugin</a>
|
||||||
|
project provides integration with Apache Maven.
|
||||||
|
There is also a tool called the Client Deployer, which can be
|
||||||
|
used from a command line and provides additional functionality
|
||||||
|
such as compiling and validating web applications as well as
|
||||||
|
packaging web application into web application resource (WAR)
|
||||||
|
files.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Installation">Installation</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
There is no installation required for static deployment of web
|
||||||
|
applications as this is provided out of the box by Tomcat. Nor is any
|
||||||
|
installation required for deployment functions with the Tomcat Manager,
|
||||||
|
although some configuration is required as detailed in the
|
||||||
|
<a href="manager-howto.html">Tomcat Manager manual</a>.
|
||||||
|
An installation is however required if you wish
|
||||||
|
to use the Tomcat Client Deployer (TCD).
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
The TCD is not packaged with the Tomcat core
|
||||||
|
distribution, and must therefore be downloaded separately from
|
||||||
|
the Downloads area. The download is usually labelled
|
||||||
|
<i>apache-tomcat-8.0.x-deployer</i>.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
TCD has prerequisites of Apache Ant 1.6.2+ and a Java installation.
|
||||||
|
Your environment should define an ANT_HOME environment value pointing to
|
||||||
|
the root of your Ant installation, and a JAVA_HOME value pointing to
|
||||||
|
your Java installation. Additionally, you should ensure Ant's ant
|
||||||
|
command, and the Java javac compiler command run from the command shell
|
||||||
|
that your operating system provides.
|
||||||
|
</p>
|
||||||
|
<ol>
|
||||||
|
<li>Download the TCD distribution</li>
|
||||||
|
<li>
|
||||||
|
The TCD package need not be extracted into any existing Tomcat
|
||||||
|
installation, it can be extracted to any location.
|
||||||
|
</li>
|
||||||
|
<li>Read Using the <a href="#Deploying_using_the_Client_Deployer_Package">
|
||||||
|
Tomcat Client Deployer</a></li>
|
||||||
|
</ol>
|
||||||
|
</div><h3 id="A_word_on_Contexts">A word on Contexts</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
In talking about deployment of web applications, the concept of a
|
||||||
|
<i>Context</i> is required to be understood. A Context is what Tomcat
|
||||||
|
calls a web application.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
In order to configure a Context within Tomcat a <i>Context Descriptor</i>
|
||||||
|
is required. A Context Descriptor is simply an XML file that contains
|
||||||
|
Tomcat related configuration for a Context, e.g naming resources or
|
||||||
|
session manager configuration. In earlier versions of
|
||||||
|
Tomcat the content of a Context Descriptor configuration was often stored within
|
||||||
|
Tomcat's primary configuration file <i>server.xml</i> but this is now
|
||||||
|
discouraged (although it currently still works).
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Context Descriptors not only help Tomcat to know how to configure
|
||||||
|
Contexts but other tools such as the Tomcat Manager and TCD often use
|
||||||
|
these Context Descriptors to perform their roles properly.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
The locations for Context Descriptors are:
|
||||||
|
</p>
|
||||||
|
<ol>
|
||||||
|
<li>$CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml</li>
|
||||||
|
<li>$CATALINA_BASE/webapps/[webappname]/META-INF/context.xml</li>
|
||||||
|
</ol>
|
||||||
|
<p>
|
||||||
|
Files in (1) are named [webappname].xml but files in (2) are named
|
||||||
|
context.xml. If a Context Descriptor is not provided for a Context,
|
||||||
|
Tomcat configures the Context using default values.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Deployment_on_Tomcat_startup">Deployment on Tomcat startup</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
If you are not interested in using the Tomcat Manager, or TCD,
|
||||||
|
then you'll need to deploy your web applications
|
||||||
|
statically to Tomcat, followed by a Tomcat startup. The location you
|
||||||
|
deploy web applications to for this type of deployment is called the
|
||||||
|
<code>appBase</code> which is specified per Host. You either copy a
|
||||||
|
so-called <i>exploded web application</i>, i.e non-compressed, to this
|
||||||
|
location, or a compressed web application resource .WAR file.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
The web applications present in the location specified by the Host's
|
||||||
|
(default Host is "localhost") <code>appBase</code> attribute (default
|
||||||
|
appBase is "$CATALINA_BASE/webapps") will be deployed on Tomcat startup
|
||||||
|
only if the Host's <code>deployOnStartup</code> attribute is "true".
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
The following deployment sequence will occur on Tomcat startup in that
|
||||||
|
case:
|
||||||
|
</p>
|
||||||
|
<ol>
|
||||||
|
<li>Any Context Descriptors will be deployed first.</li>
|
||||||
|
<li>
|
||||||
|
Exploded web applications not referenced by any Context
|
||||||
|
Descriptor will then be deployed. If they have an associated
|
||||||
|
.WAR file in the appBase and it is newer than the exploded web application,
|
||||||
|
the exploded directory will be removed and the webapp will be
|
||||||
|
redeployed from the .WAR
|
||||||
|
</li>
|
||||||
|
<li>.WAR files will be deployed</li>
|
||||||
|
</ol>
|
||||||
|
</div><h3 id="Deploying_on_a_running_Tomcat_server">Deploying on a running Tomcat server</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
It is possible to deploy web applications to a running Tomcat server.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
If the Host <code>autoDeploy</code> attribute is "true", the Host will
|
||||||
|
attempt to deploy and update web applications dynamically, as needed,
|
||||||
|
for example if a new .WAR is dropped into the <code>appBase</code>.
|
||||||
|
For this to work, the Host needs to have background processing
|
||||||
|
enabled which is the default configuration.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<code>autoDeploy</code> set to "true" and a running Tomcat allows for:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>Deployment of .WAR files copied into the Host <code>appBase</code>.</li>
|
||||||
|
<li>
|
||||||
|
Deployment of exploded web applications which are
|
||||||
|
copied into the Host <code>appBase</code>.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Re-deployment of a web application which has already been deployed from
|
||||||
|
a .WAR when the new .WAR is provided. In this case the exploded
|
||||||
|
web application is removed, and the .WAR is expanded again.
|
||||||
|
Note that the explosion will not occur if the Host is configured
|
||||||
|
so that .WARs are not exploded with a <code>unpackWARs</code>
|
||||||
|
attribute set to "false", in which case the web application
|
||||||
|
will be simply redeployed as a compressed archive.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Re-loading of a web application if the /WEB-INF/web.xml file (or
|
||||||
|
any other resource defined as a WatchedResource) is updated.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Re-deployment of a web application if the Context Descriptor
|
||||||
|
file from which the web application has been deployed is
|
||||||
|
updated.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Re-deployment of dependent web applications if the global or
|
||||||
|
per-host Context Descriptor file used by the web application is
|
||||||
|
updated.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Re-deployment of a web application if a Context Descriptor file (with a
|
||||||
|
filename corresponding to the Context path of the previously deployed
|
||||||
|
web application) is added to the
|
||||||
|
<code>$CATALINA_BASE/conf/[enginename]/[hostname]/</code>
|
||||||
|
directory.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Undeployment of a web application if its document base (docBase)
|
||||||
|
is deleted. Note that on Windows, this assumes that anti-locking
|
||||||
|
features (see Context configuration) are enabled, otherwise it is not
|
||||||
|
possible to delete the resources of a running web application.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
Note that web application reloading can also be configured in the loader, in which
|
||||||
|
case loaded classes will be tracked for changes.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Deploying_using_the_Tomcat_Manager">Deploying using the Tomcat Manager</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
The Tomcat Manager is covered in its <a href="manager-howto.html">own manual page</a>.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Deploying_using_the_Client_Deployer_Package">Deploying using the Client Deployer Package</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
Finally, deployment of web application may be achieved using the
|
||||||
|
Tomcat Client Deployer. This is a package which can be used to
|
||||||
|
validate, compile, compress to .WAR, and deploy web applications to
|
||||||
|
production or development Tomcat servers. It should be noted that this feature
|
||||||
|
uses the Tomcat Manager and as such the target Tomcat server should be
|
||||||
|
running.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
It is assumed the user will be familiar with Apache Ant for using the TCD.
|
||||||
|
Apache Ant is a scripted build tool. The TCD comes pre-packaged with a
|
||||||
|
build script to use. Only a modest understanding of Apache Ant is
|
||||||
|
required (installation as listed earlier in this page, and familiarity
|
||||||
|
with using the operating system command shell and configuring
|
||||||
|
environment variables).
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The TCD includes Ant tasks, the Jasper page compiler for JSP compilation
|
||||||
|
before deployment, as well as a task which
|
||||||
|
validates the web application Context Descriptor. The validator task (class
|
||||||
|
<code>org.apache.catalina.ant.ValidatorTask</code>) allows only one parameter:
|
||||||
|
the base path of an exploded web application.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The TCD uses an exploded web application as input (see the list of the
|
||||||
|
properties used below). A web application that is programmatically
|
||||||
|
deployed with the deployer may include a Context Descriptor in
|
||||||
|
<code>/META-INF/context.xml</code>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The TCD includes a ready-to-use Ant script, with the following targets:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<code>compile</code> (default): Compile and validate the web
|
||||||
|
application. This can be used standalone, and does not need a running
|
||||||
|
Tomcat server. The compiled application will only run on the associated
|
||||||
|
<em>Tomcat X.Y.Z</em> server release, and is not guaranteed to work
|
||||||
|
on another Tomcat release, as the code generated by Jasper depends on its runtime
|
||||||
|
component. It should also be noted that this target will also compile
|
||||||
|
automatically any Java source file located in the
|
||||||
|
<code>/WEB-INF/classes</code> folder of the web application.</li>
|
||||||
|
<li>
|
||||||
|
<code>deploy</code>: Deploy a web application (compiled or not) to
|
||||||
|
a Tomcat server.
|
||||||
|
</li>
|
||||||
|
<li><code>undeploy</code>: Undeploy a web application</li>
|
||||||
|
<li><code>start</code>: Start web application</li>
|
||||||
|
<li><code>reload</code>: Reload web application</li>
|
||||||
|
<li><code>stop</code>: Stop web application</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
In order for the deployment to be configured, create a file
|
||||||
|
called <code>deployer.properties</code> in the TCD installation
|
||||||
|
directory root. In this file, add the following name=value pairs per
|
||||||
|
line:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Additionally, you will need to ensure that a user has been
|
||||||
|
setup for the target Tomcat Manager (which TCD uses) otherwise the TCD
|
||||||
|
will not authenticate with the Tomcat Manager and the deployment will
|
||||||
|
fail. To do this, see the Tomcat Manager page.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<code>build</code>: The build folder used will be, by default,
|
||||||
|
<code>${build}/webapp/${path}</code> (<code>${build}</code>, by
|
||||||
|
default, points to <code>${basedir}/build</code>). After the end
|
||||||
|
of the execution of the <code>compile</code> target, the web
|
||||||
|
application .WAR will be located at
|
||||||
|
<code>${build}/webapp/${path}.war</code>.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<code>webapp</code>: The directory containing the exploded web application
|
||||||
|
which will be compiled and validated. By default, the folder is
|
||||||
|
<code>myapp</code>.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<code>path</code>: Deployed context path of the web application,
|
||||||
|
by default <code>/myapp</code>.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<code>url</code>: Absolute URL to the Tomcat Manager web application of a
|
||||||
|
running Tomcat server, which will be used to deploy and undeploy the
|
||||||
|
web application. By default, the deployer will attempt to access
|
||||||
|
a Tomcat instance running on localhost, at
|
||||||
|
<code>http://localhost:8080/manager/text</code>.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<code>username</code>: Tomcat Manager username (user should have a role of
|
||||||
|
manager-script)
|
||||||
|
</li>
|
||||||
|
<li><code>password</code>: Tomcat Manager password.</li>
|
||||||
|
</ul>
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="./comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,89 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="./images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 (8.0.53) - Tomcat Developers</title><meta name="author" content="Remy Maucherat"><meta name="author" content="Yoav Shapira"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/developers">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="./images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="./images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="index.html">Docs Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>User Guide</h2><ul><li><a href="introduction.html">1) Introduction</a></li><li><a href="setup.html">2) Setup</a></li><li><a href="appdev/index.html">3) First webapp</a></li><li><a href="deployer-howto.html">4) Deployer</a></li><li><a href="manager-howto.html">5) Manager</a></li><li><a href="host-manager-howto.html">6) Host Manager</a></li><li><a href="realm-howto.html">7) Realms and AAA</a></li><li><a href="security-manager-howto.html">8) Security Manager</a></li><li><a href="jndi-resources-howto.html">9) JNDI Resources</a></li><li><a href="jndi-datasource-examples-howto.html">10) JDBC DataSources</a></li><li><a href="class-loader-howto.html">11) Classloading</a></li><li><a href="jasper-howto.html">12) JSPs</a></li><li><a href="ssl-howto.html">13) SSL/TLS</a></li><li><a href="ssi-howto.html">14) SSI</a></li><li><a href="cgi-howto.html">15) CGI</a></li><li><a href="proxy-howto.html">16) Proxy Support</a></li><li><a href="mbeans-descriptors-howto.html">17) MBeans Descriptors</a></li><li><a href="default-servlet.html">18) Default Servlet</a></li><li><a href="cluster-howto.html">19) Clustering</a></li><li><a href="balancer-howto.html">20) Load Balancer</a></li><li><a href="connectors.html">21) Connectors</a></li><li><a href="monitoring.html">22) Monitoring and Management</a></li><li><a href="logging.html">23) Logging</a></li><li><a href="apr.html">24) APR/Native</a></li><li><a href="virtual-hosting-howto.html">25) Virtual Hosting</a></li><li><a href="aio.html">26) Advanced IO</a></li><li><a href="extras.html">27) Additional Components</a></li><li><a href="maven-jars.html">28) Mavenized</a></li><li><a href="security-howto.html">29) Security Considerations</a></li><li><a href="windows-service-howto.html">30) Windows Service</a></li><li><a href="windows-auth-howto.html">31) Windows Authentication</a></li><li><a href="jdbc-pool.html">32) Tomcat's JDBC Pool</a></li><li><a href="web-socket-howto.html">33) WebSocket</a></li><li><a href="rewrite.html">34) Rewrite</a></li></ul></div><div><h2>Reference</h2><ul><li><a href="RELEASE-NOTES.txt">Release Notes</a></li><li><a href="config/index.html">Configuration</a></li><li><a href="api/index.html">Tomcat Javadocs</a></li><li><a href="servletapi/index.html">Servlet Javadocs</a></li><li><a href="jspapi/index.html">JSP 2.3 Javadocs</a></li><li><a href="elapi/index.html">EL 3.0 Javadocs</a></li><li><a href="websocketapi/index.html">WebSocket 1.1 Javadocs</a></li><li><a href="https://tomcat.apache.org/connectors-doc/">JK 1.2 Documentation</a></li></ul></div><div><h2>Apache Tomcat Development</h2><ul><li><a href="building.html">Building</a></li><li><a href="changelog.html">Changelog</a></li><li><a href="https://wiki.apache.org/tomcat/TomcatVersions">Status</a></li><li><a href="developers.html">Developers</a></li><li><a href="architecture/index.html">Architecture</a></li><li><a href="funcspecs/index.html">Functional Specs.</a></li><li><a href="tribes/introduction.html">Tribes</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Tomcat Developers</h2><h3 id="Active_Developers">Active Developers</h3><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The list indicates the developers' main areas of interest. Feel free to
|
||||||
|
add to the list :) The developers email addresses are
|
||||||
|
<code>[login]@apache.org</code>. Please <strong>do not</strong> contact
|
||||||
|
developers directly for any support issues (please post to the
|
||||||
|
tomcat-users mailing list instead, or one of the other support
|
||||||
|
resources; some organizations and individual consultants also offer
|
||||||
|
for pay Tomcat support, as listed on the
|
||||||
|
<a href="https://wiki.apache.org/tomcat/SupportAndTraining">support and
|
||||||
|
training</a> page on the Tomcat Wiki).
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Bill Barker (billbarker): Connectors</li>
|
||||||
|
<li>Costin Manolache (costin): Catalina, Connectors</li>
|
||||||
|
<li>Filip Hanik (fhanik): Clustering, Release Manager</li>
|
||||||
|
<li>Jean-Frederic Clere (jfclere): Connectors</li>
|
||||||
|
<li>Jim Jagielski (jim): Connectors</li>
|
||||||
|
<li>Konstantin Kolinko (kkolinko): Catalina</li>
|
||||||
|
<li>Mark Thomas (markt): CGI, SSI, WebDAV, bug fixing</li>
|
||||||
|
<li>Mladen Turk (mturk): Connectors</li>
|
||||||
|
<li>Peter Rossbach (pero): Catalina, Clustering, JMX</li>
|
||||||
|
<li>Rainer Jung (rjung): Catalina, Clustering, Connectors</li>
|
||||||
|
<li>Remy Maucherat (remm): Catalina, Connectors, Docs</li>
|
||||||
|
<li>Tim Funk (funkman): Catalina, Docs</li>
|
||||||
|
<li>Tim Whittington (timw): Connectors</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Retired_Developers">Retired Developers</h3><div class="text">
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Amy Roh (amyroh): Catalina</li>
|
||||||
|
<li>Glenn Nielsen (glenn): Catalina, Connectors</li>
|
||||||
|
<li>Henri Gomez (hgomez): Connectors</li>
|
||||||
|
<li>Jan Luehe (luehe): Jasper</li>
|
||||||
|
<li>Jean-Francois Arcand (jfarcand): Catalina</li>
|
||||||
|
<li>Kin-Man Chung (kinman): Jasper</li>
|
||||||
|
<li>Yoav Shapira (yoavs): Docs, JMX, Catalina, balancer</li>
|
||||||
|
</ul>
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="./comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,34 @@
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<title>API docs</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
The EL Javadoc is not installed by default. Download and install
|
||||||
|
the "fulldocs" package to get it.
|
||||||
|
|
||||||
|
You can also access the javadoc online in the Tomcat
|
||||||
|
<a href="https://tomcat.apache.org/tomcat-8.0-doc/">
|
||||||
|
documentation bundle</a>.
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,128 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="./images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 (8.0.53) - Additional Components</title><meta name="author" content="Remy Maucherat"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/extras">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="./images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="./images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="index.html">Docs Home</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>User Guide</h2><ul><li><a href="introduction.html">1) Introduction</a></li><li><a href="setup.html">2) Setup</a></li><li><a href="appdev/index.html">3) First webapp</a></li><li><a href="deployer-howto.html">4) Deployer</a></li><li><a href="manager-howto.html">5) Manager</a></li><li><a href="host-manager-howto.html">6) Host Manager</a></li><li><a href="realm-howto.html">7) Realms and AAA</a></li><li><a href="security-manager-howto.html">8) Security Manager</a></li><li><a href="jndi-resources-howto.html">9) JNDI Resources</a></li><li><a href="jndi-datasource-examples-howto.html">10) JDBC DataSources</a></li><li><a href="class-loader-howto.html">11) Classloading</a></li><li><a href="jasper-howto.html">12) JSPs</a></li><li><a href="ssl-howto.html">13) SSL/TLS</a></li><li><a href="ssi-howto.html">14) SSI</a></li><li><a href="cgi-howto.html">15) CGI</a></li><li><a href="proxy-howto.html">16) Proxy Support</a></li><li><a href="mbeans-descriptors-howto.html">17) MBeans Descriptors</a></li><li><a href="default-servlet.html">18) Default Servlet</a></li><li><a href="cluster-howto.html">19) Clustering</a></li><li><a href="balancer-howto.html">20) Load Balancer</a></li><li><a href="connectors.html">21) Connectors</a></li><li><a href="monitoring.html">22) Monitoring and Management</a></li><li><a href="logging.html">23) Logging</a></li><li><a href="apr.html">24) APR/Native</a></li><li><a href="virtual-hosting-howto.html">25) Virtual Hosting</a></li><li><a href="aio.html">26) Advanced IO</a></li><li><a href="extras.html">27) Additional Components</a></li><li><a href="maven-jars.html">28) Mavenized</a></li><li><a href="security-howto.html">29) Security Considerations</a></li><li><a href="windows-service-howto.html">30) Windows Service</a></li><li><a href="windows-auth-howto.html">31) Windows Authentication</a></li><li><a href="jdbc-pool.html">32) Tomcat's JDBC Pool</a></li><li><a href="web-socket-howto.html">33) WebSocket</a></li><li><a href="rewrite.html">34) Rewrite</a></li></ul></div><div><h2>Reference</h2><ul><li><a href="RELEASE-NOTES.txt">Release Notes</a></li><li><a href="config/index.html">Configuration</a></li><li><a href="api/index.html">Tomcat Javadocs</a></li><li><a href="servletapi/index.html">Servlet Javadocs</a></li><li><a href="jspapi/index.html">JSP 2.3 Javadocs</a></li><li><a href="elapi/index.html">EL 3.0 Javadocs</a></li><li><a href="websocketapi/index.html">WebSocket 1.1 Javadocs</a></li><li><a href="https://tomcat.apache.org/connectors-doc/">JK 1.2 Documentation</a></li></ul></div><div><h2>Apache Tomcat Development</h2><ul><li><a href="building.html">Building</a></li><li><a href="changelog.html">Changelog</a></li><li><a href="https://wiki.apache.org/tomcat/TomcatVersions">Status</a></li><li><a href="developers.html">Developers</a></li><li><a href="architecture/index.html">Architecture</a></li><li><a href="funcspecs/index.html">Functional Specs.</a></li><li><a href="tribes/introduction.html">Tribes</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Additional Components</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Downloading">Downloading</a></li><li><a href="#Building">Building</a></li><li><a href="#Components_list">Components list</a><ol><li><a href="#Full_commons-logging_implementation">Full commons-logging implementation</a></li><li><a href="#Web_Services_support_(JSR_109)">Web Services support (JSR 109)</a></li><li><a href="#JMX_Remote_Lifecycle_Listener">JMX Remote Lifecycle Listener</a></li></ol></li></ul>
|
||||||
|
</div><h3 id="Introduction">Introduction</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
A number of additional components may be used with Apache Tomcat. These
|
||||||
|
components may be built by users should they need them or they can be
|
||||||
|
downloaded from one of the mirrors.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div><h3 id="Downloading">Downloading</h3><div class="text">
|
||||||
|
<p>
|
||||||
|
To download the extras components open the
|
||||||
|
<a href="https://tomcat.apache.org/download-80.cgi">Tomcat download page</a>
|
||||||
|
and select "Browse" from the Quick Navigation Links. The extras components
|
||||||
|
can be found in bin/extras.
|
||||||
|
</p>
|
||||||
|
</div><h3 id="Building">Building</h3><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The additional components are built using the <code>extras</code> target
|
||||||
|
of the standard Tomcat Ant script which is present in the source bundle of
|
||||||
|
Tomcat.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>The build process is the following:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Follow the <a href="building.html">build instructions</a> to build a
|
||||||
|
Tomcat binary from the source bundle (note: it will be used by the build
|
||||||
|
process of the additional components, but does not need to be actually
|
||||||
|
used later on)</li>
|
||||||
|
<li>Execute the command <code>ant extras</code> to run the build
|
||||||
|
script</li>
|
||||||
|
<li>The additional components JARs will be placed in the
|
||||||
|
<code>output/extras</code> folder</li>
|
||||||
|
<li>Refer to the documentation below about the usage of these JARs</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Components_list">Components list</h3><div class="text">
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Full_commons-logging_implementation">Full commons-logging implementation</h4><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Tomcat uses a package renamed commons-logging API implementation which is
|
||||||
|
hardcoded to use the java.util.logging API. The commons-logging additional
|
||||||
|
component builds a full fledged package renamed commons-logging
|
||||||
|
implementation which can be used to replace the implementation provided with
|
||||||
|
Tomcat. See the <a href="logging.html">logging</a> page for usage
|
||||||
|
instructions.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Web_Services_support_(JSR_109)">Web Services support (JSR 109)</h4><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Tomcat provides factories for JSR 109 which may be used to resolve web
|
||||||
|
services references. Place the generated catalina-ws.jar as well as
|
||||||
|
jaxrpc.jar and wsdl4j.jar (or another implementation of JSR 109) in the
|
||||||
|
Tomcat lib folder.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Users should be aware that wsdl4j.jar is licensed under CPL 1.0 and not the
|
||||||
|
Apache License version 2.0.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="JMX_Remote_Lifecycle_Listener">JMX Remote Lifecycle Listener</h4><div class="text">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The JMX protocol requires the JMX server (Tomcat in this instance) to listen
|
||||||
|
on two network ports. One of these ports can be fixed via configuration but
|
||||||
|
the second is selected randomly. This makes it difficult to use JMX through
|
||||||
|
a firewall. The JMX Remote Lifecycle Listener allows both ports to be fixed,
|
||||||
|
simplifying the process of connecting to JMX through a firewall. See the <a href="config/listeners.html">listeners</a> page for usage instructions.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="./comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,299 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Catalina Functional Specifications (8.0.53) - Administrative Apps - Overall Requirements</title><meta name="author" content="Craig McClanahan"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/funcspecs/fs-admin-apps">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Catalina Functional Specifications</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Functional Specs</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Administrative Apps</h2><ul><li><a href="fs-admin-apps.html">Overall Requirements</a></li><li><a href="mbean-names.html">Tomcat MBean Names</a></li><li><a href="fs-admin-objects.html">Administered Objects</a></li><li><a href="fs-admin-opers.html">Supported Operations</a></li></ul></div><div><h2>Internal Servlets</h2><ul><li><a href="fs-default.html">Default Servlet</a></li></ul></div><div><h2>Realm Implementations</h2><ul><li><a href="fs-jdbc-realm.html">JDBC Realm</a></li><li><a href="fs-jndi-realm.html">JNDI Realm</a></li><li><a href="fs-memory-realm.html">Memory Realm</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Administrative Apps - Overall Requirements</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Overview">Overview</a><ol><li><a href="#Introduction">Introduction</a></li><li><a href="#External_Specifications">External Specifications</a></li><li><a href="#Implementation_Requirements">Implementation Requirements</a></li></ol></li><li><a href="#Dependencies">Dependencies</a><ol><li><a href="#Environmental_Dependencies">Environmental Dependencies</a></li><li><a href="#Container_Dependencies">Container Dependencies</a></li><li><a href="#External_Technologies">External Technologies</a></li></ol></li><li><a href="#Functionality">Functionality</a><ol><li><a href="#Properties_of_Administered_Objects">Properties of Administered Objects</a></li><li><a href="#Supported_Administrative_Operations">Supported Administrative Operations</a></li><li><a href="#Access_Method_Specific_Requirements">Access Method Specific Requirements</a></li></ol></li><li><a href="#Testable_Assertions">Testable Assertions</a></li></ul>
|
||||||
|
</div><h3 id="Overview">Overview</h3><div class="text">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Introduction">Introduction</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The purpose of this specification is to define high level requirements
|
||||||
|
for administrative applications that can be used to manage the operation
|
||||||
|
of a running Tomcat container. A variety of <em>Access Methods</em>
|
||||||
|
to the supported administrative functionality shall be supported, to
|
||||||
|
meet varying requirements:</p>
|
||||||
|
<ul>
|
||||||
|
<li><em>As A Scriptable Web Application</em> - The existing
|
||||||
|
<code>Manager</code> web application provides a simple HTTP-based
|
||||||
|
interface for managing Tomcat through commands that are expressed
|
||||||
|
entirely through a request URI. This is useful in environments
|
||||||
|
where you wish to script administrative commands with tools that
|
||||||
|
can generate HTTP transactions.</li>
|
||||||
|
<li><em>As An HTML-Based Web Application</em> - Use an HTML presentation
|
||||||
|
to provide a GUI-like user interface for humans to interact with the
|
||||||
|
administrative capabilities.</li>
|
||||||
|
<li><em>As SOAP-Based Web Services</em> - The operational commands to
|
||||||
|
administer Tomcat are made available as web services that utilize
|
||||||
|
SOAP message formats.</li>
|
||||||
|
<li><em>As Java Management Extensions (JMX) Commands</em> - The operational
|
||||||
|
commands to administer Tomcat are made available through JMX APIs,
|
||||||
|
for integration into management consoles that utilize them.</li>
|
||||||
|
<li><em>Other Remote Access APIs</em> - Other remote access APIs, such
|
||||||
|
as JINI, RMI, and CORBA can also be utilized to access administrative
|
||||||
|
capabilities.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Underlying all of the access methods described above, it is assumed
|
||||||
|
that the actual operations are performed either directly on the
|
||||||
|
corresponding Catalina components (such as calling the
|
||||||
|
<code>Deployer.deploy()</code> method to deploy a new web application),
|
||||||
|
or through a "business logic" layer that can be shared across all of the
|
||||||
|
access methods. This approach minimizes the cost of adding new
|
||||||
|
administrative capabilities later -- it is only necessary to add the
|
||||||
|
corresponding business logic function, and then write adapters to it for
|
||||||
|
all desired access methods.</p>
|
||||||
|
|
||||||
|
<p>The current status of this functional specification is
|
||||||
|
<strong>PROPOSED</strong>. It has not yet been discussed and
|
||||||
|
agreed to on the TOMCAT-DEV mailing list.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="External_Specifications">External Specifications</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The implementation of this functionality depends on the following
|
||||||
|
external specifications:</p>
|
||||||
|
<ul>
|
||||||
|
<li><a href="http://docs.oracle.com/javase/7/docs/technotes/guides/idl">
|
||||||
|
Java IDL</a> (for CORBA, included in the JDK)</li>
|
||||||
|
<li><a href="http://www.oracle.com/technetwork/java/javase/tech/javamanagement-140525.html">
|
||||||
|
Java Management Extensions</a></li>
|
||||||
|
<li><a href="http://docs.oracle.com/javase/7/docs/technotes/guides/rmi">
|
||||||
|
Remote Method Invocation</a> (Included in the JDK)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Implementation_Requirements">Implementation Requirements</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The implementation of this functionality shall conform to the
|
||||||
|
following requirements:</p>
|
||||||
|
<ul>
|
||||||
|
<li>To the maximum extent feasible, all administrative functions,
|
||||||
|
and the access methods that support them, shall run portably
|
||||||
|
on all platforms where Tomcat itself runs.</li>
|
||||||
|
<li>In a default Tomcat distribution, all administrative capabilities
|
||||||
|
shall be disabled. It shall be necessary for a system
|
||||||
|
administrator to specifically enable the desired access methods
|
||||||
|
(such as by adding a username/password with a specific role to
|
||||||
|
the Tomcat user's database.</li>
|
||||||
|
<li>Administrative functions shall be realized as direct calls to
|
||||||
|
corresponding Catalina APIs, or through a business logic layer
|
||||||
|
that is independent of the access method used to initiate it.</li>
|
||||||
|
<li>The common business logic components shall be implemented in
|
||||||
|
package <code>org.apache.catalina.admin</code>.</li>
|
||||||
|
<li>The common business logic components shall be built as part of the
|
||||||
|
standard Catalina build process, and made visible in the
|
||||||
|
Catalina class loader.</li>
|
||||||
|
<li>The Java components required for each access method shall be
|
||||||
|
implemented in subpackages of <code>org.apache.catalina.admin</code>.
|
||||||
|
</li>
|
||||||
|
<li>The build scripts should treat each access method as optional,
|
||||||
|
so that it will be built only if the corresponding required
|
||||||
|
APIs are present at build time.</li>
|
||||||
|
<li>It shall be possible to save the configured state of the running
|
||||||
|
Tomcat container such that this state can be reproduced when the
|
||||||
|
container is shut down and restarted.</li>
|
||||||
|
<li>Administrative commands to start up and shut down the overall
|
||||||
|
Tomcat container are <strong>out of scope</strong> for the
|
||||||
|
purposes of these applications. It is assumed that other
|
||||||
|
(usually platform-specific) mechanisms will be used for container
|
||||||
|
startup and shutdown.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
</div><h3 id="Dependencies">Dependencies</h3><div class="text">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Environmental_Dependencies">Environmental Dependencies</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The following environmental dependencies must be met in order for
|
||||||
|
administrative applications to operate correctly:</p>
|
||||||
|
<ul>
|
||||||
|
<li>For access methods that require creation of server sockets, the
|
||||||
|
appropriate ports must be configured and available.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Container_Dependencies">Container Dependencies</h4><div class="text">
|
||||||
|
|
||||||
|
<p>Correct operation of administrative applications depends on the
|
||||||
|
following specific features of the surrounding container:</p>
|
||||||
|
<ul>
|
||||||
|
<li>To the maximum extent feasible, Catalina components that offer
|
||||||
|
direct administrative APIs and property setters shall support
|
||||||
|
"live" changes to their operation, without requiring a container
|
||||||
|
restart.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="External_Technologies">External Technologies</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The availability of the following technologies can be assumed
|
||||||
|
for the implementation and operation of the various access methods
|
||||||
|
and the corresponding administrative business logic:<br>
|
||||||
|
<strong>FIXME</strong> - This list below is totally outdated, but nobody
|
||||||
|
cares about the administrative app anymore. It is removed and unsupported
|
||||||
|
since Tomcat 6.0.</p>
|
||||||
|
<ul>
|
||||||
|
<li><a href="http://www.oracle.com/technetwork/java/javase/overview/index.html">
|
||||||
|
Java Standard Edition</a> (Version 1.2 or later)</li>
|
||||||
|
<li><a href="https://www.jcp.org/jsr/detail/154.jsp">Servlet 2.4</a>
|
||||||
|
(supported natively by Tomcat 5)</li>
|
||||||
|
<li><a href="https://www.jcp.org/jsr/detail/152.jsp">JavaServer Pages 2.0</a>
|
||||||
|
(supported natively by Tomcat 5)</li>
|
||||||
|
<li><a href="https://jakarta.apache.org/taglibs/doc/standard-doc/intro.html">JavaServer Pages Standard Tag Library 1.0 (Jakarta Taglibs-Standard 1.0.3)</a></li>
|
||||||
|
<li><a href="https://struts.apache.org/">Struts Framework</a>
|
||||||
|
(Version 1.0) - MVC Framework for Web Applications</li>
|
||||||
|
<li><strong>TO BE DETERMINED</strong> - Application for hosting SOAP
|
||||||
|
based web services</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
</div><h3 id="Functionality">Functionality</h3><div class="text">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Properties_of_Administered_Objects">Properties of Administered Objects</h4><div class="text">
|
||||||
|
|
||||||
|
<p>Functional requirements for administrative applications are specified
|
||||||
|
in terms of <em>Administered Objects</em>, whose definitions and detailed
|
||||||
|
properties are listed <a href="fs-admin-objects.html">here</a>. In general,
|
||||||
|
Administered Objects correspond to components in the Catalina architecture,
|
||||||
|
but these objects are defined separately here for the following reasons:</p>
|
||||||
|
<ul>
|
||||||
|
<li>It is possible that the administrative applications do not expose
|
||||||
|
every possible configurable facet of the underlying components.</li>
|
||||||
|
<li>In some cases, an Administered Object (from the perspective of an
|
||||||
|
administrative operation) is realized by more than one Catalina
|
||||||
|
component, at a finer-grained level of detail.</li>
|
||||||
|
<li>It is necessary to represent the configuration information for a
|
||||||
|
component separately from the component itself (for instance, in
|
||||||
|
order to store that configuration information for later use).</li>
|
||||||
|
<li>It is necessary to represent configuration information (such as
|
||||||
|
a Default Context) when there is no corresponding component instance.
|
||||||
|
</li>
|
||||||
|
<li>Administered Objects, when realized as Java classes, will include
|
||||||
|
methods for administrative operations that have no correspondence
|
||||||
|
to operations performed by the corresponding actual components.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>It is assumed that the reader is familiar with the overall component
|
||||||
|
architecture of Catalina. For further information, see the corresponding
|
||||||
|
Developer Documentation. To distinguish names that are used as both
|
||||||
|
<em>Administered Objects</em> and <code>Components</code>, different
|
||||||
|
font presentations are utilized. Default values for many properties
|
||||||
|
are listed in [square brackets].</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Supported_Administrative_Operations">Supported Administrative Operations</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The administrative operations that are available are described in terms
|
||||||
|
of the corresponding Administered Objects (as defined above), in a manner
|
||||||
|
that is independent of the access method by which these operations are
|
||||||
|
requested. In general, such operations are relevant only in the context
|
||||||
|
of a particular Administered Object (and will most likely be realized as
|
||||||
|
method calls on the corresponding Administered Object classes), so they
|
||||||
|
are organized based on the currently "focused" administered object.
|
||||||
|
The available Supported Operations are documented
|
||||||
|
<a href="fs-admin-opers.html">here</a>.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Access_Method_Specific_Requirements">Access Method Specific Requirements</h4><div class="text">
|
||||||
|
|
||||||
|
<h5>Scriptable Web Application</h5>
|
||||||
|
|
||||||
|
<p>An appropriate subset of the administrative operations described above
|
||||||
|
shall be implemented as commands that can be performed by the "Manager"
|
||||||
|
web application. <strong>FIXME</strong> - Enumerate them.</p>
|
||||||
|
|
||||||
|
<p>In addition, this web application shall conform to the following
|
||||||
|
requirements:</p>
|
||||||
|
<ul>
|
||||||
|
<li>All request URIs shall be protected by security constraints that
|
||||||
|
require a security role to be assigned for processing.</li>
|
||||||
|
<li>The default user database shall <strong>not</strong> contain any
|
||||||
|
user that has been assigned a security role.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h5>HTML-Based Web Application</h5>
|
||||||
|
|
||||||
|
<p>The entire suite of administrative operations described above shall be
|
||||||
|
made available through a web application designed for human interaction.
|
||||||
|
In addition, this web application shall conform to the following
|
||||||
|
requirements:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Must be implemented using servlet, JSP, and MVC framework technologies
|
||||||
|
described under "External Technologies", above.</li>
|
||||||
|
<li>Prompts and error messages must be internationalizable to multiple
|
||||||
|
languages.</li>
|
||||||
|
<li>Rendered HTML must be compatible with Netscape Navigator (version 4.7
|
||||||
|
or later) and Internet Explorer (version 5.0 or later).</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
</div><h3 id="Testable_Assertions">Testable Assertions</h3><div class="text">
|
||||||
|
|
||||||
|
<p><strong>FIXME</strong> - Complete this section.</p>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,453 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Catalina Functional Specifications (8.0.53) - Administrative Apps - Administered Objects</title><meta name="author" content="Craig McClanahan"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/funcspecs/fs-admin-objects">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Catalina Functional Specifications</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Functional Specs</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Administrative Apps</h2><ul><li><a href="fs-admin-apps.html">Overall Requirements</a></li><li><a href="mbean-names.html">Tomcat MBean Names</a></li><li><a href="fs-admin-objects.html">Administered Objects</a></li><li><a href="fs-admin-opers.html">Supported Operations</a></li></ul></div><div><h2>Internal Servlets</h2><ul><li><a href="fs-default.html">Default Servlet</a></li></ul></div><div><h2>Realm Implementations</h2><ul><li><a href="fs-jdbc-realm.html">JDBC Realm</a></li><li><a href="fs-jndi-realm.html">JNDI Realm</a></li><li><a href="fs-memory-realm.html">Memory Realm</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Administrative Apps - Administered Objects</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Administered_Objects_Overview">Administered Objects Overview</a></li><li><a href="#Access_Logger">Access Logger</a></li><li><a href="#Connector">Connector</a></li><li><a href="#Context">Context</a></li><li><a href="#Default_Context">Default Context</a></li><li><a href="#Default_Deployment_Descriptor">Default Deployment Descriptor</a></li><li><a href="#Engine">Engine</a></li><li><a href="#Environment_Entry">Environment Entry</a></li><li><a href="#Host">Host</a></li><li><a href="#JDBC_Resource">JDBC Resource</a></li><li><a href="#Loader">Loader</a></li><li><a href="#Manager">Manager</a></li><li><a href="#Realm">Realm</a></li><li><a href="#Request_Filter">Request Filter</a></li><li><a href="#Server">Server</a></li><li><a href="#Service">Service</a></li></ul>
|
||||||
|
</div><h3 id="Administered_Objects_Overview">Administered Objects Overview</h3><div class="text">
|
||||||
|
|
||||||
|
<p>This document defines the <em>Administered Objects</em> that represent
|
||||||
|
the internal architectural components of the Catalina servlet container.
|
||||||
|
Associated with each is a set of <a href="fs-admin-opers.html">Supported
|
||||||
|
Operations</a> that can be performed when the administrative application is
|
||||||
|
"focused" on a particular configurable object.</p>
|
||||||
|
|
||||||
|
<p>The following Administered Objects are defined:</p>
|
||||||
|
<ul>
|
||||||
|
<li><a href="#Access_Logger">Access Logger</a></li>
|
||||||
|
<li><a href="#Connector">Connector</a></li>
|
||||||
|
<li><a href="#Context">Context</a></li>
|
||||||
|
<li><a href="#Default_Context">Default Context</a></li>
|
||||||
|
<li><a href="#Default_Deployment_Descriptor">Default Deployment Descriptor</a></li>
|
||||||
|
<li><a href="#Engine">Engine</a></li>
|
||||||
|
<li><a href="#Environment_Entry">Environment Entry</a></li>
|
||||||
|
<li><a href="#Host">Host</a></li>
|
||||||
|
<li><a href="#JDBC_Resource">JDBC Resource</a></li>
|
||||||
|
<li><a href="#Loader">Loader</a></li>
|
||||||
|
<li><a href="#Manager">Manager</a></li>
|
||||||
|
<li><a href="#Realm">Realm</a></li>
|
||||||
|
<li><a href="#Request_Filter">Request Filter</a></li>
|
||||||
|
<li><a href="#Server">Server</a></li>
|
||||||
|
<li><a href="#Service">Service</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Access_Logger">Access Logger</h3><div class="text">
|
||||||
|
|
||||||
|
<p>An <em>Access Logger</em> is an optional <code>Valve</code> that can
|
||||||
|
create request access logs in the same formats as those provided by
|
||||||
|
web servers. Such access logs are useful input to hit count and user
|
||||||
|
access tracking analysis programs. An Access Logger can be attached to
|
||||||
|
an <em>Engine</em>, a <em>Host</em>, a <em>Context</em>, or a <em>Default
|
||||||
|
Context</em>.</p>
|
||||||
|
|
||||||
|
<p>The standard component implementing an <em>Access Logger</em> is
|
||||||
|
<code>org.apache.catalina.valves.AccessLogValve</code>. It supports the
|
||||||
|
following configurable properties:</p>
|
||||||
|
<ul>
|
||||||
|
<li><code>debug</code> - Debugging detail level. [0]</li>
|
||||||
|
<li><code>directory</code> - Absolute or relative (to $CATALINA_BASE) path
|
||||||
|
of the directory into which access log files are created.
|
||||||
|
[logs].</li>
|
||||||
|
<li><code>pattern</code> - Pattern string defining the fields to be
|
||||||
|
included in the access log output, or "common" for the standard
|
||||||
|
access log pattern. See
|
||||||
|
<code>org.apache.catalina.valves.AccessLogValve</code> for more
|
||||||
|
information. [common]</li>
|
||||||
|
<li><code>prefix</code> - Prefix added to the beginning of each log file
|
||||||
|
name created by this access logger.</li>
|
||||||
|
<li><code>resolveHosts</code> - Should IP addresses be resolved to host
|
||||||
|
names in the log? [false]</li>
|
||||||
|
<li><code>suffix</code> - Suffix added to the end of each log file name
|
||||||
|
created by this access logger.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Connector">Connector</h3><div class="text">
|
||||||
|
|
||||||
|
<p>A <em>Connector</em> is the representation of a communications endpoint
|
||||||
|
by which requests are received from (and responses returned to) a Tomcat
|
||||||
|
client. The administrative applications shall support those connectors
|
||||||
|
that are commonly utilized in Tomcat installations, as described in detail
|
||||||
|
below.</p>
|
||||||
|
|
||||||
|
<p>For standalone use, the standard connector supporting the HTTP/1.1
|
||||||
|
protocol is <code>org.apache.catalina.connectors.http.HttpConnector</code>.
|
||||||
|
It supports the following configurable properties:</p>
|
||||||
|
<ul>
|
||||||
|
<li><code>acceptCount</code> - The maximum queue length of incoming
|
||||||
|
connections that have not yet been accepted. [10]</li>
|
||||||
|
<li><code>address</code> - For servers with more than one IP address, the
|
||||||
|
address upon which this connector should listen. [All Addresses]</li>
|
||||||
|
<li><code>bufferSize</code> - Default input buffer size (in bytes) for
|
||||||
|
requests created by this Connector. [2048]</li>
|
||||||
|
<li><code>debug</code> - Debugging detail level. [0]</li>
|
||||||
|
<li><code>enableLookups</code> - Should we perform DNS lookups on remote
|
||||||
|
IP addresses when <code>request.getRemoteHost()</code> is called?
|
||||||
|
[false]</li>
|
||||||
|
<li><code>maxProcessors</code> - The maximum number of processor threads
|
||||||
|
supported by this connector. [20]</li>
|
||||||
|
<li><code>minProcessors</code> - The minimum number of processor threads
|
||||||
|
to be created at container startup. [5]</li>
|
||||||
|
<li><code>port</code> - TCP/IP port number on which this Connector should
|
||||||
|
listen for incoming requests. [8080]</li>
|
||||||
|
<li><code>proxyName</code> - Host name to be returned when an application
|
||||||
|
calls <code>request.getServerName()</code>. [Value of Host: header]</li>
|
||||||
|
<li><code>proxyPort</code> - Port number to be returned when an application
|
||||||
|
calls <code>request.getServerPort()</code>. [Same as <code>port</code>]
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Context">Context</h3><div class="text">
|
||||||
|
|
||||||
|
<p>A <em>Context</em> is the representation of an individual web application,
|
||||||
|
which is associated with a corresponding <em>Host</em>. Note that the
|
||||||
|
administrable properties of a <em>Context</em> do <strong>not</strong>
|
||||||
|
include any settings from inside the web application deployment descriptor
|
||||||
|
for that application.</p>
|
||||||
|
|
||||||
|
<p>The standard component implementing a <em>Context</em> is
|
||||||
|
<code>org.apache.catalina.core.StandardContext</code>. It supports the
|
||||||
|
following configurable properties:</p>
|
||||||
|
<ul>
|
||||||
|
<li><code>cookies</code> - Should be use cookies for session identifier
|
||||||
|
communication? [true]</li>
|
||||||
|
<li><code>crossContext</code> - Should calls to
|
||||||
|
<code>ServletContext.getServletContext()</code> return the actual
|
||||||
|
context responsible for the specified path? [false]</li>
|
||||||
|
<li><code>debug</code> - Debugging detail level. [0]</li>
|
||||||
|
<li><code>docBase</code> - The absolute or relative (to the
|
||||||
|
<code>appBase</code> of our owning <em>Host</em>) pathname of a
|
||||||
|
directory containing an unpacked web application, or of a web
|
||||||
|
application archive (WAR) file.</li>
|
||||||
|
<li><code>override</code> - Should settings in this <em>Context</em>
|
||||||
|
override corresponding settings in the <em>Default Context</em>?
|
||||||
|
[false]</li>
|
||||||
|
<li><code>path</code> - Context path for this web application, or an empty
|
||||||
|
string for the root application of a <em>Host</em>. [Inferred from
|
||||||
|
directory or WAR file name]</li>
|
||||||
|
<li><code>reloadable</code> - Should Tomcat monitor classes in the
|
||||||
|
<code>/WEB-INF/classes</code> directory for changes, and reload the
|
||||||
|
application if they occur? [false]</li>
|
||||||
|
<li><code>useNaming</code> - Should Tomcat provide a JNDI naming context,
|
||||||
|
containing preconfigured entries and resources, corresponding to the
|
||||||
|
requirements of the Java2 Enterprise Edition specification? [true]</li>
|
||||||
|
<li><code>workDir</code> - Absolute pathname of a scratch directory that is
|
||||||
|
provided to this web application. [Automatically assigned relative to
|
||||||
|
$CATALINA_BASE/work]</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Each <em>Context</em> is owned by a parent <em>Host</em>, and is
|
||||||
|
associated with:</p>
|
||||||
|
<ul>
|
||||||
|
<li>An optional <em>Access Logger</em> that logs all requests processed
|
||||||
|
by this web application.</li>
|
||||||
|
<li>Zero or more <em>Environment Entries</em> representing environment
|
||||||
|
entries for the JNDI naming context associated with a web
|
||||||
|
application.</li>
|
||||||
|
<li>Zero or more <em>JDBC Resources</em> representing database connection
|
||||||
|
pools associated with a web application.</li>
|
||||||
|
<li>A <em>Loader</em> representing the web application class loader used
|
||||||
|
by this web application.</li>
|
||||||
|
<li>A <em>Manager</em> representing the session manager used by this
|
||||||
|
web application.</li>
|
||||||
|
<li>An optional <em>Realm</em> used to provide authentication and access
|
||||||
|
control information for this web application.</li>
|
||||||
|
<li>Zero or more <em>Request Filters</em> used to limit access to this
|
||||||
|
web application based on remote host name or IP address.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Default_Context">Default Context</h3><div class="text">
|
||||||
|
|
||||||
|
<p>A <em>Default Context</em> represents a subset of the configurable
|
||||||
|
properties of a <em>Context</em>, and is used to set defaults for those
|
||||||
|
properties when web applications are automatically deployed. A <em>Default
|
||||||
|
Context</em> object can be associated with an <em>Engine</em> or a
|
||||||
|
<em>Host</em>. The following configurable properties are supported:</p>
|
||||||
|
<ul>
|
||||||
|
<li><code>cookies</code> - Should be use cookies for session identifier
|
||||||
|
communication? [true]</li>
|
||||||
|
<li><code>crossContext</code> - Should calls to
|
||||||
|
<code>ServletContext.getServletContext()</code> return the actual
|
||||||
|
context responsible for the specified path? [false]</li>
|
||||||
|
<li><code>reloadable</code> - Should Tomcat monitor classes in the
|
||||||
|
<code>/WEB-INF/classes</code> directory for changes, and reload the
|
||||||
|
application if they occur? [false]</li>
|
||||||
|
<li><code>useNaming</code> - Should Tomcat provide a JNDI naming context,
|
||||||
|
containing preconfigured entries and resources, corresponding to the
|
||||||
|
requirements of the Java2 Enterprise Edition specification? [true]</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Each <em>Default Context</em> is owned by a parent <em>Engine</em> or
|
||||||
|
<em>Host</em>, and is associated with:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Zero or more <em>Environment Entries</em> representing environment
|
||||||
|
entries for the JNDI naming context associated with a web
|
||||||
|
application.</li>
|
||||||
|
<li>Zero or more <em>JDBC Resources</em> representing database connection
|
||||||
|
pools associated with a web application.</li>
|
||||||
|
<li>An optional <em>Loader</em> representing default configuration
|
||||||
|
properties for the Loader component of deployed web applications.</li>
|
||||||
|
<li>An optional <em>Manager</em> representing default configuration
|
||||||
|
properties for the Manager component of deployed web applications.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Default_Deployment_Descriptor">Default Deployment Descriptor</h3><div class="text">
|
||||||
|
|
||||||
|
<p>Default web application characteristics are configured in a special
|
||||||
|
deployment descriptor named <code>$CATALINA_BASE/conf/web.xml</code>. This
|
||||||
|
section describes the configurable components that may be stored there.</p>
|
||||||
|
|
||||||
|
<p><strong>FIXME</strong> - Complete the description of default servlets,
|
||||||
|
default mappings, default MIME types, and so on.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Engine">Engine</h3><div class="text">
|
||||||
|
|
||||||
|
<p>An <em>Engine</em> is the representation of the entire Catalina
|
||||||
|
servlet container, and processes all requests for all of the associated
|
||||||
|
virtual hosts and web applications.</p>
|
||||||
|
|
||||||
|
<p>The standard component implementing an <em>Engine</em> is
|
||||||
|
<code>org.apache.catalina.core.StandardEngine</code>. It supports the
|
||||||
|
following configurable properties:</p>
|
||||||
|
<ul>
|
||||||
|
<li><code>debug</code> - Debugging detail level. [0]</li>
|
||||||
|
<li><code>defaultHost</code> - Name of the <em>Host</em> to which requests
|
||||||
|
will be directed if the requested host is unknown. [localhost]</li>
|
||||||
|
<li><code>name</code> - Logical name of this engine. [Tomcat Stand-Alone]
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Each <em>Engine</em> is owned by a parent <em>Service</em>, and is
|
||||||
|
associated with:</p>
|
||||||
|
<ul>
|
||||||
|
<li>An optional <em>Access Logger</em> that logs all requests processed
|
||||||
|
by the entire container.</li>
|
||||||
|
<li>A <em>Default Context</em>, representing default properties of a
|
||||||
|
<em>Context</em> for automatically deployed applications for all
|
||||||
|
associated <em>Hosts</em> (unless overridden by a subordinate
|
||||||
|
component).</li>
|
||||||
|
<li>One or more <em>Hosts</em> representing individual virtual hosts
|
||||||
|
supported by this container.</li>
|
||||||
|
<li>A <em>Realm</em> used to provide authentication and access control
|
||||||
|
information for all virtual hosts and web applications (unless
|
||||||
|
overridden by a subordinate component).</li>
|
||||||
|
<li>Zero or more <em>Request Filters</em> used to limit access to the
|
||||||
|
entire container based on remote host name or IP address.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Environment_Entry">Environment Entry</h3><div class="text">
|
||||||
|
|
||||||
|
<p>An <em>Environment Entry</em> is the representation of a
|
||||||
|
<code><env-entry></code> element from a web application deployment
|
||||||
|
descriptor. It will cause the creation of a corresponding entry in the
|
||||||
|
JNDI naming context provided to the corresponding <em>Context</em>. The
|
||||||
|
following configurable properties are supported:</p>
|
||||||
|
<ul>
|
||||||
|
<li><code>description</code> - Description of this environment entry.</li>
|
||||||
|
<li><code>name</code> - Environment entry name (relative to the
|
||||||
|
<code>java:comp/env</code> context)</li>
|
||||||
|
<li><code>type</code> - Environment entry type (must be one of the fully
|
||||||
|
qualified Java classes listed in the servlet spec).</li>
|
||||||
|
<li><code>value</code> - Environment entry value (must be convertible from
|
||||||
|
String to the specified <code>type</code>.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Host">Host</h3><div class="text">
|
||||||
|
|
||||||
|
<p>A <em>Host</em> is the representation of an individual virtual host,
|
||||||
|
which has a unique set of associated web applications.</p>
|
||||||
|
|
||||||
|
<p>The standard component implementing a <em>Host</em> is
|
||||||
|
<code>org.apache.catalina.core.StandardHost</code>. It supports the
|
||||||
|
following configurable properties:</p>
|
||||||
|
<ul>
|
||||||
|
<li><code>aliases</code> - Zero or more DNS names that are also associated
|
||||||
|
with this host (for example, a particular host might be named
|
||||||
|
<code>www.mycompany.com</code> with an alias <code>company.com</code>).
|
||||||
|
</li>
|
||||||
|
<li><code>appBase</code> - Absolute or relative (to $CATALINA_BASE) path
|
||||||
|
to a directory from which web applications will be automatically
|
||||||
|
deployed.</li>
|
||||||
|
<li><code>debug</code> - Debugging detail level. [0]</li>
|
||||||
|
<li><code>name</code> - DNS Name of the virtual host represented by this
|
||||||
|
object.</li>
|
||||||
|
<li><code>unpackWARs</code> - Should web application archive files
|
||||||
|
deployed by this virtual host be unpacked first? [true]</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Each <em>Host</em> is owned by a parent <em>Engine</em>, and is
|
||||||
|
associated with:</p>
|
||||||
|
<ul>
|
||||||
|
<li>An optional <em>Access Logger</em> that logs all requests processed
|
||||||
|
by this virtual host.</li>
|
||||||
|
<li>One or more <em>Contexts</em> representing the web applications
|
||||||
|
operating on this <em>Host</em>.</li>
|
||||||
|
<li>A <em>Default Context</em> representing default <em>Context</em>
|
||||||
|
properties for web applications that are automatically deployed
|
||||||
|
by this <em>Host</em>.</li>
|
||||||
|
<li>A optional <em>Realm</em> used to provide authentication and access
|
||||||
|
control information for all web applications associated with this
|
||||||
|
virtual host (unless overridden by a subordinate component).</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p><strong>FIXME</strong> - Should we support configuration of the
|
||||||
|
User Web Applications functionality?</p>
|
||||||
|
|
||||||
|
</div><h3 id="JDBC_Resource">JDBC Resource</h3><div class="text">
|
||||||
|
|
||||||
|
<p>A <em>JDBC Resources</em> represents a database connection pool (i.e.
|
||||||
|
an implementation of <code>javax.sql.DataSource</code> that will be
|
||||||
|
configured and made available in the JNDI naming context associated with
|
||||||
|
a web application.</p>
|
||||||
|
|
||||||
|
<p><strong>FIXME</strong> - properties of this administered object</p>
|
||||||
|
|
||||||
|
</div><h3 id="Loader">Loader</h3><div class="text">
|
||||||
|
|
||||||
|
<p>A <em>Loader</em> represents a web application class loader that will
|
||||||
|
be utilized to provide class loading services for a particular
|
||||||
|
<em>Context</em>.</p>
|
||||||
|
|
||||||
|
<p>The standard component implementing a <em>Loader</em> is
|
||||||
|
<code>org.apache.catalina.loader.WebappLoader</code>. It supports
|
||||||
|
the following configurable properties:</p>
|
||||||
|
<ul>
|
||||||
|
<li><code>reloadable</code> - Should this class loader check for modified
|
||||||
|
classes and initiate automatic reloads? [Set automatically from the
|
||||||
|
<code>reloadable</code> property of the corresponding <em>Context</em>]
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Each <em>Loader</em> is owned by a parent <em>Context</em>.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Manager">Manager</h3><div class="text">
|
||||||
|
|
||||||
|
<p>A <em>Manager</em> represents a session manager that will be associated
|
||||||
|
with a particular web application. <strong>FIXME</strong> - Add support
|
||||||
|
for advanced session managers and their associated Stores.</p>
|
||||||
|
|
||||||
|
<p>The standard component implementing a <em>Manager</em> is
|
||||||
|
<code>org.apache.catalina.session.StandardManager</code>. It supports
|
||||||
|
the following configurable properties:</p>
|
||||||
|
<ul>
|
||||||
|
<li><code>maxActiveSessions</code> - The maximum number of active sessions
|
||||||
|
that are allowed, or -1 for no limit. [-1]</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Each <em>Manager</em> is owned by a parent <em>Context</em>.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Realm">Realm</h3><div class="text">
|
||||||
|
|
||||||
|
<p>A <em>Realm</em> represents a "database" of information about authorized
|
||||||
|
users, their passwords, and the security roles assigned to them. This will
|
||||||
|
be used by the container in the implementation of container-managed security
|
||||||
|
in accordance with the Servlet Specification. Several alternative
|
||||||
|
implementations are supported.</p>
|
||||||
|
|
||||||
|
<p><code>org.apache.catalina.realm.MemoryRealm</code> initializes its user
|
||||||
|
information from a simple XML file at startup time. If changes are made
|
||||||
|
to the information in this file, the corresponding web applications using
|
||||||
|
it must be restarted for the changes to take effect. It supports the
|
||||||
|
following configurable properties:</p>
|
||||||
|
<ul>
|
||||||
|
<li><code>debug</code> - Debugging detail level. [0]</li>
|
||||||
|
<li><code>pathname</code> - Absolute or relative (to $CATALINA_BASE) path to
|
||||||
|
the XML file containing our user information. [conf/tomcat-users.xml]
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p><code>org.apache.catalina.realm.JDBCRealm</code> uses a relational
|
||||||
|
database (accessed via JDBC APIs) to contain the user information. Changes
|
||||||
|
in the contents of this database take effect immediately; however, the roles
|
||||||
|
assigned to a particular user are calculated only when the user initially
|
||||||
|
logs on (and not per request). The following configurable properties
|
||||||
|
are supported:</p>
|
||||||
|
<ul>
|
||||||
|
<li><code>connectionName</code> - Database username to use when establishing
|
||||||
|
a JDBC connection.</li>
|
||||||
|
<li><code>connectionPassword</code> - Database password to use when
|
||||||
|
establishing a JDBC connection.</li>
|
||||||
|
<li><code>connectionURL</code> - Connection URL to use when establishing
|
||||||
|
a JDBC connection.</li>
|
||||||
|
<li><code>digest</code> - Name of the <code>MessageDigest</code> algorithm
|
||||||
|
used to encode passwords in the database, or a zero-length string for
|
||||||
|
no encoding. [Zero-length String]</li>
|
||||||
|
<li><code>driverName</code> - Fully qualified Java class name of the JDBC
|
||||||
|
driver to be utilized.</li>
|
||||||
|
<li><code>roleNameCol</code> - Name of the column, in the User Roles table,
|
||||||
|
which contains the role name.</li>
|
||||||
|
<li><code>userCredCol</code> - Name of the column, in the Users table,
|
||||||
|
which contains the password (encrypted or unencrypted).</li>
|
||||||
|
<li><code>userNameCol</code> - Name of the column, in both the Users and
|
||||||
|
User Roles tables, that contains the username.</li>
|
||||||
|
<li><code>userRoleTable</code> - Name of the User Roles table, which contains
|
||||||
|
one row per security role assigned to a particular user. This table must
|
||||||
|
contain the columns specified by the <code>userNameCol</code> and
|
||||||
|
<code>roleNameCol</code> properties.</li>
|
||||||
|
<li><code>userTable</code> - Name of the Users table, which contains one row
|
||||||
|
per authorized user. This table must contain the columns specified by
|
||||||
|
the <code>userNameCol</code> and <code>userCredCol</code> properties.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p><strong>FIXME</strong> - Should we provide mechanisms to edit the contents
|
||||||
|
of a "tomcat-users.xml" file through the admin applications?</p>
|
||||||
|
|
||||||
|
<p>Each <em>Realm</em> is owned by a parent <em>Engine</em>, <em>Host</em>,
|
||||||
|
or <em>Context</em>.</p>
|
||||||
|
|
||||||
|
</div><h3 id="Request_Filter">Request Filter</h3><div class="text">
|
||||||
|
|
||||||
|
<p><strong>FIXME</strong> - complete this entry</p>
|
||||||
|
|
||||||
|
</div><h3 id="Server">Server</h3><div class="text">
|
||||||
|
|
||||||
|
<p><strong>FIXME</strong> - complete this entry</p>
|
||||||
|
|
||||||
|
</div><h3 id="Service">Service</h3><div class="text">
|
||||||
|
|
||||||
|
<p><strong>FIXME</strong> - complete this entry</p>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,309 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Catalina Functional Specifications (8.0.53) - Administrative Apps - Supported Operations</title><meta name="author" content="Craig McClanahan"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/funcspecs/fs-admin-opers">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Catalina Functional Specifications</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Functional Specs</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Administrative Apps</h2><ul><li><a href="fs-admin-apps.html">Overall Requirements</a></li><li><a href="mbean-names.html">Tomcat MBean Names</a></li><li><a href="fs-admin-objects.html">Administered Objects</a></li><li><a href="fs-admin-opers.html">Supported Operations</a></li></ul></div><div><h2>Internal Servlets</h2><ul><li><a href="fs-default.html">Default Servlet</a></li></ul></div><div><h2>Realm Implementations</h2><ul><li><a href="fs-jdbc-realm.html">JDBC Realm</a></li><li><a href="fs-jndi-realm.html">JNDI Realm</a></li><li><a href="fs-memory-realm.html">Memory Realm</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Administrative Apps - Supported Operations</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Supported_Operations_Overview">Supported Operations Overview</a></li><li><a href="#Access_Logger">Access Logger</a></li><li><a href="#Connector">Connector</a></li><li><a href="#Context">Context</a></li><li><a href="#Default_Context">Default Context</a></li><li><a href="#Engine">Engine</a></li><li><a href="#Environment_Entry">Environment Entry</a></li><li><a href="#Host">Host</a></li><li><a href="#JDBC_Resource">JDBC Resource</a></li><li><a href="#Loader">Loader</a></li><li><a href="#Manager">Manager</a></li><li><a href="#Realm">Realm</a></li><li><a href="#Request_Filter">Request Filter</a></li><li><a href="#Server">Server</a></li><li><a href="#Service">Service</a></li></ul>
|
||||||
|
</div><h3 id="Supported_Operations_Overview">Supported Operations Overview</h3><div class="text">
|
||||||
|
|
||||||
|
<p>This document defines the <em>Supported Operations</em> that may
|
||||||
|
be performed against the <a href="fs-admin-objects.html">Administered
|
||||||
|
Objects</a> that are supported by Tomcat administrative applications.
|
||||||
|
Not all operations are required to be available through every administrative
|
||||||
|
application that is implemented. However, if a given operation is available,
|
||||||
|
it should operate consistently with the descriptions found here.</p>
|
||||||
|
|
||||||
|
<p>Supported Operations are described for the following Administered
|
||||||
|
Objects:</p>
|
||||||
|
<ul>
|
||||||
|
<li><a href="#Access_Logger">Access Logger</a></li>
|
||||||
|
<li><a href="#Connector">Connector</a></li>
|
||||||
|
<li><a href="#Context">Context</a></li>
|
||||||
|
<li><a href="#Default_Context">Default Context</a></li>
|
||||||
|
<li><a href="#Engine">Engine</a></li>
|
||||||
|
<li><a href="#Environment_Entry">Environment Entry</a></li>
|
||||||
|
<li><a href="#Host">Host</a></li>
|
||||||
|
<li><a href="#JDBC_Resource">JDBC Resource</a></li>
|
||||||
|
<li><a href="#Loader">Loader</a></li>
|
||||||
|
<li><a href="#Manager">Manager</a></li>
|
||||||
|
<li><a href="#Realm">Realm</a></li>
|
||||||
|
<li><a href="#Request_Filter">Request Filter</a></li>
|
||||||
|
<li><a href="#Server">Server</a></li>
|
||||||
|
<li><a href="#Service">Service</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Access_Logger">Access Logger</h3><div class="text">
|
||||||
|
|
||||||
|
<p>From the perspective of a particular <em>Access Logger</em>, it shall
|
||||||
|
be possible to perform the following administrative operations:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Navigate to the owning <em>Engine</em>, <em>Host</em>, or
|
||||||
|
<em>Context</em>.</li>
|
||||||
|
<li>Edit the configurable properties of this object.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Connector">Connector</h3><div class="text">
|
||||||
|
|
||||||
|
<p>From the perspective of a particular <em>Connector</em>, it shall be
|
||||||
|
possible to perform the following administrative operations:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Navigate to the owning <em>Service</em>.</li>
|
||||||
|
<li>Edit the configurable properties of this object.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Context">Context</h3><div class="text">
|
||||||
|
|
||||||
|
<p>From the perspective of a particular <em>Context</em>, it shall be
|
||||||
|
possible to perform the following administrative operations:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Navigate to the owning <em>Host</em>.</li>
|
||||||
|
<li>Edit the configurable properties of this object.</li>
|
||||||
|
<li>Create and configure a new <em>Access Logger</em> associated
|
||||||
|
with this object.</li>
|
||||||
|
<li>Edit the configurable properties of the associated <em>Access
|
||||||
|
Logger</em>.</li>
|
||||||
|
<li>Remove the associated <em>Access Logger</em>.</li>
|
||||||
|
<li>Create and configure a new <em>Environment Entry</em> associated
|
||||||
|
with this object.</li>
|
||||||
|
<li>Select and edit the configurable properties of an associated
|
||||||
|
<em>Environment Entry</em>.</li>
|
||||||
|
<li>Remove an associated <em>Environment Entry</em>.</li>
|
||||||
|
<li>Create and configure a new <em>JDBC Resource</em> associated
|
||||||
|
with this object.</li>
|
||||||
|
<li>Select and edit the configurable properties of an associated
|
||||||
|
<em>JDBC Resource</em>.</li>
|
||||||
|
<li>Remove an associated <em>JDBC Resource</em>.</li>
|
||||||
|
<li>Create and configure a new <em>Loader</em> associated with
|
||||||
|
this object.</li>
|
||||||
|
<li>Edit the configurable properties of the associated <em>Loader</em>.</li>
|
||||||
|
<li>Remove the associated <em>Loader</em>.</li>
|
||||||
|
<li>Create and configure a new <em>Manager</em> associated with
|
||||||
|
this object.</li>
|
||||||
|
<li>Edit the configurable properties of the associated <em>Manager</em>.</li>
|
||||||
|
<li>Remove the associated <em>Manager</em>.</li>
|
||||||
|
<li>Create and configure a new <em>Realm</em> associated with
|
||||||
|
this object.</li>
|
||||||
|
<li>Edit the configurable properties of the associated <em>Realm</em>.</li>
|
||||||
|
<li>Remove the associated <em>Realm</em>.</li>
|
||||||
|
<li>Create and configure a new <em>Request Filter</em> associated with
|
||||||
|
this object.</li>
|
||||||
|
<li>Select and edit the configurable properties of an
|
||||||
|
associated <em>Request Filter</em></li>
|
||||||
|
<li>Remove an associated <em>Request Filter</em>.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Default_Context">Default Context</h3><div class="text">
|
||||||
|
|
||||||
|
<p>From the perspective of a particular <em>Default Context</em>, it shall
|
||||||
|
be possible to perform the following administrative operations:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Navigate to the owning <em>Engine</em> or <em>Host</em>.</li>
|
||||||
|
<li>Edit the configurable properties of this object.</li>
|
||||||
|
<li>Create and configure a new <em>Environment Entry</em> associated
|
||||||
|
with this object.</li>
|
||||||
|
<li>Select and edit the configurable properties of an associated
|
||||||
|
<em>Environment Entry</em>.</li>
|
||||||
|
<li>Remove an associated <em>Environment Entry</em>.</li>
|
||||||
|
<li>Create and configure a new <em>JDBC Resource</em> associated
|
||||||
|
with this object.</li>
|
||||||
|
<li>Select and edit the configurable properties of an associated
|
||||||
|
<em>JDBC Resource</em>.</li>
|
||||||
|
<li>Remove an associated <em>JDBC Resource</em>.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Engine">Engine</h3><div class="text">
|
||||||
|
|
||||||
|
<p>From the perspective of a particular <em>Engine</em>, it shall be
|
||||||
|
possible to perform the following administrative operations:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Navigate to the owning <em>Service</em>.</li>
|
||||||
|
<li>Edit the configurable properties of this object.</li>
|
||||||
|
<li>Create and configure a new <em>Access Logger</em> associated
|
||||||
|
with this object.</li>
|
||||||
|
<li>Edit the configurable properties of the associated <em>Access
|
||||||
|
Logger</em>.</li>
|
||||||
|
<li>Remove the associated <em>Access Logger</em>.</li>
|
||||||
|
<li>Create and configure a new <em>Default Context</em> associated
|
||||||
|
with this object.</li>
|
||||||
|
<li>Edit the configurable properties of the associated <em>Default
|
||||||
|
Context</em>.</li>
|
||||||
|
<li>Remove the associated <em>Default Context</em>.</li>
|
||||||
|
<li>Create and configure a new <em>Host</em> associated with
|
||||||
|
this object.</li>
|
||||||
|
<li>Select and edit the configurable properties of an
|
||||||
|
associated <em>Host</em>.</li>
|
||||||
|
<li>Remove an associated <em>Host</em>.</li>
|
||||||
|
<li>Create and configure a new <em>Realm</em> associated with
|
||||||
|
this object.</li>
|
||||||
|
<li>Edit the configurable properties of the associated <em>Realm</em>.</li>
|
||||||
|
<li>Remove the associated <em>Realm</em>.</li>
|
||||||
|
<li>Create and configure a new <em>Request Filter</em> associated with
|
||||||
|
this object.</li>
|
||||||
|
<li>Select and edit the configurable properties of an
|
||||||
|
associated <em>Request Filter</em></li>
|
||||||
|
<li>Remove an associated <em>Request Filter</em>.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Environment_Entry">Environment Entry</h3><div class="text">
|
||||||
|
|
||||||
|
<p>From the perspective of a particular <em>Environment Entry</em>, it shall
|
||||||
|
be possible to perform the following administrative operations:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Navigate to the owning <em>Context</em> or <em>Default Context</em>.</li>
|
||||||
|
<li>Edit the configurable properties of this object.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Host">Host</h3><div class="text">
|
||||||
|
|
||||||
|
<p>From the perspective of a particular <em>Host</em>, it shall be
|
||||||
|
possible to perform the following administrative operations:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Navigate to the owning <em>Engine</em>.</li>
|
||||||
|
<li>Edit the configurable properties of this object.</li>
|
||||||
|
<li>Create and configure a new <em>Access Logger</em> associated
|
||||||
|
with this object.</li>
|
||||||
|
<li>Edit the configurable properties of the associated <em>Access
|
||||||
|
Logger</em>.</li>
|
||||||
|
<li>Remove the associated <em>Access Logger</em>.</li>
|
||||||
|
<li>Create and configure a new <em>Context</em> associated with
|
||||||
|
this object.</li>
|
||||||
|
<li>Select and edit the configurable properties of an associated
|
||||||
|
<em>Context</em>.</li>
|
||||||
|
<li>Remove an associated <em>Context</em>.</li>
|
||||||
|
<li>Create and configure a new <em>Default Context</em> associated
|
||||||
|
with this object.</li>
|
||||||
|
<li>Edit the configurable properties of the associated <em>Default
|
||||||
|
Context</em>.</li>
|
||||||
|
<li>Remove the associated <em>Default Context</em>.</li>
|
||||||
|
<li>Create and configure a new <em>Realm</em> associated with
|
||||||
|
this object.</li>
|
||||||
|
<li>Edit the configurable properties of the associated <em>Realm</em>.</li>
|
||||||
|
<li>Remove the associated <em>Realm</em>.</li>
|
||||||
|
<li>Create and configure a new <em>Request Filter</em> associated with
|
||||||
|
this object.</li>
|
||||||
|
<li>Select and edit the configurable properties of an
|
||||||
|
associated <em>Request Filter</em></li>
|
||||||
|
<li>Remove an associated <em>Request Filter</em>.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="JDBC_Resource">JDBC Resource</h3><div class="text">
|
||||||
|
|
||||||
|
<p>From the perspective of a particular <em>JDBC Resource</em>, it shall
|
||||||
|
be possible to perform the following administrative operations:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Navigate to the owning <em>Context</em> or <em>Default Context</em>.</li>
|
||||||
|
<li>Edit the configurable properties of this object.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Loader">Loader</h3><div class="text">
|
||||||
|
|
||||||
|
<p>From the perspective of a particular <em>Loader</em>, it shall
|
||||||
|
be possible to perform the following administrative operations:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Navigate to the owning <em>Context</em>.</li>
|
||||||
|
<li>Edit the configurable properties of this object.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Manager">Manager</h3><div class="text">
|
||||||
|
|
||||||
|
<p>From the perspective of a particular <em>Manager</em>, it shall
|
||||||
|
be possible to perform the following administrative operations:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Navigate to the owning <em>Context</em>.</li>
|
||||||
|
<li>Edit the configurable properties of this object.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Realm">Realm</h3><div class="text">
|
||||||
|
|
||||||
|
<p>From the perspective of a particular <em>Realm</em>, it shall
|
||||||
|
be possible to perform the following administrative operations:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Navigate to the owning <em>Engine</em>, <em>Host</em>, or
|
||||||
|
<em>Context</em>.</li>
|
||||||
|
<li>Edit the configurable properties of this object.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Request_Filter">Request Filter</h3><div class="text">
|
||||||
|
|
||||||
|
<p>From the perspective of a particular <em>Request Filter</em>, it shall
|
||||||
|
be possible to perform the following administrative operations:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Navigate to the owning <em>Engine</em>, <em>Host</em>, or
|
||||||
|
<em>Context</em>.</li>
|
||||||
|
<li>Edit the configurable properties of this object.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Server">Server</h3><div class="text">
|
||||||
|
|
||||||
|
<p>From the perspective of the overall <em>Server</em>, it shall be
|
||||||
|
possible to perform the following administrative operations:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Edit the configurable properties of this object.</li>
|
||||||
|
<li>Create and configure a new <em>Service</em> associated with
|
||||||
|
this object.</li>
|
||||||
|
<li>Select and edit the configurable properties of an associated
|
||||||
|
<em>Service</em>.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><h3 id="Service">Service</h3><div class="text">
|
||||||
|
|
||||||
|
<p>From the perspective of a particular <em>Service</em>, it shall be
|
||||||
|
possible to perform the following administrative operations:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Navigate to the owning <em>Server</em>.</li>
|
||||||
|
<li>Edit the configurable properties of this object.</li>
|
||||||
|
<li>Create and configure a new <em>Connector</em> associated with
|
||||||
|
this object.</li>
|
||||||
|
<li>Select and edit the configurable properties of an associated
|
||||||
|
<em>Connector</em>.</li>
|
||||||
|
<li>Remove an associated <em>Connector</em>.</li>
|
||||||
|
<li>Create and configure a new <em>Engine</em> associated with
|
||||||
|
this object.</li>
|
||||||
|
<li>Edit the configurable properties of the associated <em>Engine</em>.</li>
|
||||||
|
<li>Remove the associated <em>Engine</em>.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,270 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Catalina Functional Specifications (8.0.53) - Default Servlet</title><meta name="author" content="Craig McClanahan"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/funcspecs/fs-default">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Catalina Functional Specifications</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Functional Specs</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Administrative Apps</h2><ul><li><a href="fs-admin-apps.html">Overall Requirements</a></li><li><a href="mbean-names.html">Tomcat MBean Names</a></li><li><a href="fs-admin-objects.html">Administered Objects</a></li><li><a href="fs-admin-opers.html">Supported Operations</a></li></ul></div><div><h2>Internal Servlets</h2><ul><li><a href="fs-default.html">Default Servlet</a></li></ul></div><div><h2>Realm Implementations</h2><ul><li><a href="fs-jdbc-realm.html">JDBC Realm</a></li><li><a href="fs-jndi-realm.html">JNDI Realm</a></li><li><a href="fs-memory-realm.html">Memory Realm</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>Default Servlet</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Overview">Overview</a><ol><li><a href="#Introduction">Introduction</a></li><li><a href="#External_Specifications">External Specifications</a></li><li><a href="#Implementation_Requirements">Implementation Requirements</a></li></ol></li><li><a href="#Dependencies">Dependencies</a><ol><li><a href="#Environmental_Dependencies">Environmental Dependencies</a></li><li><a href="#Container_Dependencies">Container Dependencies</a></li></ol></li><li><a href="#Functionality">Functionality</a><ol><li><a href="#Initialization_Functionality">Initialization Functionality</a></li><li><a href="#Per-Request_Functionality">Per-Request Functionality</a></li><li><a href="#Finalization_Functionality">Finalization Functionality</a></li></ol></li><li><a href="#Testable_Assertions">Testable Assertions</a></li></ul>
|
||||||
|
</div><h3 id="Overview">Overview</h3><div class="text">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Introduction">Introduction</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The purpose of the <strong>Default Servlet</strong> is to serve
|
||||||
|
static resources of a web application in response to client requests.
|
||||||
|
As the name implies, it is generally configured as the "default"
|
||||||
|
servlet for a web application, by being mapped to a URL pattern "/".</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="External_Specifications">External Specifications</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The following external specifications have provisions which
|
||||||
|
partially define the correct behavior of the default servlet:</p>
|
||||||
|
<ul>
|
||||||
|
<li><a href="https://jcp.org/aboutJava/communityprocess/final/jsr340/index.html">
|
||||||
|
Servlet Specification</a> (Version 3.1)</li>
|
||||||
|
<li><a href="https://www.rfc-editor.org/rfc/rfc2046.txt">Multipurpose
|
||||||
|
Internet Mail Extensions (MIME) Part Two: Media Types</a></li>
|
||||||
|
<li><a href="https://www.rfc-editor.org/rfc/rfc2616.txt">Hypertext
|
||||||
|
Transfer Protocol – HTTP/1.1</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Implementation_Requirements">Implementation Requirements</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The implementation of this functionality shall conform to the
|
||||||
|
following requirements:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Must be implemented as a servlet.</li>
|
||||||
|
<li>Must support configurable parameters for debugging detail level,
|
||||||
|
input buffer size, output buffer size, whether or not to produce
|
||||||
|
directory listings when no welcome file is present, and whether or not
|
||||||
|
modifications are supported via DELETE and PUT.</li>
|
||||||
|
<li>Log debugging and operational messages (suitably internationalized)
|
||||||
|
via the <code>getServletContext().log()</code> method.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
</div><h3 id="Dependencies">Dependencies</h3><div class="text">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Environmental_Dependencies">Environmental Dependencies</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The following environmental dependencies must be met in order for
|
||||||
|
the default servlet to operate correctly:</p>
|
||||||
|
<ul>
|
||||||
|
<li>The default servlet must be registered in the application deployment
|
||||||
|
descriptor (or the default deployment descriptor in file
|
||||||
|
<code>$CATALINA_BASE/conf/web.xml</code>) using a "default servlet"
|
||||||
|
servlet mapping, signified by URL pattern "/".</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Container_Dependencies">Container Dependencies</h4><div class="text">
|
||||||
|
|
||||||
|
<p>Correct operation of the default servlet depends on the following
|
||||||
|
specific features of the surrounding container:</p>
|
||||||
|
<ul>
|
||||||
|
<li>The container shall provide a servlet context attribute that
|
||||||
|
lists the welcome file names that have been defined for this
|
||||||
|
web application.</li>
|
||||||
|
<li>The container shall provide a servlet context attribute that
|
||||||
|
contains a <code>javax.naming.directory.DirContext</code>
|
||||||
|
implementation representing the static resources of this
|
||||||
|
web application.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
</div><h3 id="Functionality">Functionality</h3><div class="text">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Initialization_Functionality">Initialization Functionality</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The following processing must be performed when the <code>init()</code>
|
||||||
|
method of the default servlet is called:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Process and sanity check configuration parameters.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Per-Request_Functionality">Per-Request Functionality</h4><div class="text">
|
||||||
|
|
||||||
|
|
||||||
|
<p>For all HTTP request methods, the resource path is determined from
|
||||||
|
the path information provided to this request, either as request attribute
|
||||||
|
<code>javax.servlet.include.path_info</code> (for a request dispatcher
|
||||||
|
access to a static resource) or by calling
|
||||||
|
<code>request.getPathInfo()</code> directly.</p>
|
||||||
|
|
||||||
|
<p>On each HTTP DELETE request processed by this servlet, the following
|
||||||
|
processing shall be performed:</p>
|
||||||
|
<ul>
|
||||||
|
<li>If modifications to the static resources are not allowed (set by a
|
||||||
|
configuration parameter), return HTTP status 403 (forbidden).</li>
|
||||||
|
<li>If an attempt is made to delete a resource from <code>/META-INF</code>
|
||||||
|
or <code>/WEB-INF</code>, return HTTP status 403 (forbidden).</li>
|
||||||
|
<li>If the requested resource does not exist, return HTTP status 404
|
||||||
|
(not found)</li>
|
||||||
|
<li>Unbind the resource from the directory context containing the
|
||||||
|
static resources for this web application. If successful, return
|
||||||
|
HTTP status 204 (no content). Otherwise, return HTTP status 405
|
||||||
|
(method not allowed).</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<p>On each HTTP GET request processed by this servlet, the following
|
||||||
|
processing shall be performed:</p>
|
||||||
|
<ul>
|
||||||
|
<li>If the request is for a resource under <code>/META-INF</code> or
|
||||||
|
<code>/WEB-INF</code>, return HTTP status 404 (not found).</li>
|
||||||
|
<li>If the requested resource does not exist, return HTTP status 404
|
||||||
|
(not found).</li>
|
||||||
|
<li>If the requested resource is not a directory, but the resource
|
||||||
|
path ends in "/" or "\", return HTTP status 404 (not found).</li>
|
||||||
|
<li>If the requested resource is a directory:
|
||||||
|
<ul>
|
||||||
|
<li>If the request path does not end with "/", redirect to a
|
||||||
|
corresponding path with "/" appended so that relative references
|
||||||
|
in welcome files are resolved correctly.</li>
|
||||||
|
<li>If one of the specified welcome files exists, redirect to the
|
||||||
|
path for that welcome file so that it will be served explicitly.
|
||||||
|
</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>If the request being processed contains an <code>If-Range</code>
|
||||||
|
header, perform the processing described in the HTTP/1.1 specification
|
||||||
|
to determine whether the client's information is up to date.</li>
|
||||||
|
<li>Determine the content type of the response, by looking up the
|
||||||
|
corresponding MIME type in our servlet context.</li>
|
||||||
|
<li>If the requested resource is a directory:
|
||||||
|
<ul>
|
||||||
|
<li>If directory listings are suppressed, return HTTP status 404
|
||||||
|
(not found).</li>
|
||||||
|
<li>Set the content type to <code>text/html</code>.</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>Determine the range(s) to be returned, based on the existence of
|
||||||
|
any <code>If-Range</code> and <code>Range</code> headers.</li>
|
||||||
|
<li>If the requested resource is a directory, include an <code>ETag</code>
|
||||||
|
header in the response, with the value calculated based on the content
|
||||||
|
of the directory.</li>
|
||||||
|
<li>Include a <code>Last-Modified</code> header in the response documenting
|
||||||
|
the date/time that the resource was last modified.</li>
|
||||||
|
<li>Unless we are processing a HEAD request, include the appropriate
|
||||||
|
content (or content ranges) in the response.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>On each HTTP HEAD request processed by this servlet, the following
|
||||||
|
processing shall be performed:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Processed identically to an HTTP GET request, except that the data
|
||||||
|
content is not transmitted after the headers.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>On each HTTP POST request processed by this servlet, the following
|
||||||
|
processing shall be performed:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Processed identically to an HTTP GET request.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<p>On each HTTP PUT request processed by this servlet, the following
|
||||||
|
processing shall be performed:</p>
|
||||||
|
<ul>
|
||||||
|
<li>If modifications to the static resources are not allowed (set by a
|
||||||
|
configuration parameter), return HTTP status 403 (forbidden).</li>
|
||||||
|
<li>If an attempt is made to delete a resource from <code>/META-INF</code>
|
||||||
|
or <code>/WEB-INF</code>, return HTTP status 403 (forbidden).</li>
|
||||||
|
<li>Create a new resource from the body of this request.</li>
|
||||||
|
<li>Bind or rebind the specified path to the new resource (depending on
|
||||||
|
whether it currently exists or not). Return HTTP status as follows:
|
||||||
|
<ul>
|
||||||
|
<li>If binding was unsuccessful, return HTTP status 409 (conflict).
|
||||||
|
</li>
|
||||||
|
<li>If binding was successful and the resource did not previously
|
||||||
|
exist, return HTTP status 201 (created).</li>
|
||||||
|
<li>If binding was successful and the resource previously existed,
|
||||||
|
return HTTP status 204 (no content).</li>
|
||||||
|
</ul></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Finalization_Functionality">Finalization Functionality</h4><div class="text">
|
||||||
|
|
||||||
|
<p>No specific processing is required when the <code>destroy()</code>
|
||||||
|
method is called:</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
</div><h3 id="Testable_Assertions">Testable Assertions</h3><div class="text">
|
||||||
|
|
||||||
|
<p>In addition to the assertions implied by the functionality requirements
|
||||||
|
listed above, the following additional assertions shall be tested to
|
||||||
|
validate the behavior of the default servlet:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Requests for resources that do not exist in the web application must
|
||||||
|
return HTTP status 404 (not found).</li>
|
||||||
|
<li>The default servlet must operate identically for web applications that
|
||||||
|
are run out of a WAR file directly, or from an unpacked directory
|
||||||
|
structure.</li>
|
||||||
|
<li>If the web application is running out of an unpacked directory
|
||||||
|
structure, the default servlet must recognize cases where the resource
|
||||||
|
has been updated through external means.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|
|
@ -0,0 +1,266 @@
|
||||||
|
<!DOCTYPE html SYSTEM "about:legacy-compat">
|
||||||
|
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Catalina Functional Specifications (8.0.53) - JDBCRealm</title><meta name="author" content="Craig McClanahan"><script type="application/javascript" data-comments-identifier="tomcat-8.0-doc/funcspecs/fs-jdbc-realm">
|
||||||
|
"use strict"; // Enable strict mode
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var thisScript = document.currentScript;
|
||||||
|
if (!thisScript) { // Workaround for IE <= 11
|
||||||
|
var scripts = document.getElementsByTagName("script");
|
||||||
|
thisScript = scripts[scripts.length - 1];
|
||||||
|
}
|
||||||
|
document.addEventListener("DOMContentLoaded", (function() {
|
||||||
|
var commentsDiv = document.getElementById("comments_thread");
|
||||||
|
var commentsShortname = "tomcat";
|
||||||
|
var commentsIdentifier = "https://tomcat.apache.org/" +
|
||||||
|
thisScript.getAttribute("data-comments-identifier") + ".html";
|
||||||
|
|
||||||
|
(function(w, d) {
|
||||||
|
if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
|
||||||
|
var s = d.createElement("script");
|
||||||
|
s.type = "application/javascript";
|
||||||
|
s.async = true;
|
||||||
|
s.src = "https://comments.apache.org/show_comments.lua?site=" +
|
||||||
|
encodeURIComponent(commentsShortname) +
|
||||||
|
"&page=" + encodeURIComponent(commentsIdentifier);
|
||||||
|
d.head.appendChild(s);
|
||||||
|
} else {
|
||||||
|
commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
|
||||||
|
}
|
||||||
|
})(window, document);
|
||||||
|
}), false);
|
||||||
|
})();
|
||||||
|
</script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="https://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="https://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Catalina Functional Specifications</h1><div class="versionInfo">
|
||||||
|
Version 8.0.53,
|
||||||
|
<time datetime="2018-06-29">Jun 29 2018</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Functional Specs</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Administrative Apps</h2><ul><li><a href="fs-admin-apps.html">Overall Requirements</a></li><li><a href="mbean-names.html">Tomcat MBean Names</a></li><li><a href="fs-admin-objects.html">Administered Objects</a></li><li><a href="fs-admin-opers.html">Supported Operations</a></li></ul></div><div><h2>Internal Servlets</h2><ul><li><a href="fs-default.html">Default Servlet</a></li></ul></div><div><h2>Realm Implementations</h2><ul><li><a href="fs-jdbc-realm.html">JDBC Realm</a></li><li><a href="fs-jndi-realm.html">JNDI Realm</a></li><li><a href="fs-memory-realm.html">Memory Realm</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>JDBCRealm</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
|
||||||
|
<ul><li><a href="#Overview">Overview</a><ol><li><a href="#Introduction">Introduction</a></li><li><a href="#External_Specifications">External Specifications</a></li><li><a href="#Implementation_Requirements">Implementation Requirements</a></li></ol></li><li><a href="#Dependencies">Dependencies</a><ol><li><a href="#Environmental_Dependencies">Environmental Dependencies</a></li><li><a href="#Container_Dependencies">Container Dependencies</a></li></ol></li><li><a href="#Functionality">Functionality</a><ol><li><a href="#Overview_of_Operation">Overview of Operation</a></li><li><a href="#Detailed_Functional_Requirements">Detailed Functional Requirements</a></li></ol></li><li><a href="#Testable_Assertions">Testable Assertions</a></li></ul>
|
||||||
|
</div><h3 id="Overview">Overview</h3><div class="text">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Introduction">Introduction</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The purpose of the <strong>JDBCRealm</strong> implementation is to
|
||||||
|
provide a mechanism by which Tomcat can acquire information needed
|
||||||
|
to authenticate web application users, and define their security roles,
|
||||||
|
from a relational database accessed via JDBC APIs. For integration
|
||||||
|
with Catalina, the resulting class(es) must implement the
|
||||||
|
<code>org.apache.catalina.Realm</code> interface.</p>
|
||||||
|
|
||||||
|
<p>This specification reflects a combination of functionality that is
|
||||||
|
already present in the <code>org.apache.catalina.realm.JDBCRealm</code>
|
||||||
|
class, as well as requirements for enhancements that have been
|
||||||
|
discussed. Where appropriate, requirements statements are marked
|
||||||
|
<em>[Current]</em> and <em>[Requested]</em> to distinguish them.</p>
|
||||||
|
|
||||||
|
<p>The current status of this functional specification is
|
||||||
|
<strong>PROPOSED</strong>. It has not yet been discussed and
|
||||||
|
agreed to on the TOMCAT-DEV mailing list.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="External_Specifications">External Specifications</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The implementation of this functionality depends on the following
|
||||||
|
external specifications:</p>
|
||||||
|
<ul>
|
||||||
|
<li><a href="http://www.oracle.com/technetwork/java/javase/jdbc/index.html">
|
||||||
|
Java Database Connectivity</a> (version 2.0 or later)</li>
|
||||||
|
<li><a href="http://www.oracle.com/technetwork/java/javase/jdbc/index.html">
|
||||||
|
Java Database Connectivity Optional Package</a> (version 2.0 or later)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Implementation_Requirements">Implementation Requirements</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The implementation of this functionality shall conform to the
|
||||||
|
following requirements:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Be realized in one or more implementation classes.</li>
|
||||||
|
<li>Implement the <code>org.apache.catalina.Realm</code> interface.
|
||||||
|
[Current]</li>
|
||||||
|
<li>Implement the <code>org.apache.catalina.Lifecycle</code>
|
||||||
|
interface. [Current]</li>
|
||||||
|
<li>Subclass the <code>org.apache.catalina.realm.RealmBase</code>
|
||||||
|
base class.</li>
|
||||||
|
<li>Live in the <code>org.apache.catalina.realm</code> package.
|
||||||
|
[Current]</li>
|
||||||
|
<li>Support a configurable debugging detail level. [Current]</li>
|
||||||
|
<li>Log debugging and operational messages (suitably internationalized)
|
||||||
|
via the <code>getContainer().log()</code> method. [Current]</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
</div><h3 id="Dependencies">Dependencies</h3><div class="text">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Environmental_Dependencies">Environmental Dependencies</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The following environmental dependencies must be met in order for
|
||||||
|
JDBCRealm to operate correctly:</p>
|
||||||
|
<ul>
|
||||||
|
<li>The desire to utilize JDBCRealm must be registered in
|
||||||
|
<code>$CATALINA_BASE/conf/server.xml</code>, in a
|
||||||
|
<code><Realm></code> element that is nested inside a
|
||||||
|
corresponding <code><Engine></code>, <code><Host></code>,
|
||||||
|
or <code><Context></code> element.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Container_Dependencies">Container Dependencies</h4><div class="text">
|
||||||
|
|
||||||
|
<p>Correct operation of JDBCRealm depends on the following
|
||||||
|
specific features of the surrounding container:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Interactions with <code>JDBCRealm</code> will be initiated by
|
||||||
|
the appropriate <code>Authenticator</code> implementation, based
|
||||||
|
on the login method that is selected.</li>
|
||||||
|
<li><code>JDBCRealm</code> must have the JDBC standard API classes
|
||||||
|
available to it. For a JDK 1.2 or later container, these APIs
|
||||||
|
are included in the standard platform.</li>
|
||||||
|
<li>When connection pooling is implemented, <code>JDBCRealm</code>
|
||||||
|
must have the JDBC Optional Package (version 2.0 or later) APIs
|
||||||
|
available to it. This library is available as a separate
|
||||||
|
download (and will be included in Tomcat binary distributions).</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
</div><h3 id="Functionality">Functionality</h3><div class="text">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Overview_of_Operation">Overview of Operation</h4><div class="text">
|
||||||
|
|
||||||
|
<p>The main purpose of <code>JDBCRealm</code> is to allow Catalina to
|
||||||
|
authenticate users, and look up the corresponding security roles, from
|
||||||
|
the information found in a relational database accessed via JDBC APIs.
|
||||||
|
For maximum flexibility, the details of how this is done (for example,
|
||||||
|
the names of the required tables and columns) should be configurable.</p>
|
||||||
|
|
||||||
|
<p>Each time that Catalina needs to authenticate a user, it will call
|
||||||
|
the <code>authenticate()</code> method of this Realm implementation,
|
||||||
|
passing the username and password that were specified by the user. If
|
||||||
|
we find the user in the database (and match on the password), we accumulate
|
||||||
|
all of the security roles that are defined for this user, and create a
|
||||||
|
new <code>GenericPrincipal</code> object to be returned. If the user
|
||||||
|
is not authenticated, we return <code>null</code> instead. The
|
||||||
|
<code>GenericUser</code> object caches the set of security roles that
|
||||||
|
were owned by this user at the time of authentication, so that calls to
|
||||||
|
<code>isUserInRole()</code> can be answered without going back to the
|
||||||
|
database every time.</p>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="subsection"><h4 id="Detailed_Functional_Requirements">Detailed Functional Requirements</h4><div class="text">
|
||||||
|
|
||||||
|
|
||||||
|
<h3>Configurable Properties</h3>
|
||||||
|
|
||||||
|
<p>The implementation shall support the following properties
|
||||||
|
that can be configured with JavaBeans property setters:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Configuration parameters defining the JDBC driver to use, the
|
||||||
|
database connection URL to be accessed, and the username/password
|
||||||
|
to use for logging in. [Current]</li>
|
||||||
|
<li>Configuration parameters describing the connection pool to be
|
||||||
|
created to support simultaneous authentications. [Requested]</li>
|
||||||
|
<li>Name of the tables to be searched for users and roles. [Current]</li>
|
||||||
|
<li>Name of the columns to be used for usernames, passwords, and
|
||||||
|
role names. [Current]</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h3>Lifecycle Functionality</h3>
|
||||||
|
|
||||||
|
<p>The following processing must be performed when the <code>start()</code>
|
||||||
|
method is called:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Establish a connection to the configured database, using the
|
||||||
|
configured username and password. [Current]</li>
|
||||||
|
<li>Configure and establish a connection pool of connections to the
|
||||||
|
database. [Requested]</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>The following processing must be performed when the <code>stop()</code>
|
||||||
|
method is called:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Close any opened connections to the database.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<h3>Method authenticate() Functionality</h3>
|
||||||
|
|
||||||
|
<p>When <code>authenticate()</code> is called, the following processing
|
||||||
|
is required:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Acquire the one and only connection [Current] or acquire a connection
|
||||||
|
from the connection pool [Requested].</li>
|
||||||
|
<li>Select the one and only row from the user's table for this user,
|
||||||
|
and retrieve the corresponding password column. If zero rows (or
|
||||||
|
more than one row) are found, return <code>null</code>.</li>
|
||||||
|
<li>Authenticate the user by comparing the (possibly encrypted) password
|
||||||
|
value that was received against the password presented by the user.
|
||||||
|
If there is no match, return <code>null</code>.</li>
|
||||||
|
<li>Acquire a <code>List</code> of the security roles assigned to the
|
||||||
|
authenticated user by selecting from the roles table.</li>
|
||||||
|
<li>Construct a new instance of class
|
||||||
|
<code>org.apache.catalina.realm.GenericPrincipal</code>, passing as
|
||||||
|
constructor arguments: this realm instance, the authenticated
|
||||||
|
username, and a <code>List</code> of the security roles associated
|
||||||
|
with this user.</li>
|
||||||
|
<li><strong>WARNING</strong> - Do not attempt to cache and reuse previous
|
||||||
|
<code>GenericPrincipal</code> objects for a particular user, because
|
||||||
|
the information in the directory server might have changed since the
|
||||||
|
last time this user was authenticated.</li>
|
||||||
|
<li>Return the newly constructed <code>GenericPrincipal</code>.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<h3>Method hasRole() Functionality</h3>
|
||||||
|
|
||||||
|
<p>When <code>hasRole()</code> is called, the following processing
|
||||||
|
is required:</p>
|
||||||
|
<ul>
|
||||||
|
<li>The <code>principal</code> that is passed as an argument SHOULD
|
||||||
|
be one that we returned (instanceof class
|
||||||
|
<code>org.apache.catalina.realm.GenericPrincipal</code>, with a
|
||||||
|
<code>realm</code> property that is equal to our instance.</li>
|
||||||
|
<li>If the passed <code>principal</code> meets these criteria, check
|
||||||
|
the specified role against the list returned by
|
||||||
|
<code>getRoles()</code>, and return <code>true</code> if the
|
||||||
|
specified role is included; otherwise, return <code>false</code>.</li>
|
||||||
|
<li>If the passed <code>principal</code> does not meet these criteria,
|
||||||
|
return <code>false</code>.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div></div>
|
||||||
|
|
||||||
|
</div><h3 id="Testable_Assertions">Testable Assertions</h3><div class="text">
|
||||||
|
|
||||||
|
<p>In addition to the assertions implied by the functionality requirements
|
||||||
|
listed above, the following additional assertions shall be tested to
|
||||||
|
validate the behavior of <code>JDBCRealm</code>:</p>
|
||||||
|
<ul>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div><div class="noprint"><h3 id="comments_section">
|
||||||
|
Comments
|
||||||
|
</h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
|
||||||
|
on improving documentation for Apache Tomcat.<br><br>
|
||||||
|
If you have trouble and need help, read
|
||||||
|
<a href="https://tomcat.apache.org/findhelp.html">Find Help</a> page
|
||||||
|
and ask your question on the tomcat-users
|
||||||
|
<a href="https://tomcat.apache.org/lists.html">mailing list</a>.
|
||||||
|
Do not ask such questions here. This is not a Q&A section.<br><br>
|
||||||
|
The Apache Comments System is explained <a href="../comments.html">here</a>.
|
||||||
|
Comments may be removed by our moderators if they are either
|
||||||
|
implemented or considered invalid/off-topic.
|
||||||
|
</p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
|
||||||
|
Copyright © 1999-2018, The Apache Software Foundation
|
||||||
|
</div></footer></div></body></html>
|