Servlet 扩展接口
可以使用扩展生成器和处理程序来将内容添加到 Servlet 和 Portlet 调用的远程消息。Servlet 扩展还可以通过利用过滤器概念来修改现有行为。远程请求分派器 (RRD) 扩展框架依赖于将任何数据附加至一个出站 RRD 请求的扩展生成器,以及根据接收的数据使用数据并执行操作的扩展处理程序。有关 com.ibm.wsspi.rrd.extension 包的更多信息,请参阅适用于管理员的“其他应用程序编程接口 (API)”一文。
扩展生成器
- 另一个 OSGI 束。
- 任何共享库。例如,与服务器类装入器绑定的共享库。
- 包含启用 RRD 的本地 Web 应用程序的 WEB-INF 目录。
每个扩展生成器都由一个生成器元素定义,该元素包含一个标识属性,用来对扩展生成器指定唯一标识,以便添加到 RRD 响应数据的扩展可以将任何扩展生成器作为目标。类属性用来指定扩展生成器的类名,该类必须实现 com.ibm.wsspi.rrd.extension.generator.ExtensionGenerator 接口。通过 order 属性,每个扩展生成器还可以有关联的执行顺序,这对于在出现多个扩展生成器描述符文件的环境中强制实行扩展生成器执行顺序很有用。另外,生成器还有一个称为 type 的必需属性,它定义生成器的类型。对于 Servlet RRD,其值为“Servlet”,并且该类必须实现 com.ibm.wsspi.rrd.extension.generator.ExtensionGenerator 接口。
<extension point="com.ibm.wsspi.rrd.generators">
<generator id="int1"
class="com.ibm.ws.rrd.example.extension.IntExtensionGenerator"
order="1"
type=”servlet”>
<init-param>
<param-name>intValue</param-name>
<param-value>100</param-value>
</init-param>
</generator>
<generator id="string1"
class="com.ibm.ws.rrd.example.extension.StringExtensionGenerator"
order="2"
type=”servlet”>
<init-param>
<param-name>stringValue</param-name>
<param-value>This is an example string</param-value>
</init-param>
</generator>
<generator id="int2"
class="com.ibm.ws.rrd.example.extension.IntExtensionGenerator"
order="3"
type=”servlet”>
<init-param>
<param-name>intValue</param-name>
<param-value>200</param-value>
</init-param>
</generator>
</extension>
有关 com.ibm.wsspi.rrd.extension.generator 包的更多信息,请参阅适用于管理员的“其他应用程序编程接口 (API)”一文。扩展处理程序
- 另一个 OSGI 束。
- 任何共享库。例如,与服务器类装入器绑定的共享库。
- 包含启用 RRD 的本地 Web 应用程序的 WEB-INF 目录。
每个扩展处理程序都由一个处理程序元素来定义,该元素包含 namespaceURI 和 localName 属性,它们组合定义该扩展处理程序可以处理的扩展数据的限定名。另外,每个扩展处理程序还需要一个由 id 属性指定的唯一标识。此属性指定的值必须与扩展生成器对应,扩展生成器生成匹配的限定名和标识的扩展数据。类属性用来指定扩展处理程序的类名,该类必须实现 com.ibm.wsspi.extension.handler.ExtensionHandler 接口。另外,处理程序还有一个称为 type 的必需属性,它定义处理程序的类型。其值为“Servlet”,且该类必须实现 com.ibm.wsspi.rrd.extension.handler.ExtensionHandler 接口。
<extension point="com.ibm.wsspi.rrd.handlers">
<handler id="int1"
class="com.ibm.ws.rrd.example.extension.IntExtensionHandler"
namespaceURI="http://www.ibm.com/ws/rrd/ext/types"
localName="SimpleType" order="1"
type=”servlet”/>
<handler id="string1"
class="com.ibm.ws.rrd.example.extension.StringExtensionHandler"
namespaceURI="http://www.ibm.com/ws/rrd/ext/types"
localName="SimpleType" order="2"
type=”servlet”/>
<handler id="int2"
class="com.ibm.ws.rrd.example.extension.IntExtensionHandler"
namespaceURI="http://www.ibm.com/ws/rrd/ext/types"
localName="SimpleType" order="3"
type=”servlet”/>
</extension>
有关 com.ibm.wsspi.rrd.extension.handler 包的更多信息,请参阅适用于管理员的“其他应用程序编程接口 (API)”一文。扩展委派器
扩展委派器允许用户指定在 RRD 调用期间要使用的特定扩展生成器和处理程序链实例,从而使 RRD 能够处理任何 Servlet 容器。RRD 维护扩展委派器的用户可扩展列表,并在运行时根据发出的 Servlet 请求类型来选择适当的委派器。
- 另一个 OSGI 束。
- 任何共享库。例如,与服务器类装入器绑定的共享库。
- 包含启用 RRD 的本地 Web 应用程序的 WEB-INF 目录。
<extension point="com.ibm.wsspi.rrd.rrd-extension-delegator">
<ExtensionDelegatorRegistration>
<ExtensionDelegator priority="1" classname="com.ibm.ws.rrd.extension.PortletExtensionDelegator"/>
<ExtensionDelegator priority="2" classname="com.ibm.ws.rrd.extension.ServletExtensionDelegator"/>
</ExtensionDelegatorRegistration>
</extension>
定制 EMF 包
- 另一个 OSGI 束。
- 任何共享库。例如,与服务器类装入器绑定的共享库。
- 包含启用 RRD 的本地 Web 应用程序的 WEB-INF 目录。
<extension point="com.ibm.wsspi.rrd.rrd-emf-packages">
<emfPackages>
<emfPackage className="com.ibm.ws.rrd.webservices.types.emf.impl.TypesFactoryImpl" />
</emfPackages>
</extension>