<?xml version="1.0"?>
<document>
<copyright>
   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.
</copyright>
	<properties>
		<title>Configuration options</title>
		<author email="jfrederic.clere@fujitsu-siemens.com">Jean-Frederic Clere</author>
		<date>$Date$</date>
	</properties>
	<section name="Intro">
		<p>
  This document describes the configuration file used by mod_jk2 on the
  Tomcat site. Its default name is ${jkHome}/conf/jk2.properties,
  where ${jkHome} is the well known ${catalina.base} property.
</p>
	</section>
	<section name="Config File Format">
	<p> settings are specified in the following format:
	<source>
	handler.propertie=value
	</source>
	</p></section>
	<section name="Generic properties">
		<p>
			<table>
				<tr>
					<th>Property name</th>
					<th>Default</th>
					<th>Description</th>
				</tr>
				<tr>
					<td>handler.list</td>
					<td>request,container,channelSocket</td>
					<td>Handlers to load.</td>
				</tr>
				<tr>
					<td>class.myhandler</td>
					<td>No default value</td>
					<td>Define the class of the handler myhandler.</td>
				</tr>
			</table>
		</p>
	</section>
</document>
