Servlet Tomcat No Spring Example

Available as of Camel 2.11

This example is located in the examples/camel-example-servlet-tomcat-no-spring directory of the Camel distribution.
There is a README.txt file with instructions how to run it.

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

mvn package

About

This example demonstrates how you can create light-weight web applications without the need for Spring Framework.
The example contains a Camel routes that used the Servlet component to expose a http service.

Implementation

In the web.xml file in the src/main/webapp/WEB-INF folder we have both a CamelServlet and CamelContextListener defined.
The CamelServlet is mandatory to do when using the Servlet component. And the JndiCamelServletContextListener is used to bootstrap the Camel application.

web.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>

  <!-- you can configure any of the properties on CamelContext, eg setName will be configured as below -->
  <context-param>
    <param-name>name</param-name>
    <param-value>MyCamel</param-value>
  </context-param>

  <!-- location of Camel route xml files -->
  <context-param>
    <param-name>routeBuilder-MyRoute</param-name>
    <!-- define the routes as a resource from the classpath by prefixing the value with classpath: -->
    <!-- note: instead of using a XML file we can also define the routes in Java code in a RouteBuilder class -->
    <param-value>classpath:camel-config.xml</param-value>
  </context-param>

  <!-- the listener that kick-starts Camel -->
  <listener>
    <listener-class>org.apache.camel.component.servletlistener.JndiCamelServletContextListener</listener-class>
  </listener>

  <!-- Camel servlet used in the Camel application -->
  <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>
Its the ServletListener Component that is used to bootstrap Camel in the web application. See more details at ServletListener Component.

The Camel route

The route is a simple Content Based Router defined in the DSL XML as shown:

camel-config.xml
<!-- here we have the Camel route(s). -->
<!-- we must still use the http://camel.apache.org/schema/spring namespace so Camel can load the routes
     though Spring JARs is not required -->
<routes xmlns="http://camel.apache.org/schema/spring">

  <route>
    <!-- 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>Hello ${header.name} how are you?</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>

</routes>

Running the example

This example runs in any web container such as Apache Tomcat. For example to deploy in Apache Tomcat you will have to package the .war file and copy it to the webapp folder of Tomcat, which is the hot deploy folder.

Note: You have to use the version number of Camel you use. In this documentation we are using 2.11.0.

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

See Also

© 2004-2011 The Apache Software Foundation.
Apache Camel, Camel, Apache, the Apache feather logo, and the Apache Camel project logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
Graphic Design By Hiram