熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

用過濾器使現有Portlet適應新門戶應用程序

2013-11-15 09:47:30  來源: JSP教程 

  引言
  已經開發和交付了為數眾多的 Portlet這些 Portlet 可以安裝在 WebSphere Portal 中除了包含在 WebSphere Portal 中的內部 Portlet 以外企業應用程序供應商為了提供對他們的系統的訪問也開發了許多的 Portlet單個開發人員為了執行特定的門戶功能或者為了提供針對特定問題的解決方案也紛紛推出了許多的 Portlet單單通過 WebSphere 門戶目錄就已經可以找到成百上千的 Portlet 可供使用這些 Portlet 涵蓋了各種各樣的應用程序和行業通常門戶將使用一個或多個現有的 Portlet 來提供特定的功能並加速開發過程在某些情況下由於安全性控制或不公開的接口的緣故從門戶訪問特定於廠商的企業應用程序的惟一途徑就是使用現有的 Portlet
  
  雖然 Portlet 一般會通過配置提供一些自定義功能但通常這是很有限的在將現有的 Portlet 用於門戶之前有時還需要其他的自定義功能包括簡單的自定義(如提供與門戶的其他部分更一致的外觀)和復雜的自定義(如添加新的功能)我們來考慮一個現有的文件上傳 Portlet我們可能需要加入一種常規算法來檢查待上傳的文件內容如果文件內容不合適那麼在它抵達後台系統之前會被拒絕對於一個提供實時世界新聞的現有新聞頻道 Portlet它可能只關注特定地區或特定主題的新聞而不應該顯示其他的新聞在很多情況下門戶范圍的性能調優可能需要在門戶的每一個 Portlet 中添加其他的邏輯以便測量執行時間
  
  有多種方法可以修改和自定義現有的 Portlet最常用的方法就是面向對象的繼承它使你能夠從現有的 Portlet 派生新的 Portlet 以便添加新的功能因為 Portlet 的核心是一個或多個 Java 類這種方法的主要缺點是
  
  首先新的 Portlet 要想能夠自定義就必須從現有的 Portlet 創建
  其次因為 Portlet 應用程序是作為 web 應用程序檔案文件(WAR)交付的所以新的 Portlet 不能直接引用現有的 Portlet 的 WAR 中的類WAR 中 的所有類及其依賴性都必須先解包然後再重新打包到新的 Portlet 的 WAR 中
  另外調用 Portlet 方法(如 service 和 actionPerformed)時還必須謹慎以防它將只被容器調用
  
  與基於繼承的自定義相比WebSphere Portlet 過濾器技術提供了一種更容易且更好的方法來重用和自定義現有的 Portlet
  
  Portlet 過濾器是一個(或多個)可重用的 Java 類可以通過一種標准的方式來聲明性地添加或刪除而無需對它所修改的現有 Portlet 或 Portlet 組進行更改
  過濾器並不是一個 Portlet過濾器不創建對請求的響應但是它截取和修改請求(在請求傳送到目標 Portlet 以進行處理之前)及響應(在響應聚集到門戶頁面之前)
  過濾器並沒有綁定到任何特定的 Portlet因此它的生命周期不依賴於任何單個 Portlet這就意味著一旦過濾器初始化完畢它就能夠動態地應用到所有的可應用 Portlet而無需進一步的初始化
  另外由於過濾器獨立於任何 Portlet所以現有的 Portlet 或 Portlet 的 WAR 幾乎不需要創建過濾器
  
  WebSphere 代碼轉換和機器翻譯是基於 Portlet 過濾器技術關於 WebSphere 代碼轉換和翻譯的詳細描述可以在版本 的 WebSphere portal 信息中心中找到而相關的文章列表請見參考資料部分
  
  本文介紹了 WebSphere Portlet 過濾器的基礎知識Portlet 過濾器和 Servlet 過濾器的不同之處以及如何開發和使用 Portlet 過濾器來自定義 Portlet另外還將解決各種開發問題以幫助簡化其使用一種稱為文件內容過濾器(File Content Filter)的過濾器為現有的文件上傳 Portlet 添加了細粒度的文件控制機制本文就是以它為例來說明 Portlet 過濾器的使用的
  
  您可以找到一些適用於 WebSphere Portal 的文件上傳 Portlet在 WebSphere Portal 中 Portal Document Manager(PDM)Portlet 和 Portlet Installation Portlet 都是缺省安裝的更有許多是在 WebSphere Portal Catalog 中列出的本文以 PDM Portlet(PDM)為例來說明文件內容過濾器的使用在 WebSphere Portal VPDM Portlet 在缺省狀態下自動安裝在 My Portal 中的 Document 頁面內它給門戶的用戶提供了簡單實時的文檔查看和解決方案PDM 讓用戶具有編輯者(Editor)的權限使得他們幾乎可以上傳任何類型的文件然而對於許多組織來說這種功能的需求可能遠遠比 PDM Portlet 提供的標准行為復雜得多例如文件控制機制可以用於控制能夠上傳的文件的類型記錄上傳的文件和它們的屬性報告上傳成功或失敗的狀態等等本文中的文件內容過濾器將修改 PDM Portlet 的行為這樣就只有某些類型的文件被允許上傳
  
  Portlet 過濾器與 Servlet 過濾器
  如果您熟悉 Servlet 過濾器(請參閱 Java Servlet 規范以獲得詳細信息)從已經閱讀的資料中您可能已經注意到了 Portlet 過濾器和 Servlet 過濾器的相似性實際上它們之所以是相似的是因為二者都可以聲明性地嵌入從而截獲並修改請求和響應但是理解它們之間存在著很大的不同是非常重要的在一定程度上它們之間的差異是與 Servlet 和 Portlet 之間的差異相聯系的Servlet 過濾器是一個門戶級過濾器它可以修改由一些小的部分(來自頁面上所有 Portlet 的響應)集合而成的整個門戶頁面而 Portlet 過濾器只能用於那些小的部分Servlet 過濾器(如果已經安裝的話)是接收和修改客戶端請求的第一個組件同時也是修改對客戶端的響應的最後一個組件(請參見圖
  
  圖 帶有 Servlet 過濾器和 Portlet 過濾器的客戶端請求事件序列
  
 

  如圖 所示 Servlet 請求(步驟 )在分派給一個或多個 Portlet 請求(步驟 )之前首先通過一個 Servlet 過濾器鏈進行處理(步驟 在結果集聚到一起(步驟 )之前Portlet 請求進一步轉發到 Portlet 過濾器鏈進行處理(步驟接著將集聚的結果發送回 Servlet 過濾器進行處理之後將集聚的結果最終顯示給用戶(步驟
  
  一個過濾器鏈包含一個或多個過濾器在一個過濾器完成處理之後新的請求和響應將傳送到鏈上的下一個過濾器鏈上的最後一個過濾器調用目標資源(Servlet 或 Portlet)
  
  與 Servlet 過濾器一樣Portlet 過濾器也是 WebSphere portal 體系結構中的一個可選的組件因此在解決實際的問題時可以使用一種類型的過濾器也可以同時使用兩種類型的過濾器還可以不使用過濾器例如Servlet 過濾器可以用於壓縮和加密整個門戶頁面而 Portlet 過濾器可能更適合只壓縮和加密門戶頁面的一部分在 WebSphere Portal Transcoding Technology(請參見參考資料)中Portlet 級代碼轉換使用 Portlet 過濾器來進行內容轉換標記轉換和注解等等而門戶級代碼轉換使用 Servlet 過濾器(或門戶過濾器在 WebSphere portal 中是這樣稱呼的)來提供 Deck 片段
  
  Portlet 過濾器的支持和開發
  Portlet 過濾器的支持類定義在 WebSphere portal 的 comibmwpspepclegacycmpf 包中PortletFilter 接口提供了三個方法來管理 Portlet 的生命周期
  
  void init(PortletFilterConfig config)
  容器調用一次這個方法來准備用於服務的過濾器對象 PortletFilterConfig(config) 使得過濾器能夠訪問配置參數以及對門戶上下文的引用
  void destroy()
  這個方法是在將過濾器從服務移除之後調用的這個方法使得過濾器能夠清除任何存放的資源
  void doFilter(PortletFilterMethod method PortletRequest request PortletResponse response PortletFilterChain filterChain)
  這個方法執行實際的過濾工作這個方法使得過濾器能夠檢查和修改請求和響應或者完全跳過請求的處理第一個參數(method)是過濾器能夠調用的請求方法的類型(如 SERVICE 或 ACTIONEVENT)最後 的參數(filterChain)包含一個已經注冊且正在運行的過濾器的列表
  
  包中的 PortletFilterAdapter 類為 PortletFilter 接口提供了一個缺省的實現根據作為 doFilter 方法中的第一個參數傳送的請求方法的類型可以將 doFilter 方法的缺省實現委托給一組 do 方法(doServicedoTitledoActionEventdoMessageEventdoLogindoBeginPage 和 doEndPage)do 方法的缺省實現做的惟一一件事情就是將最初的請求和響應發送到鏈上的下一個過濾器或目標 Portlet過濾器的每個 do 方法都是在目標 Portlet 的對應方法調用之前調用的 列出了每個過濾器方法和目標 Portlet 方法之間的映射
  
  表 Portlet 和 Portlet 過濾器方法
  
 

  自定義的 Portlet 過濾器應該擴展 PortletFilterAdapter 類並且覆蓋表 中所列的一個或多個方法舉例來說如果自定義過濾器僅支持 Portlet VIEW 並且修改輸出那麼就只需要覆蓋 doService 方法然而如果過濾器支持 Portlet ActionEvent 並且修改輸出那麼 doService 和 doActionEvent 都應該被覆蓋(請參見下一部分以獲得詳細信息)WebSphere Portal 提供了三個便利的包裝類
  
  PortletRequestWrapper(用於 PortletRequest)
  PortletResponseWrapper(用於 PortletResponse)
  ClientWrapper(用於客戶端接口)
  
  包裝類應該用於創建自定義請求響應和客戶端類這樣就可以容易地添加新的功能而不必實現整個接口了
  
  圖 帶有 Portlet 過濾器的服務請求的請求
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19120.html
  • 上一篇文章: 没有了

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.