portlet 仅传递片段输出,而 Servlet 通常传递文档输出。但是,您可以使用
PortletServingServlet servlet(它类似于 FileServingServlet servlet)像对
Servlet 进行寻址一样对 Portlet 进行寻址。
关于此任务
缺省文档 Servlet 过滤器(即
DefaultFilter 过滤器)适用于 PortletServingServlet servlet,用于返回文档中 Portlet 的内容。此过滤器仅适用于请求,而不适用于使用 RequestDispatcher
方法的包含或转发。用来将 Portlet 的内容嵌入文档的 Servlet 过滤器称为文档 Servlet
过滤器。可以在 .xml 文件中定义其他文档 Servlet 过滤器。在 com.ibm.wsspi.portletcontainer.util 中提供了 FilterRequestHelper 属性,以帮助文档
Servlet 过滤器分析与过滤器链和 Portlet 信息有关的请求。该属性用于支持动态 Portlet 标题、用作文档 Servlet 过滤器的重定向标记以及用来确保完成一次文档转换。
过程
- 添加新的文档 Servlet 过滤器。 过滤器能力是服务器功能,因此,必须将所有过滤器安装在服务器中才能使用服务器的过滤器能力。过滤器需要在服务器级别的任何类或库目录中可用。您还必须在 Java™ 归档 (JAR) 文件根的 plugin.xml 文件中注册过滤器。以下是一个如何在
plugin.xml 文件中注册过滤器的示例。
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.0"?>
<plugin id="sample.plugin" name="Customer_Plugin" provider-name="Customer" version="1.0.0">
<extension point="com.ibm.ws.portletcontainer.portlet-document-filter-config">
<portlet-document-filter class-name="sample.filter.CustomFilter" order="200" />
</extension>
</plugin>
- 可选: 通过提供动态标题作为请求属性来设置动态 Portlet 标题。 PortletServingServlet
Servlet 通过提供动态标题作为请求属性 FilterRequestHelper.DYNAMIC_TITLE
来支持动态 Portlet 标题。如果 Portlet 设置了动态 Portlet 标题,那么此属性会返回该标题,否则,它返回 portlet.xml
文件的静态 Portlet 标题(如果已定义)。
DYNAMIC_TITLE = ‘javax.portlet.title'
将片段转化为文档时,DefaultFilter 使用此请求属性来设置文档标题。如果希望过滤器支持浏览器高速缓存或动态 Portlet 标题,必须高速缓存完整 Portlet 内容。
- 为呈示调用的 Portlet 指定高速缓存处理以支持动态标题。重定向文档 Servlet 过滤器
文档 Servlet 过滤器可以将标记设置为请求属性 FilterRequestHelper.REDIRECT。此标记确保 Portlet 容器在调用 Portlet 操作之后但在任何呈示调用之前返回到文档
Servlet 过滤器。必须定义下列常量:REDIRECT = ‘com.ibm.websphere.portlet.action' and REDIRECT_VALUE
= 'redirect'。DefaultFilter 使用此请求属性提供特殊的高速缓存处理,以便 Portlet 呈示调用能够支持动态标题。
- 将 Portlet 的片段转换为有效文档。 文档转换只能完成一次。因此,每个文档 Servlet 过滤器必须确保片段先前尚未转换为文档。如果文档 Servlet 过滤器将片段转换为文档,那么必须将请求属性
FilterRequestHelper.DOCUMENT 设置为 FilterRequestHelper.DOCUMENT_VALUE。此请求属性对是否仍需要完成转换进行标记。定义了以下常量,DOCUMENT = ‘com.ibm.websphere.portlet.filter' 和 DOCUMENT_VALUE
= 'document'。DefaultFilter 使用此请求属性来检查它是否应将片段转换为超文本标记语言 (HTML) 文档。例如,它允许另一个文档 Servlet 过滤器先将片段转换为有效的无线标记语言 (WML) 文档。