Fuse 6 is no longer supported
As of February 2025, Red Hat Fuse 6 is no longer supported. If you are using Fuse 6, please upgrade to Red Hat build of Apache Camel.第146章 SERVLET
Servlet コンポーネント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
servlet: コンポーネントは、HTTP エンドポイント に到達した HTTP リクエストを消費するために HTTP ベースのエンドポイントを提供し、このエンドポイントは公開されたサーブレットにバインドされます。
Maven ユーザーは、このコンポーネントの
pom.xml
に以下の依存関係を追加する必要があります。
Camel on EAP デプロイメント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
このコンポーネントは、Red Hat JBoss Enterprise Application Platform (JBoss EAP) コンテナー上で簡素化されたデプロイメントモデルを提供する Camel on EAP (Wildfly Camel) フレームワークによってサポートされます。このモデルの詳細は、Deploying into a Web Server の Apache Camel on JBoss EAP の章を参照してください。
URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
servlet://relative_path[?options]
servlet://relative_path[?options]
URI にクエリーオプションは
?option=value&option=value&.. の形式で追加できます。
オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
名前 | デフォルト値 | 説明 |
---|---|---|
httpBindingRef
|
null
|
レジストリーの org.apache.camel.component.http.HttpBinding への参照。HttpBinding 実装を使用して、応答の作成方法をカスタマイズできます。
|
httpBinding
|
null
|
Camel 2.16: レジストリー の org.apache.camel.component.http.HttpBinding への 参照。HttpBinding 実装を使用して、応答の作成方法をカスタマイズできます。
|
matchOnUriPrefix
|
false
|
完全に一致するものが見つからない場合に、CamelServlet が URI 接頭辞と一致することでターゲットコンシューマーの検索を試みるかどうか。
|
servletName
|
CamelServlet
|
サーブレットエンドポイントがバインドするサーブレット名を指定します。サーブレット名が指定されていない場合、サーブレットエンドポイントは最初に公開されたサーブレットにバインドされます。 |
httpMethodRestrict
|
null
|
Camel 2.11: (コンシューマーのみ) HttpMethod が一致する場合にのみ消費できるようにするために使用されます(例: GET /POST /PUT など)。Camel 2.15 以降では、複数のメソッドをコンマで区切って指定できます。
|
メッセージヘッダー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Apache Camel は、HTTP コンポーネントと同じメッセージヘッダーを適用します。
Apache Camel は すべての
request.parameter
および request.headers
も設定します。たとえば、クライアント要求に URL http://myserver/myserver?orderid=123
がある場合、エクスチェンジには orderid
という名前のヘッダー(値が 123)が含まれます。
使用方法 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Servlet コンポーネントによって生成されたエンドポイントからのみ消費できます。そのため、Apache Camel ルートへの入力としてのみ使用する必要があります。他の HTTP エンドポイントに対して HTTP 要求を発行するには、HTTP コンポーネントを使用します。
Camel JAR のアプリケーションサーバーブートクラスパスへの配置 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションサーバーのブートクラスパス(通常は lib ディレクトリー内)に
camel-core
、camel-servlet
などの Camel JAR を配置する場合、サーブレットマッピングリストがアプリケーションサーバーの複数のデプロイ済み Camel アプリケーション間で共有されることに注意してください。
通常、アプリケーションサーバーのブートクラスパスに Camel JAR を配置することはベストプラクティスではありません。
したがって、このような状況では、各 Camel アプリケーションでカスタムおよび一意のサーブレット名を定義する 必要があり ます。たとえば、
web.xml
では以下を定義します。
Camel エンドポイントにもサーブレット名が含まれる
<route> <from uri="servlet://foo?servletName=MyServlet"/> ... </route>
<route>
<from uri="servlet://foo?servletName=MyServlet"/>
...
</route>
Camel 2.11 以降、Camel はこの重複を検出し、アプリケーションの起動に失敗します。以下のようにサーブレット init-parameter ignoreDuplicateServletName を true に設定すると、この重複を無視するように制御できます。
しかし、この重複の競合や副次 的な副次的な影響を回避するために、各 Camel アプリケーションに一意の servlet-name を使用することを強くお勧め します。
例 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
重要
Camel 2.7 以降、Spring Web アプリケーションで サーブレット を簡単に使用できます。詳細は、サーブレット Tomcat の例 を参照してください。
この例では、
http://localhost:8080/camel/services/hello
で HTTP サービスを公開するルートを定義します。まず、通常の Web コンテナーまたは OSGi サービスを介して CamelHttpTransportServlet を公開する必要があります。Web.xml
ファイルを使用して、以下のように CamelHttpTransportServlet を公開します。
次に、以下のようにルートを定義できます。
camel-servlet エンドポイントの相対パスの指定
Http トランスポートをパブリッシュされたサーブレットとバインディングし、サーブレットのアプリケーションコンテキストパスを認識しないため、
camel-servlet
エンドポイントは相対パスを使用してエンドポイントの URL を指定します。クライアントはサーブレットパブリッシュアドレス ("http://localhost:8080/camel/services")+ RELATIVE_PATH ("/hello")
を介して camel-servlet
エンドポイントにアクセスできます。
Spring 3.x を使用する場合の例 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
スタンドアロン Apache Camel パッケージには、Tomcat Web コンテナーに Servlet コンポーネントをデプロイする方法を示すデモが含まれています。デモンストレーションは
examples/camel-example-servlet-tomcat
ディレクトリーにあります。Web コンテナーに Servlet コンポーネントをデプロイする場合は、WEB-INF/web.xml
ファイルに Spring ContextLoaderListener
インスタンスを作成して、Spring アプリケーションコンテキストを明示的に作成する必要があります。
たとえば、
camel-config.xml
ファイルから Spring 定義( camelContext
およびルート定義を含む)を読み込む Spring アプリケーションコンテキストを作成するには、以下のように web.xml
ファイルを定義します。
Spring 2.x を使用する場合の例 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel/Spring アプリケーションで Servlet コンポーネントを使用する場合は、Servlet コンポーネントの起動 後 に Spring ApplicationContext をロードする必要があります。これは、
ContextLoaderListener
の代わりに Spring の ContextLoaderServlet
を使用して実行できます。その場合、以下のように CamelHttpTransportServlet の後に ContextLoaderServlet
を起動する必要があります。
OSGi を使用する場合の例 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.6.0 以降では、CamelHttpTransportServlet を OSGi サービスとして公開し、以下のような SpringDM を利用して OSGi サービスとして公開できます。
次に、以下のように Camel ルートでこのサービスを使用します。
または、Camel 2.6 より前 -
Activator
を使用して、OSGi プラットフォームで CamelHttpTransportServlet を公開できます。