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

时间:2015-05-01 06:37:47

标签: jsf servlets jersey jax-rs

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

对于JSF,我已经在web.xml中使用了以下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。我怎么能这样做?

3 个答案:

答案 0 :(得分:16)

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

而且,为了消除概念上的误解,你根本不能也不能“在JSF中实现REST”。它们完全相互独立。他们可以轻松地在同一个Web应用程序中相互紧密地运行,而无需彼此了解。他们可能共享的唯一内容是service layer或“共享”(CDI)托管bean。但通常是这样。服务层的设计反过来又独立于谁在使用它。

此特定问题与JSF和JAX-RS无关。它只是basic servlets。对于基本上每一个Java EE Web应用程序的构建基础而言,花费一些时间来learn more可能值得努力回归基础知识。

答案 1 :(得分:0)

您不能直接在同一个java类或图层中同时使用它们。 我在下面实现了它

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

答案 2 :(得分:0)

对于试图在XPage中执行此操作的任何人发布此信息,您可以从组件库中删除一个REST控件。

与绑定ActionListener一样,您将java类绑定到组件并设置url模式。

请参阅此说明: https://oliverbusse.notesx.net/hp.nsf/blogpost.xsp?documentId=2C4E

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