JAX-RS フィルター用 web.xml ファイルの構成

web.xml ファイルには、モジュール内の Web コンポーネントの構造、および外部との依存関係に関する情報が含まれ、 実行時のコンポーネントの使用方法が記述されています。 Web コンテナーが Java™ API for RESTful Web Services (JAX-RS) アプリケーションを実行できるように web.xml ファイルを構成する際、フィルター定義で URL を指定して、それらの URL ではフィルターが起動されるように指定することができます。

このタスクについて

Web アプリケーションが JAX-RS アプリケーション・コードを使用できるように web.xml ファイルを構成することができます。JAX-RS コードを 実行するために使用する IBM® 固有 の JAX-RS フィルターを指定できます。web.xml ファイルは、Web アプリケーションを構成する Web コンポーネントの構成およびデプロイメント情報を提供します。このデプロイメント記述子ファイルについて詳しく学習するには、JAX-RS 用の web.xml ファイルの構成 に関する説明を参照してください。

サーブレットを使用するときには、 web.xml 内に定義されたサーブレット・パスがベース URL に付加されます。 フィルターの場合は、リソースのベース URL にパスが追加されることはありません。 その代わりに、フィルター URL マッピングは、フィルターが起動される可能性のある URL を 指定します。例えば、ルート・リソース の @javax.ws.rs.Path 値が myresource の場合、リソースの最終的 な URL は http://<your_hostname>:<your Web_container_port>/<context_root_of_Web_application>/myresource です。 ルート・リソースが正しく処理されるには、フィルターの URL マッピング・パターンが myresource に 一致しなければなりません。この例では、 URL パターンに /* または /myresource を 使用できます。アプリケーション内に複数のリソースがある場合、 フィルターの URL パターンはそれらすべてのリソースに一致する必要があります。/* パターン は、フィルターの一般的な値です。

着信要求 URL が JAX-RS アプリケーション内のどの JAX-RS リソースにも 一致しない場合、要求はフィルター・チェーンの残りの部分に 渡されます。アプリケーションによっては、フィルター動作を使用して、要求が JAX-RS アプリケーションによって処理されるようにしたり、あるいは、使用可能な JAX-RS リソースがない場合は、基礎にある Web コンテナー成果物 (例えば、JavaServer Pages (JSP) など) に要求が渡っていくようにすることがあります。一致する成果物が Web コンテナーにない場合は、Web コンテナーがエラー応答を担当します。

手順

  1. WEB-INF/web.xml ファイルを開きます。
  2. WEB-INF/web.xml ファイルでフィルターを定義します。 次のフィルター定義を WEB-INF/web.xml ファイルに追加します。 unique_filter_name を固有のフィルター名に置き換えてください。また、Java_class_name 変数を、 JAX-RS アプリケーション Java サブクラスの完全な Java パッケージおよびクラス名に置き換えてください。
    	<filter>
             <filter-name>unique_filter_name</filter-name>
             <filter-class>com.ibm.websphere.jaxrs.server.IBMRestFilter</filter-class>
             <init-param>
                     <param-name>javax.ws.rs.Application</param-name>
                     <param-value>Java_class_name</param-value>
             </init-param>
     </filter>
  3. (オプション) 同じ Web アプリケーション内で複数の JAX-RS アプリケーション・サブクラスが必要とされている場合は、フィルター初期化パラメーター requestProcessorAttribute を、WEB-INF/web.xml ファイルに追加するフィルター定義に追加で組み込む必要があります。 以下のフィルターでは、unique_filter_name を 固有のフィルター名に置き換え、Java_class_name 変数 を JAX-RS アプリケーション Java サブクラスの完全な Java パッケージ およびクラス名に置き換え、unique_identifier 変数を固有の ID に置き換えてください。
    	<filter>
       <filter-name>unique_filter_name_a</filter-name>
       <filter-class>com.ibm.websphere.jaxrs.server.IBMRestFilter</filter-class>
       <init-param>
           <param-name>javax.ws.rs.Application</param-name>
           <param-value>Java_class_name_a</param-value>
       </init-param>
       
       <init-param>
           <param-name>requestProcessorAttribute</param-name>
           <param-value>unique_identifier_a</param-value>
       </init-param>
    	</filter>
    
    	<filter>
       <filter-name>unique_filter_name_b</filter-name>
       <filter-class>com.ibm.websphere.jaxrs.server.IBMRestFilter</filter-class>
       <init-param>
           <param-name>javax.ws.rs.Application</param-name>
           <param-value>Java_class_name_b</param-value>
       </init-param>
            
       <init-param>
           <param-name>requestProcessorAttribute</param-name>
           <param-value>unique_identifier_b</param-value>
       </init-param>
    </filter
  4. 各フィルター定義について、WEB-INF/web.xml ファイル内にフィルター・マッピングを 追加します。

    フィルター・マッピング内に指定された URL パターンは、 IBMRestFilter フィルターを起動する有効な URL パターンをコンテナーに対して定義します。着信 要求 URL が URL パターンと互換である場合、IBMRestFilter が 起動されます。要求 URL が一致しない場合、フィルターは起動されません。 要求 URL は常にフィルターのコンテキスト・ルートで始まります。 以下のフィルター・マッピング例を参照してください。

    <filter-mapping>
        <filter-name>filter_name</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    例えば、以下の 2 つのリソースがあると仮定します。
    @javax.ws.rs.Path("myresource")
    public class MyResource {
    
    }
    @javax.ws.rs.Path("myresource2")
    public class MyResource2 {
    
    }
    これらのリソースには、以下の URL を使用してアクセスできます。
    http://<your_hostname>:<your Web_container_port>/<context_root_of_Web_application>/myresource
    http://<your_hostname>:<your Web_container_port>/<context_root_of_Web_application>/myresource2

    以下のフィルター・マッピングを適用するとします。

    <filter-mapping>
            <filter-name>filter_name</filter-name>
            <url-pattern>/myresource</url-pattern>
    	</filter-mapping>
    MyResource ルート・リソース は、以下の URL にアクセスすることで使用できます。
    http://<your_hostname>:<your Web_container_port>/<context_root_of_Web_application>/myresource
    この URL は IBMRestFilter フィルターを起動し、URL は リソースを検出できます。/myresource パス は、filter-mapping 内の URL パターンに一致するため、IBMRestFilter が 起動され、@Path 値が一致するルート・リソースがあります。
    しかし、次の URL にアクセスするとします。
    http://<your_hostname>:<your Web_container_port>/<context_root_of_Web_application>/myresource2
    URL パターン /myresource/myresource2 に一致しないため、IBMRestFilter フィルターは起動されません。

タスクの結果

フィルターを適用するよう WEB-INF/web.xml ファイルを編集した後、Web アプリケーションは JAX-RS アプリケーション用に構成されます。

以下の例では、JAX-RS アプリケーションにフィルターを適用するよう構成された WEB-INF/web.xml ファイル を示します。この例は、RestApplication1 フィルターを定義します。着信要求 が RestApplication1 フィルター内にあるリソースと一致すると、 応答は RestApplication1 フィルターから生成されます。着信要求が RestApplication1 フィルター内にあるリソースとは一致しないが、 OtherRestApplicationFilter 内にあるリソースに一致する場合、 応答は OtherRestApplicationFilter フィルターから生成されます。 着信 URL がどのフィルターにも一致しない場合、要求は JSP など別の Web コンテナー成果物からサービスを受けられます。

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" 
xmlns=http://java.sun.com/xml/ns/j2ee 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

     	<filter>
        <filter-name>RestApplication1</filter-name>
        <filter-class>com.ibm.websphere.jaxrs.server.IBMRestFilter</filter-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.ibm.rest.sample.app1.MyApplication</param-value>
        </init-param>
        <init-param>
            <param-name>requestProcessorAttribute</param-name>
            <param-value>restApplication1ProcessorID</param-value>
        </init-param>
    	</filter>
     	<filter>
        <filter-name>OtherRestApplicationServlet</filter-name>
        <filter-class>com.ibm.websphere.jaxrs.server.IBMRestFilter</filter-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.ibm.rest.other.sample.OtherApplication </param-value>
        </init-param>
        <init-param>
            <param-name>requestProcessorAttribute</param-name>
            <param-value>otherRestApplicationID </param-value>
        </init-param>
    	</filter>

    <filter-mapping>
        <filter-name>RestApplication1</filter-name>
        <url-pattern>/*</url-pattern>
    	</filter-mapping>

    <filter-mapping>
        <filter-name>OtherRestApplicationServlet</filter-name>
        <url-pattern>/*</url-pattern>
    	</filter-mapping>
</web-app>

次のタスク

Web アプリケーションをアセンブルします。


トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_configwebxml_jrsfilters
ファイル名:twbs_jaxrs_configwebxml_jrsfilters.html