300.7. 示例


注意

从 Camel 2.7 开始,在 Spring web 应用程序中使用 Servlet 更加简单。详情请查看 Servlet Tomcat 示例

在本例中,我们定义了一个在 http://localhost:8080/camel/services/hello 中公开 HTTP 服务的路由。

首先,您需要通过普通 Web 容器或 OSGi 服务发布 CamelHttpTransportServlet。使用 Web.xml 文件发布 CamelHttpTransportServlet,如下所示:

<web-app>

  <servlet>
    <servlet-name>CamelServlet</servlet-name>
    <display-name>Camel Http Transport Servlet</display-name>
    <servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>CamelServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
  </servlet-mapping>

</web-app>

然后,您可以按照以下方法定义路由:

from("servlet:hello?matchOnUriPrefix=true").process(new Processor() {
    public void process(Exchange exchange) throws Exception {
        String contentType = exchange.getIn().getHeader(Exchange.CONTENT_TYPE, String.class);
        String path = exchange.getIn().getHeader(Exchange.HTTP_URI, String.class);
        path = path.substring(path.lastIndexOf("/"));

        assertEquals("Get a wrong content type", CONTENT_TYPE, contentType);
        // assert camel http header
        String charsetEncoding = exchange.getIn().getHeader(Exchange.HTTP_CHARACTER_ENCODING, String.class);
        assertEquals("Get a wrong charset name from the message heaer", "UTF-8", charsetEncoding);
        // assert exchange charset
        assertEquals("Get a wrong charset naem from the exchange property", "UTF-8", exchange.getProperty(Exchange.CHARSET_NAME));
        exchange.getOut().setHeader(Exchange.CONTENT_TYPE, contentType + "; charset=UTF-8");
        exchange.getOut().setHeader("PATH", path);
        exchange.getOut().setBody("<b>Hello World</b>");
    }
});
注意

指定 camel-servlet 端点的相对路径

由于我们将 HTTP 传输与公布的 servlet 绑定,因此我们不知道 servlet 的应用上下文路径,因此 camel-servlet 端点使用相对路径来指定端点的 URL。客户端可以通过 servlet 发布地址( "http://localhost:8080/camel/services")+ RELATIVE_PATH ("/hello")访问 camel-servlet 端点。

300.7.1. 使用 Spring 3.x 时的示例

请参阅 Servlet Tomcat 示例

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.