如何在JSF框架中实现JAX-RS RESTful服务在我的实验室中,我被要求使用JSF框架创建一个简单的网站,并同时使用REST。我对这两个做了一些研究。事实证明,对于REST,我必须在Jersey上使用JAX-RS框架。我想知道如何集成这两个框架,即JAX-RS和JSF?我已经在web.xmlJSF中使用了以下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,我认为我必须在中使用以下servlet web.xml:<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将取代中的Faces servlet web.xml。这会将我的应用程序从JSF更改为JAX-RS。但是我想保留JSF并同时使用JAX-RS。我怎样才能做到这一点?
3 回答

jeck猫
TA贡献1909条经验 获得超7个赞
不必担心。您可以在单个Web应用程序中安全地拥有多个servlet,只要它们的URL模式不会相互冲突即可。通常,如果是这种情况,那么在webapp启动过程中,一个比较不错的servlet容器将已经引发异常。在你的情况,你已经登记在JSF的servlet /test/*
(这是一个奇怪的,顺便说一句,你平时用*.xhtml
的那个),并且您已经登记在JAX-RS的servlet /api/*
。因此,您只需要使用与这些URL模式匹配的URL来调用它们。
而且,为了消除概念上的误解,您完全不能也不能“在JSF中实现REST”。它们彼此完全独立。他们可以轻松地在同一个Web应用程序中彼此轻松地彼此相邻运行,而无需彼此了解。他们唯一可以共享的是服务层或“共享”(CDI)托管的bean。但是通常就是这样。服务层的设计又与谁使用服务无关。
此特定问题与JSF或JAX-RS无关。这只是基本的servlet。退一步,花一点时间来了解更多关于每个Java EE Web应用程序的基础知识,这也许也是值得的。

慕丝7291255
TA贡献1859条经验 获得超6个赞
您不能直接将两者都放在同一个Java类或图层中。我实现如下
|---> JSF Managed Beans(Inject logic here) Database --> Daos --> Logic --| |---> JAX-RS (Inject logic here)
添加回答
举报
0/150
提交
取消