为 JAX-RS 过滤器配置 web.xml 文件

web.xml 文件包含有关模块中的 Web 组件的结构和外部依赖项的信息,并描述运行时如何使用组件。要使 Web 容器能够运行 Java™ API for RESTful Web Services (JAX-RS) 应用程序,您可以配置 web.xml 文件以定义过滤器,这些过滤器指示可用于调用过滤器的可能 URL。

关于此任务

您可以配置 Web 应用程序的 web.xml 文件以启用 JAX-RS 应用程序代码。您可以指定特定于 IBM® 的 JAX-RS 过滤器以用于运行 JAX-RS 代码。web.xml 文件用于提供构成 Web 应用程序的 Web 组件的配置和部署信息。请参阅有关为 JAX-RS 配置 web.xml 文件的信息,以了解有关此部署描述符文件的更多资料。

使用 Servlet 时,将对基本 URL 追加 web.xml 中定义的任何 Servlet 路径。过滤器不会对资源基本 URL 追加路径。而是,过滤器 URL 映射指示可用于调用过滤器的可能 URL。例如,如果根资源的 @javax.ws.rs.Path 值为 myresource,那么该资源的最终 URL 将是 http://<your_hostname>:<your Web_container_port>/<context_root_of_Web_application>/myresource。过滤器的 URL 映射模式必须与 myresource 匹配,这样才能正确地提供根资源。对于本示例而言,您可以使用 /*/myresource 作为 URL 模式。应用程序包含多个资源时,过滤器的 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 应用程序子类,那么在添加到 WEB-INF/web.xml 文件的过滤器定义中,必须包括一个附加的过滤器初始化参数 requestProcessorAttribute 在以下过滤器中,请将 unique_filter_name 替换为唯一的过滤器名称,将 Java_class_name 变量替换为 JAX-RS 应用程序 Java 子类的完整 Java 包和类名,并将 unique_identifier 变量替换为唯一标识。
    <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>
    例如,假定您有下面这两个资源:
    @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>   
    那么可以通过访问以下 URL 来使用 MyResource 根资源:
    http://<your_hostname>:<your Web_container_port>/<context_root_of_Web_application>/myresource
    此 URL 将调用 IBMRestFilter 过滤器,并且此 URL 可以找到该资源。因为 /myresource 路径与过滤器映射中的 URL 模式匹配,所以将调用 IBMRestFilter,并且存在 @Path 值匹配的根资源。
    但是,假定您访问以下 URL:
    http://<your_hostname>:<your Web_container_port>/<context_root_of_Web_application>/myresource2
    将不会调用 IBMRestFilter 过滤器,这是因为 URL 模式 /myresource/myresource2 不匹配。

结果

编辑 WEB-INF/web.xml 文件以应用过滤器之后,就为 JAX-RS 应用程序配置了 Web 应用程序。

示例

以下示例说明为了对 JAX-RS 应用程序应用过滤器而配置的 WEB-INF/web.xml 文件。此示例定义了 RestApplication1 过滤器。如果入局请求 URL 与 RestApplication1 过滤器中的资源匹配,那么将从 RestApplication1 过滤器中生成响应。如果入局请求 URL 与 RestApplication1 过滤器中的资源不匹配,但与 OtherRestApplicationFilter 中的资源匹配,那么将从 OtherRestApplicationFilter 过滤器中生成响应。如果入局 URL 与过滤器不匹配,那么可以从另一个 Web 容器工件(例如 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>

下一步做什么

组装 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