<!--
    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>

<body>
<h2>Camel Servlet and Apache Tomcat example</h2>

This example shows how to use route messages in Apache Tomcat using servlets with Apache Camel.
<br/>
<br/>
To get started click <a href="camel/hello">this link</a>.
<br/>
<br/>
This example is documented at
<a href="http://camel.apache.org/servlet-tomcat-example.html">servlet tomcat example</a>

<br/>
If you hit any problems please let us know on the
<a href="http://camel.apache.org/discussion-forums.html">Camel Forums</a>
<br/>
<br/>
Please help us make Apache Camel better - we appreciate any feedback you may
have. Enjoy!
<br/>
<br/>
The Camel riders!
</body>

</html>