私のラボでは、JSFフレームワークを使用して簡単なWebサイトを作成し、RESTも使用するように依頼されました。私はそれら2つについていくつかの調査を行いました。 RESTでは、JerseyでJAX-RSフレームワークを使用する必要があることがわかりました。これらの2つのフレームワーク、JAX-RSとJSFをどのように統合できるのかと思っていましたか?
JSFのweb.xml
には、以下のサーブレットがすでにあります。
<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>
ジャージーの場合、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>
今私の懸念は、このジャージーサーブレットがweb.xml
のFacesサーブレットに取って代わるようです。これにより、アプリケーションがJSFからJAX-RSに変更されます。しかし、私はJSFを維持し、JAX-RSも使用したいと考えています。どうやってやるの?
この懸念は不要です。 URLパターンが互いに衝突しない限り、単一のWebアプリケーションに複数のサーブレットを安全に配置できます。通常、これが当てはまる場合、少し正気なサーブレットコンテナーは、webappの起動時に既に例外をスローしていました。あなたの場合、あなたはJSFサーブレットを/test/*
に登録しました(これは奇妙なことに、あなた は通常 に*.xhtml
を使用します) 、そしてJAX-RSサーブレットを/api/*
に登録しました。したがって、justは、それらのURLパターンに一致するURLを使用して呼び出す必要があります。
また、概念的な誤解を解消するために、「RESTをJSFに実装する」ことはできません。それらは互いに完全に独立しています。同じWebアプリケーション内で、お互いを知らなくても、簡単にお互いを簡単に実行できます。それらが共有する可能性のある唯一のものは、 サービス層 または「共有」(CDI)管理Beanです。しかし、通常はそれだけです。また、サービス層の設計は、誰がそれを使用しているかに依存しません。
この特定の問題は、JSFやJAX-RSとは関係ありません。 basic servlets だけです。基本に戻って少し時間をかけて、基本的にすべてのJavaの構成要素について 詳細 を学ぶことも、同様に価値があるかもしれません。 EE Webアプリケーション。
XPagesでこれを実行しようとしている人のためにこれを投稿すると、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
同じJavaクラスまたはレイヤーに直接両方を含めることはできません。以下のように実装しました
|---> JSF Managed Beans(Inject logic here)
Database --> Daos --> Logic --|
|---> JAX-RS (Inject logic here)