日期:2014-05-16  浏览次数:20345 次

JSR 286 Portlet 的新特性,第 3 部分: Portlet 过滤器和 Portlet 窗口


  在 本系列 的 第 1 部分 简要回顾了JSR 168 Portlet,并对 JSR 286 Portlet 的新增特性做了详细的介绍,第 2 部分 和第 3 部分将通过在 Apache Pluto 2.0 平台上开发和部署 Portlet 应用程序, 向读者介绍 JSR 286 Portlet 新特性的使用方法。本文将介绍 JSR 286 Portlet 的 Portlet 过滤器和 Portlet 窗口应用程序开发。


  关于本系列


   本系列 专门针对具有 JSR 168 Portlet 开发基础,并且想了解 JSR 286 Portlet 新特性和开发流程的开发人员。在学完本系列后,您将了解到相对于 JSR 168 Portlet,JSR 286 Portlet 究竟提供了哪些增强功能, 以及这些新增特性在实际开发中的应用。


  本系列的 第 1 部分 简单回顾了 JSR 168 Portlet, 并列出了 JSR 286 Portlet 的新增内容。第 2 部分 和第 3 部分将通过在 Apache Pluto 2.0 平台上开发和部署 Portlet 应用程序,向读者介绍 JSR 286 Portlet 新特性的使用方法。


  关于本文


  本文承接 第 2 部分,继续介绍 JSR 286 Portlet 的 Portlet 过滤器和 Portlet 窗口应用程序开发。阅读本文之前,您应当对 JSR 168 Portlet 有所了解,并阅读了本系列的 第 1 部分 和 第 2 部分。


  Portlet 过滤器


  通过 第 1 部分 的介绍,我们知道 Portlet 过滤器分为:


  Action 过滤器


  Render 过滤器


  Resource 过滤器


  Event 过滤器


   我们将首先对这四种 Portlet 过滤器的开发使用流程分别单独进行介绍,然后将这四种 Portlet 过滤器综合起来进行更进一步的开发,最后通过和 Servlet 过滤器的结合使用,使读者明白 Portlet 过滤器和 Servlet 过滤器的关系和区别。


  Action 过滤器


  新建 Java 类 TestActionFilter:


  清单 1. TestActionFilter.java 文件


package com.ibm.samples.jsr286.filters; 
 
import ... 
 
public class TestActionFilter implements ActionFilter { 
 
  private static Log log = LogFactory.getLog(TestActionFilter.class); 
 
  private FilterConfig filterConfig; 
 
  public void init(FilterConfig filterConfig) throws PortletException { 
    log.info("action filter [" + filterConfig.getFilterName() 
        + "] is initialized."); 
    this.filterConfig = filterConfig; 
  } 
 
  public void destroy() { 
    log.info("action filter [" + filterConfig.getFilterName() 
        + "] is destroyed."); 
  } 
 
  public void doFilter(ActionRequest actionRequest, 
      ActionResponse actionResponse, FilterChain filterChain) 
      throws IOException, PortletException { 
    log.info("action filter [" + filterConfig.getFilterName() 
        + "] is called."); 
    filterChain.doFilter(actionRequest, actionResponse); 
  } 
}  


   这个程序的主要作用就是在 Action Filter 初始化、过滤器调用,销毁的时候分别打印相应的信息。清单 1 中 filterChain.doFilter(actionRequest, actionResponse) 需要读者特别注意,这行代码保证了过滤器链的传递,删去这行代码,则过滤器链将在该过滤器执行结束后终结。