当前位置: 首页 > 知识库问答 >
问题:

web应用中的apache camel“Jetty vs Servlet”

常经赋
2023-03-14

在我们的项目中,我们计划使用apache camel进行web请求路由/编排。

有人能建议一下,在骆驼web应用程序中使用web请求的最佳/标准方式是什么吗?

我相信骆驼有几种选择:

  • Servlet-Listenter+servlet组件组合
  • 防波堤组件
  • spring web和xml(我们希望避免任何spring依赖项)
  • 其他方法吗???

共有1个答案

许俊贤
2023-03-14

Jetty是从某个给定URL接收请求的最简单的方法。

from("jetty:http://localhost:{{port}}/myapp/myservice")
    .process() // do something with the Exchange

这很容易运行,但最终可能会使用一些棘手的路由规则来区分get、POST等等。在骆驼路线中的多条执行路径(即带有分裂、选择等)可能/将成为不小心的人的陷阱。

Servlet更加棘手,因为您需要编写Servlet实现并将其注册到Servlet容器中(例如通过web.xml),结果是相同的--您得到一个HTTP请求作为交换。

web.xml

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

RouteBuilder
    from("servlet:///hello?matchOnUriPrefix=true").process(new Processor() {
        // do stuff

我不认为这比jetty组件有任何优势。

骆驼RestDSL是我的选择。它是一个简单的DSL,用于描述HTTPendpoint,具有良好的REST语义,路由规则是什么很清楚,并且相对简洁。这只适用于2.14以后的版本。

       rest("/say")
            .get("/hello").to("direct:hello")
            .get("/bye").consumes("application/json").to("direct:bye")
            .post("/bye").to("mock:update");

        from("direct:hello")
            .transform().constant("Hello World");
        from("direct:bye")
            .transform().constant("Bye World");
 类似资料:
  • 我试图在聚合器完成后获得一个回复,但是我得到一个异常,我没有指定任何聚合器子项,但是当我指定一个。to()endpoint我没有收到聚合结果。。。这可能吗? 控制器: 聚合器:

  • 我正在尝试向异步路由发送消息,但它不起作用。我刚刚在github上创建了一个项目来模拟这个问题

  • 问题内容: 电视的大多数应用程序都是基于Web的(html,javascript和css),我想将现有的电视Web应用程序移植到tvOS。 Xcode中的SDK没有显示像iOS中那样的Webview实现,无法创建基于html,javascript和css的应用,但是根据文档,可以使用tvjs框架使用javascript ,但是Apple拥有自己的标记语言,而不是html用于称为TVML的电视。 我

  • 在 Web 服务器中 Web 应用程序的根目录是一个特定的路径。例如,一个catalog应用,可以位于 http://www.mycorp.com/catalog。以这个前缀开始的所有请求将被路由到代表 catalog 应用的 ServletContext 环境中。 servlet 容器能够制定Web应用程序自动生成的规则。例如,一个~user/映射可用于映射到一个基于/home /user/pu

  • 我正在使用apache camel cxf开发一个Web服务(肥皂),我遇到了这个错误。 Java . lang . illegalargumentexception:Part { http://blue print . camel . ngt . TN/}返回的类型应为[ltn . ngt . camel . blue print . WB _ subscriptions;,而不是org . A

  • 我有一个restendpoint示例。org,返回表单的json响应 我的路线是这样的 我读过关于轮询消费者的内容,但找不到如何继续轮询endpoint的示例,直到它返回“success”响应。 是否应该使用轮询消费者?如果是这样的话,可以举一个与我的案例相关的例子。用于轮询restendpoint的任何其他资源都非常有用。

  • 我的应用程序具有apache模块提供的CSRF保护。我的应用程序包含几个允许上载一些文件的页面,如下所示: 当我们将apache版本从httpd-2.2.3更新到httpd-2.2.15时,所有的工作都很好。 我谷歌了一段时间,发现这个问题可能与我表单中的multipart/form-data参数有关。在这种情况下,表单发送不安全。我还发现Spring可以通过Spring doc的处理如上所述的内

  • Web 应用 Class Loader Servlet 容器是一个 Java EE 产品的一部分,不应该允许应用程序重写Java SE 或 Java EE 平台的类,比如那些在 Java. 和 javax. 命名空间中的类,Java SE 或 Java EE 不允许被修改。 Web 应用程序环境 Java EE 定义了一个命名的环境,允许应用程序在没有明确的知道外部信息是如何命名和组织的情况下轻松