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 を公開できます。