Configuration du fichier web.xml pour les filtres JAX-RS

Le fichier web.xml contient des informations sur la structure et les dépendances externes de composants web dans le module ; il décrit aussi comment les composants sont utilisés lors de l'exécution. Pour que le conteneur web puisse exécuter des applications Java™ API for RESTful Web Services (JAX-RS), vous pouvez configurer le fichier web.xml pour définir des filtres qui indiquent les URL possibles sur lesquels les filtres peuvent être appelés.

Pourquoi et quand exécuter cette tâche

Vous pouvez configurer le fichier web.xml de l'application web pour activer le code d'application JAX-RS. Vous pouvez également utiliser un filtre JAX-RS spécifique à IBM® pour l'exécution du code JAX-RS. Le fichier web.xml fournit des informations de configuration et de déploiement pour les composants web qui contiennent une application Web. Consultez les informations relatives à la configuration du fichier web.xml pour JAX-RS pour plus d'informations sur ce fichier de descripteur de déploiement.

Lorsque vous utilisez des servlets, les chemins de servlet définis dans le fichier web.xml sont ajoutés à l'URL de base. Les filtres n'ajoutent pas de chemin à l'URL de base de ressource. En fait, les mappages d'URL de filtre indiquent les URL sur lesquelles le filtre peut être appelé. Par exemple, si une ressource racine a la valeur myresource pour @javax.ws.rs.Path, l'URL finale est http://<your_hostname>:<your Web_container_port>/<context_root_of_Web_application>/myressource. Le modèle de mappage d'URL de filtre doit correspondre à myresssource pour gérer correctement la ressource racine. Par exemple, vous pouvez utiliser /* ou /myresource pour le modèle d'URL. Lorsqu'il existe plusieurs ressources dans l'application, le modèle d'URL de filtre doit correspondre à toutes les ressources. Le modèle /* est une valeur commune pour le filtre.

Si l'URL de demande entrante ne correspond à aucune ressource JAX-RS dans l'application JAX-RS, la demande est envoyée au reste de la chaîne de filtres. Selon l'application, vous pouvez utiliser le comportement de filtrage pour que l'application JAX-RS gère les demandes ou si aucune ressource JAX-RS n'est disponible, la demande peut accéder à un artefact de conteneur web sous-jacent, tel qu'une JSP (JavaServer Pages). Si le conteneur web ne dispose d'aucun artefact correspondant, il est responsable de la réponse d'erreur.

Procédure

  1. Ouvrez le fichier WEB-INF/web.xml.
  2. Définissez le filtre dans le fichier WEB-INF/web.xml. Ajoutez la définition de filtre suivante au fichier WEB-INF/web.xml. Remplacez le nom de filtre unique par votre nom de filtre unique. Remplacez également la variable Java_class_name par le package Java complet et le nom de classe de la sous-classe Java d'application JAX-RS.
    <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. (Facultatif) Si plusieurs sous-classes d'application JAX-RS sont nécessaires dans une même application web, vous devez inclure un paramètre d'initialisation de filtre supplémentaire, requestProcessorAttribute, dans la définition de filtre que vous ajoutez au fichier WEB-INF/web.xml. Dans le filtre suivant, remplacez le nom unique de filtre par le votre nom unique de filtre, la variable Java_class_name par le package complet Java et le nom de classe de la sous-classe Java de l'application JAX-RS et la variable unique_identifier par un identificateur unique.
    <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. Ajoutez les mappages de filtre dans le fichier WEB-INF/web.xml de chaque définition de filtre.

    Le modèle d'URL défini dans le mappage de filtre indique au conteneur les modèles d'URL valides pour appeler le filtre IBMRestFilter. Si une URL de demande entrante est compatible avec le modèle d'URL, le filtre IBMRestFilter est appelé. Si l'URL de demande ne correspond pas, le filtre n'est pas appelé. Les URL de demande commencent toujours à la racine de contexte du filtre. Voir les exemples de mappages de filtre suivants :

    <filter-mapping>
        <filter-name>filter_name</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    Supposons que vous disposiez des deux ressources suivantes :
    @javax.ws.rs.Path("myresource")
    public class MyResource {
    
    }
    @javax.ws.rs.Path("myresource2")
    public class MyResource2 {
    
    }
    Vous pouvez accéder aux ressources en utilisant l'URL suivante :
    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.

    Si vous appliquez le mappage de filtre suivant :

    <filter-mapping>
            <filter-name>filter_name</filter-name>
            <url-pattern>/myresource</url-pattern>
    </filter-mapping>   
    , vous pouvez utiliser la ressource racine MyResource en visitant l'URL suivante :
    http://<your_hostname>:<your Web_container_port>/<context_root_of_Web_application>/myresource
    Cette URL appelle le filtre IBMRestFilter et l'URL peut trouver la ressource. Etant donné que le chemin /myresource correspond au modèle d'URL dans le mappage de filtre, le filtre IBMRestFilter est appelé et une ressource racine ayant la valeur @Path correspondante est trouvée.
    Supposons, toutefois, que vous visitiez l'URL
    http://<your_hostname>:<your Web_container_port>/<context_root_of_Web_application>/myresource2.
    Le filtre IBMRestFilter n'est pas appelé, car le modèle d'URL /myresource ne correspond pas à /myresource2.

Résultats

Après avoir modifié le fichier WEB-INF/web.xml pour appliquer des filtres, l'application web est configurée pour l'application JAX-RS.

Exemple

L'exemple suivant montre un fichier WEB-INF/web.xml configuré pour appliquer des filtres à une application JAX-RS. Cet exemple définit le filtre RestApplication1. Si une URL de demande entrante correspond à une ressource dans le filtre RestApplication1, la réponse est générée depuis le filtre RestApplication1. Si l'URL de demande entrante ne correspond pas une ressource dans le filtre RestApplication1, mais correspond à une ressource dans le filtre OtherRestApplicationFilter, la réponse est générée depuis le filtre OtherRestApplicationFilter. Si l'URL entrante ne correspond à aucun des filtres, la demande peut être gérée depuis un autre artefact de conteneur web, tel qu'une JSP.

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

Que faire ensuite

Assemblez l'application Web.


Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_configwebxml_jrsfilters
Nom du fichier : twbs_jaxrs_configwebxml_jrsfilters.html