[[ServletTomcatExample-ServletTomcatExample]]
= Servlet Tomcat Example

*Since Camel 2.7*

This example is located in the
https://github.com/apache/camel-examples/tree/master/examples/camel-example-servlet-tomcat[examples/camel-example-servlet-tomcat]
directory of the https://github.com/apache/camel-examples[Camel Examples Repository].
There is a `README.adoc` file with instructions how to run it.

If you use Maven then you can easily package the example from the command line:

----
mvn package
----

[[ServletTomcatExample-About]]
== About

This example demonstrates how you can use xref:components::servlet-component.adoc[Servlet] to expose
a http service in a Camel route.

[[ServletTomcatExample-Implementation]]
== Implementation

In the `web.xml` file in the `src/main/webapp/WEB-INF` folder the `CamelServlet`
is defined. This is mandatory to do when using the xref:components::servlet-component.adoc[Servlet]
component.

[source,xml]
----
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

  <display-name>My Web Application</display-name>

  <!-- location of spring xml files -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:camel-config.xml</param-value>
  </context-param>

  <!-- the listener that kick-starts Spring -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <!-- Camel servlet -->
  <servlet>
    <servlet-name>CamelServlet</servlet-name>
    <servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <!-- Camel servlet mapping -->
  <servlet-mapping>
    <servlet-name>CamelServlet</servlet-name>
    <url-pattern>/camel/*</url-pattern>
  </servlet-mapping>

</web-app>
----

The route is a simple xref:{eip-vc}:eips:content-based-router-eip.adoc[Content Based Router] defined
in the DSL XML as shown:

[source,xml]
----
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:camel="http://camel.apache.org/schema/spring"
       xsi:schemaLocation="
         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
         http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

  <camelContext xmlns="http://camel.apache.org/schema/spring">

    <route id="helloRoute">
      <!-- incoming requests from the servlet is routed -->
      <from uri="servlet:hello"/>
      <choice>
        <when>
          <!-- is there a header with the key name? -->
          <header>name</header>
          <!-- yes so return back a message to the user -->
          <transform>
            <simple>Hi I am ${sysenv.HOSTNAME}. Hello ${header.name} how are you today?</simple>
          </transform>
        </when>
        <otherwise>
          <!-- if no name parameter then output a syntax to the user -->
          <transform>
            <constant>Add a name parameter to uri, eg ?name=foo</constant>
          </transform>
        </otherwise>
      </choice>
    </route>

  </camelContext>

</beans>
----

[[ServletTomcatExample-Runningtheexample]]
== Running the example

This example runs in Apache Tomcat, so you will have to package the .war file and copy
it to the webapp folder of Tomcat, which is the hot deploy folder.

There is a main page at
http://localhost:8080/camel-example-servlet-tomcat which has more instructions.
You can then use a web browser and send a request to the
http://localhost:8080/camel-example-servlet-tomcat/camel/hello URL.

