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

17

在我的实验室里,我被要求使用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。我该怎么做?


2
我认为这两个框架将共存,您可以根据调用的URL调用任何一个框架。 - Garry
你能展示一下如何适当地进行URL调用吗? - asdfkjasdfjk
对于JSF,请使用http://host:port/yourapp/test/*,对于REST,请使用http://host:port/yourapp/api/* - Garry
3个回答

25
这种担忧是不必要的。只要它们的URL模式不冲突,您可以在单个Web应用程序中安全地拥有多个servlet。通常,如果是这种情况,一个正常的servlet容器会在Web应用程序启动期间抛出异常。在您的情况下,您已经将JSF servlet注册到/test/*(顺便说一句,这很奇怪,您通常使用*.xhtml),并且已将JAX-RS servlet注册到/api/*。因此,您只需使用与这些URL模式匹配的URL来调用它们。
为了消除一个概念上的误解,你根本不需要也不能在JSF中实现REST。它们彼此完全独立。它们可以在同一Web应用程序中轻松运行,互相不知道对方。它们唯一可能共享的是服务层或“共享”(CDI)托管的bean。但通常只有这些。服务层的设计反过来又独立于谁在使用它。
这个具体问题与JSF或JAX-RS无关。它只涉及到基本servlets。花点时间回到基础并学习更多关于基本上每个Java EE Web应用程序的构建石可能也值得努力。

根据上面的评论,如果我调用 http://host:port/yourapp/api/* 来进行 REST,是否可以获得 JSF 功能?抱歉问这么愚蠢的问题,我是个彻头彻尾的新手。 - asdfkjasdfjk

1

您不能在同一个Java类或层中直接拥有这两个功能。我是按照以下方式实现的:

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

这正是其他答案中所述的内容:“它们可能唯一共享的就是服务层。但通常仅此而已。服务层的设计又独立于谁在使用它。”,并且在https://dev59.com/EV0a5IYBdhLWcg3wLV8G中有很好的解释。 - Kukeltje

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接