如何在 JSF 框架中实现 JAX-RS RESTful 服务

How to implement JAX-RS RESTful service in JSF framework

在我的实验室中,我被要求使用 JSF 框架并使用 REST 创建一个简单的网站。我对这两个做了一些研究。事实证明,对于 REST,我必须将 JAX-RS 框架与 Jersey 一起使用。我想知道如何集成 JAX-RS 和 JSF 这两个框架?

我已经在 web.xml 中为 JSF 提供了以下 servlet:

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/test/*</url-pattern>
</servlet-mapping>

对于 Jersey,我认为我必须在 web.xml 中使用以下 servlet:

<servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.jbm.rest</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>

现在我担心的是,在我看来,这个 Jersey servlet 似乎将取代 web.xml 中的 Faces servlet。这会将我的应用程序从 JSF 更改为 JAX-RS。但我想保留 JSF 并同时使用 JAX-RS。我该怎么做?

这种担心是多余的。您可以在一个 Web 应用程序中安全地拥有多个 servlet,只要它们的 URL 模式不相互冲突即可。通常情况下,如果是这种情况,有点理智的 servlet 容器会在 webapp 启动期间抛出异常。在你的例子中,你已经在 /test/* 上注册了 JSF servlet(这很奇怪,顺便说一句,你 usually 使用 *.xhtml),并且你已经注册了 JAX - /api/* 上的 RS servlet。所以你只是必须使用匹配那些URL模式的URL来调用它们。

而且,为了消除概念上的误解,您根本不需要也不能 "implement REST in JSF"。它们彼此完全独立。他们可以很容易地 运行 在同一个 Web 应用程序中彼此相邻,而无需相互了解。他们可能共享的唯一东西是 service layer 或 'shared' (CDI) 管理的 bean。但通常就是这样。服务层的设计又与使用它的人无关。

此特定问题与 JSF 或 JAX-RS 无关。它只是 basic servlets. It might be as well worth the effort to take a step back to the basics and spend a bit time to learn more 基本上每个 Java EE web 应用程序的基石。

您不能将两者直接放在同一 java class 或层中。 我实现如下

                              |---> JSF Managed Beans(Inject logic here)
Database --> Daos --> Logic --|
                              |---> JAX-RS  (Inject logic here)

为尝试在 XPages 中执行此操作的任何人发布此内容,您可以将 REST 控件从组件库拖放到页面上。

就像绑定 ActionListener 一样,您将 java class 绑定到组件并设置 url 模式。

查看此注释: https://oliverbusse.notesx.net/hp.nsf/blogpost.xsp?documentId=2C4E

和示例应用程序 https://github.com/zeromancer1972/simplerest/blob/master/ODP/XPages/index.xsp