# 子表达式构建器

通过 AND、OR、NOT 和括号分组，可以使用子表达式构建器来根据子表达式构建复杂的规则条件。应用更改时，规则构建器将对规则进行验证。如果找到未配对的括号以及不支持的逻辑运算符，那么将发出警报。

要查看此管理控制台页面，请单击服务器 > 服务器类型 > 随需应变路由器 > odr_name > 随需应变路由器属性 > 通用服务器集群服务策略 > work_class_name > 添加规则 > 子表达式构建器。

要使用子表达式构建器来修改规则，您必须拥有管理员管理特权。

## 选择操作数

根据所选协议的不同，将显示不同的操作数。下表列示了控制台中显示的操作数名称、表达式中出现的实际操作数、每个操作数的有效协议以及每个操作数的描述。

表 1. 操作数及其描述
显示的操作数 | 操作数 | 有效协议 | 描述
--- | --- | --- | ---
应用程序名 | `application` | IIOP | 包含 EJB 的应用程序的名称。
客户机/主机 | `clienthost` | HTTP、SOAP 和 IIOP | 标准的客户机/主机名。这是因特网协议（IP）命令主机名的值。此操作数不支持数字运算符，例如 `>、>=、< 和 <=`。
客户机端口 | `clientport` | IIOP | 客户机端口名。
客户机 IPV4 | `clientipv4` | HTTP 和 SOAP | 客户机的因特网协议 V4 地址，使用点分四段地址类型：`n.n.n.n`。
客户机 IPV6 | `clientipv6` | HTTP 和 SOAP | 客户机的因特网协议 V6 128 位地址，类型为 `x:x:x:x:x:x:x:x`。
Cookie 头名称 | `cookie$<name>` | HTTP 和 SOAP | cookie 名称。例如，表达式 `cookie$My_Cookie_Name='My_Cookie_Value'` 会测试请求，以了解它是否包含名为 My_Cookie_Name 并且值为 My_Cookie_Value 的 cookie。要测试特定 cookie 是否存在，请使用下列其中一个表达式： cookie$MyCookieName IS NOT NULL cookie$MyCookieName IS NULL
EJB 模块名 | `ejbmodule` | IIOP | EJB 的模块名。
EJB 名称 | `ejbname` | IIOP | EJB 的名称。
EJB 方法名 | `ejbmethod` | IIOP | EJB 中方法的名称。
组标识 | `gids$<name>` | HTTP 和 SOAP | 请求发送方的组标识。
HTTP 方法 | `HTTPMethod` | HTTP 和 SOAP | 请求的 HTTP 方法。可能的值是 POST、GET、PUT 和 DELETE。
MIME 类型 | `MIMEType` | HTTP 和 SOAP | 请求的 MIME 类型。
端口 | `port` | HTTP、SOAP 和 IIOP | 主机上提供服务所在的侦听端口。
协议 | `protocol` | HTTP 和 SOAP | 用于传输请求的通信协议。当前支持的协议包括 HTTP、HTTPS、SOAP 和 SOAPS。
请求头名称 | `header$<name>` | HTTP 和 SOAP | 头的名称或值。例如，表达式 `header$Host='localhost'` 对请求进行测试，以确定该请求是否包含值为 localhost 的 HTTP 主机头。要测试主机头是否存在，请使用下列其中一个表达式： `header$Host IS NOT NULL ,`header$Host IS NULL``
请求查询参数名 | `queryparm$<name>` | HTTP 和 SOAP | 请求 URL 中指定的查询参数名。对于每个请求，如果存在查询参数，那么存在那些参数的“名称/值”对映射。随需应变路由器（ODR）使用请求查询参数名作为键来搜索参数映射，如果存在此映射，那么将抽取值以便对规则表达式进行求值。如果该规则匹配，那么将执行指定的操作。否则，将使用定义了该表达式的工作类的缺省操作。 例如，表达式 `queryparm$timezone=EST` 对请求进行测试，以确定该请求是否包含值为 `EST` 的名为 `timezone` 的 HTTP 查询参数。要测试某个查询参数是否存在，请使用下列其中一个命令： `queryparm$timezone IS NOT NULL` `queryparm$timezone IS NULL`
角色 | `roles$<name>` | HTTP 和 SOAP | 请求发送方的角色。
服务器主机 | `serverhost` | HTTP、SOAP 和 IIOP | 服务器的标准主机名。此操作数不支持数字运算符，例如 `>、>=、< 和 <。`
服务器 IPV4 | `serveripv4` | HTTP 和 SOAP | 服务器的 IP 地址，使用 IPv4 点分四段地址类型 n.n.n.n。
服务器 IPV6 | `serveripv6` | HTTP 和 SOAP | 服务器的 IPv6 128 位地址，类型为 x:x:x:x:x:x:x:x，遵循 RFC 1924 协议。
时间 | `time` | HTTP、SOAP 和 IIOP | 时间操作数格式如下： `dayOfWeek/dayOfMonth/month/year::hour:minute:second` dayofWeek 值包括 Sun、Mon、Tue、Wed、Thu、Fri 和 Sat。 dayOfMonth 包括值 1-31。 month 是表示月份的数字编号，1 代表一月，12 代表十二月。例如，数字值 5 代表五月。 year 是 4 位的年份。例如，2007。 hour 是采用 24 小时时钟的小时。 minute 是 0-59 的整数。 second 是 0-59 的整数。 注意：省略和通配符不受时间操作数支持。 正斜杠（/）用来分隔日期参数，双冒号（::）用来分隔日期和时间参数，冒号（:）用来分隔时间参数。注意，由整个规则的布尔结果（使用了时间操作数）确定所执行的路由操作。
用户标识 | `uid$<name>` | HTTP 和 SOAP | 请求发送方的用户标识。
虚拟门户网站 | `virtualportal` | HTTP 和 SOAP | 虚拟门户网站是请求 URL 减去 WebSphere® Portal 应用程序的 Web 模块上下文根后的结果。如果给定的请求与所定义的虚拟门户网站匹配，那么将执行为该规则定义的路由操作。
XPath 表达式 | `xpathexpr` | SOAP | XPath 字符串表达式具有用于包含 XPath 表达式的必需字段和用于定义局部名称空间的可选字段。如果 XPath 表达式中包含的所有名称空间都是标准名称空间，那么第二个字段是可选字段。如果有多个局部名称空间，那么请使用逗号（,）进行分隔。以下是包含一个局部名称空间定义的 xpathexpr 示例： `xpathexpr$/soap:Envelope/soap:Body/m:getTimeZone/n:clientId$m\\=http://test.classify.ws.ibm.com,n\\=http://test2.classify.ws.ibm.com = \\'1000\\' or operation IS NOT NULL`

## 运算符

- =：“等于”运算符表示以区分大小写方式进行匹配。
- <>：“不等于”运算符表示操作数值与输入的值不相等。
- >：“大于”运算符适用于数字。
- >= ：“大于或等于”运算符适用于数字。
- < ：“小于”运算符适用于数字。
- <=：“小于或等于”运算符适用于数字。
- AND：对于 `xx` AND `yy`，表示与既包含 `xx` 又包含 `yy` 的内容匹配。
- BETWEEN：通过将此运算符与 AND 运算符配合使用，可以选择一系列值，包括第一个值（最小值）和最后一个值（最大值）。这两个运算符可以共同对数字和日期执行运算。
- EXISTS：此布尔运算符对操作数或复合子表达式的结果进行检查，例如，检查某些 HTTP 头元素属性。
- IN：此运算符表示在单个表达式中包含多个值的操作数。例如，对于名为 `port` 的操作数，如果要表示端口值可以是任何值或所有值，例如 `9080`、`9090` 和 `9091`，那么表达式片段为 `port IN (9080,9090,9091)`。括号中值的表示方式取决于端口的数据类型。如果端口是整数，那么正确的语法是一些不带引号的值。如果端口是字符串，那么正确的语法为 `port IN (9080,9090,9091)`。
- IS NULL：此运算符表示查询验证结果表明所请求的参数不存在。
- IS NOT NULL：此运算符表示查询验证结果表明所请求的参数存在。
- LIKE：此运算符表示对字符串操作数值进行模式匹配。在模式匹配的开始位置，值必须包含百分号通配符（%）。例如，表达式 `host LIKE %blanca` 表示与单词 blanca 或者任何其他以 blanca 结尾的单词匹配；表达式 `host LIKE blanca%` 表示与单词 blanca 或者任何其他以 blanca 开头的单词匹配；表达式 `host LIKE %blanca%` 表示与单词 blanca 或者任何嵌入了 blanca 的单词匹配。
- NOT：对于 NOT `xx`，此运算符表示未包含 `xx` 的匹配项。
- OR：对于 `xx` OR `yy`，此运算符表示包含 `xx` 或 `yy` 的匹配项。

## 值

根据所选运算符的不同，输入要创建的子表达式的值。

## 构建子表达式

根据已指定的操作数、运算符和值，生成子表达式。

## 生成的子表达式

复制这个子表达式并将其粘贴到规则中。

相关信息：
随需应变路由器路由策略
随需应变路由器服务策略
定义工作类成员资格和规则

文件名：wc_rulebuilder_detail.html