Comment mettre en œuvre le service RESTful JAX-RS dans le cadre de JSF

dans mon laboratoire, on m'a demandé de créer un site Web simple utilisant le cadre JSF et D'utiliser REST. J'ai fait quelques recherches sur ces deux. Il s'avère que pour le repos je dois utiliser JAX-RS framework Avec Jersey. Je me demandais comment intégrer ces deux cadres, JAX-RS et JSF?

j'ai déjà le servlet ci-dessous dans web.xml pour JSF:

<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>

pour Jersey j'ai pensé que je dois utiliser le servlet ci-dessous dans 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>

maintenant, ma préoccupation est, pour moi, il semble que ce servlet Jersey va remplacer le servlet Faces dans web.xml . Cela changera ma demande de JSF à JAX-RS. Mais je veux garder JSF et utiliser JAX-RS aussi. Comment puis-je le faire?

11
demandé sur BalusC 2015-05-01 09:37:47

3 réponses

cette préoccupation n'est pas nécessaire. Vous pouvez avoir en toute sécurité plusieurs servlets dans une seule application web, à condition que leurs modèles D'URL ne soient pas en conflit les uns avec les autres. Habituellement, si tel était le cas, un conteneur servlet un peu sain lancerait déjà une exception lors du démarrage de webapp. Dans votre cas, vous avez enregistré le servlet JSF sur /test/* (ce qui est d'ailleurs étrange, vous habituellement utilisez *.xhtml pour cela), et vous avez enregistré le servlet JAX-RS sur /api/* . Donc ,vous juste doivent les appeler en utilisant des URLs correspondant à ces modèles D'URL.

et, pour dissiper un malentendu conceptuel, vous ne pouvez pas" mettre en œuvre le repos dans le JSF " du tout. Ils sont complètement indépendants les uns des autres. Ils peuvent simplement exécuter l'un à côté de l'autre dans la même application web dans toute la paix sans se connaître. La seule chose qu'ils pourraient partager est la couche de service ou "partagée" (CDI) géré les haricots. Mais ce n'est généralement. La conception de la couche de service est indépendant de qui l'utilise.

ce problème spécifique n'est pas lié à JSF ni JAX-RS. C'est juste servlets de base . Il pourrait être aussi bien la peine de prendre un peu de recul à l'essentiel et de passer un peu de temps à en savoir plus sur la pierre de construction de l'essentiel de chaque application Web Java EE.

15
répondu BalusC 2018-08-28 15:47:10

vous ne pouvez pas avoir directement les deux dans la même classe ou couche java. Je l'ai mis en œuvre comme ci-dessous

                              |---> JSF Managed Beans(Inject logic here)
Database --> Daos --> Logic --|
                              |---> JAX-RS  (Inject logic here)
0
répondu electricalbah 2017-05-27 07:29:06

afficher ceci pour quiconque essaie de faire cela dans XPages, il y a un contrôle REST que vous pouvez laisser tomber sur la page à partir de la bibliothèque des composants.

comme lier un ActionListener, vous liez une classe java au composant et définissez un motif d'url.

voir cette note: https://oliverbusse.notesx.net/hp.nsf/blogpost.xsp?documentId=2C4E

et échantillon app https://github.com/zeromancer1972/simplerest/blob/master/ODP/XPages/index.xsp

0
répondu xpagesbeast 2017-09-01 13:10:24