Camel Servlet and Apache Tomcat using Blueprint Web example
===========================================================

An example which shows how to use the Camel Servlet with Apache Tomcat.

You will need to package this example first:
  mvn package

To run the example deploy it in Apache Tomcat by copying the .war to the
deploy folder of Apache Tomcat.

And then hit this url from a webbrowser which has further
instructions (use correct version number)
  http://localhost:8080/camel-example-servlet-tomcat-blueprintweb-{version}

The servlet is located at (use correct version number)
  http://localhost:8080/camel-example-servlet-tomcat-blueprintweb-{version}/camel/hello

This example is documented at
  http://camel.apache.org/servlet-tomcat-blueprintweb-example.html

If you hit any problems please let us know on the Camel Forums
  http://camel.apache.org/discussion-forums.html

Please help us make Apache Camel better - we appreciate any feedback you may
have.  Enjoy!

------------------------
The Camel riders!
