Portlet
生產動態內容的Web組件
Portlet是基於Java的Web組件,由Portlet容器管理,並由容器處理請求,生產動態內容。Portals使用Portlets作為可插拔用戶介面組件,提供信息系統的表示層。作為利用Servlets進行Web應用編程的下一步,Portlets實現了Web應用的模塊化和用戶中心化。 Portlet規範,即JSR(Java Standardization Request )168,是為了實現Portal和Portlet的互操作。它定義了Portlet和Portlet容器之間的合約,讓Portlet實現個性化、表示和安全的API集。規範還定義了怎樣在Portlets應用中打包Portlets。
隨著企業級Portal的大量湧現,不同提供商創建了不同的Portal組件API,即Portlet。不同的不兼容給應用服務商,Portal用戶和Portal Server提供商都造成了問題。為了消除這些問題,JSR168,即Portlet規範提出,從而提供Portlet和Portal間的互操作性。JSR168定義,Portlet是基於Java的Web組件,Portlet容器處理request並生成動態內容,管理Portlet。Portal使用Portlet作為可插入用戶介面組件,提供信息系統的表示層。
JSR168的目標是:
定義Portlet的運行時環境,即Portlet容器
定義Portlet和Portlet容器之間的API集
提供Portlet存儲易失數據和持久數據的機制
提供Portlet包含Servlet和JSP的機制
定義方便部署的Portlet打包方法
提供JSR168規範下的Portal的二進位Portlet便攜性
通過WSRP(Web Service for Remote Portlet)協議運行符合JSR168規範的遠程Portlet
IT界已經廣泛的接受了JSR168規範。所有的Portal領域主要公司都是JSR168專家組的成員:Apache, AGT, BEA, Boeing, Borland, Broadvision, Citrix, EDS, Fujitsu, Hitachi, IBM, Novell, Oracle, SAP, SAS Institute, Sun Microsystems, Sybase, TIBCO, and Vignette。官方支持列表甚至更長。
JSR168最終版本已在2003年九月發布。
本文中,首先定義了Portal和Portlet,然後解釋了JSR168的概念,包括API的基本對象。接下來,深入到JSR的高級功能,比如用戶信息,本地化和緩存。然後講到了擴展,從而使Portal提供者擴展當前Portlet規範的函數功能。本文包含了Portlet應用的打包和部署。
基本定義這部分中,講述Portlet規範中的基礎定義,包括Portal基本構架,Portlet容器和Portal頁面。
Portal是一個基於Web的應用,它能提供個性化,單點登錄,不同源的內容聚合,和信息系統的表示層集中。聚合是整合不同Web頁面源數據的過程。為了提供用戶定製的內容,Portal可能包含複雜的個性化特徵。為不同用戶創建內容的Portal頁,可能包含不同的Portlet集。表示了Portal的基本架構。
Portal Web應用處理客戶請求,找回用戶當前頁中的Portlet,然後調用Portlet容器,重新獲取各個Portlet的內容。Portlet容器提供Portlet的運行時環境,並通過Portlet API調用Portlet。Portal通過Portlet Invoker API調用Portlet容器。Portlet容器通過Portlet Provider SPI(Service Provide Interface)獲取Portal信息。表示了基本的Portal頁面組件。
Portal頁面本身代表一個完整的標記文檔,並且聚集了一些Portlet窗口。除Portlet外,頁面可能還包含導航區和標誌區(Navigation Area and Banners)。一個Portlet窗口包含一個標題欄,裝飾,和Portlet產生的內容。裝飾可以包括改變Portlet窗口狀態和模式的按鈕(後文將解釋這些概念)。
正如上文所說,Portlet是基於Java的Web組件,處理request併產生動態內容。Portlet產生的內容稱為片段,即一段遵守中心規則的標記(比如HTML, XHTML,WML(無線標記語言)),多個片段可以聚合成一個完整的文檔。多個Portlet聚合在一起,組成Portal頁。Portlet容器控制Portlet的生命周期。
Web客戶通過Portal實現的request/response範例與Portlet交互。通常,Portlet中的動作會被Portal接受,從而用戶與Portlet中的內容交互(比如點擊Portlet中的鏈接,提交表單),提交到Portlet的目標。
對不同的用戶,根據其配置,同一個Portlet會產生不同的內容。
Portlet容器提供它們需求的運行時環境並運行Portlet。它包含Portlets並控制它們的生命周期。容器提供Portlet參數的持久存儲機制,它接受來自Portal的request,並在其持有的Portlet上執行request。容器不負責Portlet產生內容的聚合,Portal自己處理內容聚合。