如何将 web 应用程序部署到 Apache Felix?

Posted

技术标签:

【中文标题】如何将 web 应用程序部署到 Apache Felix?【英文标题】:How do I deploy a webapp into Apache Felix? 【发布时间】:2010-12-08 08:05:27 【问题描述】:

我需要安装哪些捆绑包?至少,这必须是一个 servlet 容器/Web 服务器,例如 Jetty,但基本的 org.apache.felix.http.jetty 捆绑包可以吗,或者是否需要其他任何东西来发现其他捆绑包中的 web.xml

我是否将 webapp 放在标准 WAR 中,添加 OSGi 标头并完成?或者 OSGi 环境是否需要任何特定于 webapp 的标头?

还需要进行哪些配置?

使用 Maven 自动化这些步骤的选项有哪些?

我已尝试部署 org.apache.felix.http.jetty 捆绑包,但我在 localhost:8080 上收到 404 的 Jetty 应答。接下来,我尝试了一个简单的 webapp,除了配置为welcome-file 的静态 html 文件之外什么都没有。据我所知,Jetty 甚至没有注意到部署描述符,至少将测试 webapp 部署到 Felix 中并没有改变任何东西。

【问题讨论】:

【参考方案1】:

您不必使用 Pax Web,但它确实使事情变得更容易。如果没有 Pax Web,您将需要一个实现 OSGi HTTP 服务的包(为此有一个 Jetty 包),然后获取对 HttpService 的服务引用。你可以用这个注册你的 webapp,但这很乏味。如果您想查看血腥细节,请查看 Pax Web 代码。 Pax Web 不会向 HttpService 添加任何内容,而只是处理所有注册问题。

【讨论】:

【参考方案2】:

仅靠 Jetty 和 webapp 是不够的,必须有一些粘合剂在特定上下文下的 web 服务器上实际注册 webapp。

一个有效的例子:

使用 org.ops4j.pax.web.pax-web-service 包中的 Pax Web 服务作为 HTTP 服务,它也运行 Jetty 将Webapp-Context 标头添加到您的捆绑清单中 使用 Pax Web 扩展程序在您的捆绑包注册时查找该标头,然后将其连接到 http 服务。

由于某种原因,它必须是 Pax 网络服务,如果我将其替换为来自 org.apache.felix 的基本码头包,它将无法正确解析 URL。

我距离真正理解这里发生的事情还有很长的路要走,但至少我让它工作了。我怀疑如果你让你的 webapp 包在它的包激活器中做一些事情来执行连接,你可以不用 Pax 包和包头。

【讨论】:

也许注册可以通过声明式服务注入(如果不是,它肯定应该是)。

以上是关于如何将 web 应用程序部署到 Apache Felix?的主要内容,如果未能解决你的问题,请参考以下文章

Apache Doris FE配置参数

将python web services 部署到tomcat上

Apache Ant + Ivy 构建了一个部署到本地 Tomcat 的 Web 应用程序

如何在现有的 Web 应用程序中使用 apache spark

Apache中同一个端口如何部署多个项目

如何在Linux下使用Tomcat部署Web应用(图文)