(1) Portal Server。『Portal Server是基于WEB的應用程序, 它將不同資源進行整合并展現(xiàn)給用戶。有些文章直接把Portal Server叫做Portal,請注意。』
(2) Portlet Container。『Portlet Container用來管理Portlet的生命周期并且提供其運行所需要的必要環(huán)境. 并且為Portlet Preferences提供持久性(Persistent)存取服務.但是其不支持內(nèi)容的Aggregation. Aggregation由Portal組件提供.』
(3) Portlet。『Portlet 是以 Java 技術為技術的 web 組件,可以被容器管理,可以產(chǎn)生動態(tài)內(nèi)容。處理請求并動態(tài)返回頁面, 可以做為Portal 的可拔插的用戶界面組件.』
我們需要Portal的目的就是要做到系統(tǒng)功能與模塊的可配置。同時要開源并符合標準。能與其他的系統(tǒng)進行結合比如Struts。
目前比較主流的Portal產(chǎn)品:
Apache Jetspeed(http://jakarta.apache.org/jetspeed/)
Liferay(http://www.liferay.com)
EXOportal(http://cvs.sf.net/viewcvs.py/exo/ExoPortal/)
Pluto(http://jakarta.apache.org/pluto)
BEA WebLogic Portal (http://edocs.bea.com/wlp/docs81/javadoc/com/bea/portal/model/Portlet.html )
IBM Websphere Portal (http://www.software.ibm.com/wsdd/zones/portal/ )
Oracle Portal Developer Kit (http://portalstudio.oracle.com/)
jfoxportal(http://www.huihoo.org/jfox/jfoxportal/index.html 剛提出草案,不過是國內(nèi)的。)
說Portal,就不能不提JSR#168 Portlet。
JSR 是由 JCP (
http://www.jcp.org/
) 這個
Java
組織所定義出來的規(guī)范。JSR#168規(guī)范就是一個關于Portlet的規(guī)范 ——Portlet Spec 1.0 。既然有了規(guī)范,理所當然的之后的產(chǎn)品就應該按照這個規(guī)范來制作。
JSR168的目標是:
定義portlet的運行時環(huán)境,即portlet容器
定義portlet和portlet容器之間的api集
提供portlet存儲易失數(shù)據(jù)和持久數(shù)據(jù)的機制
提供portlet包含servlet和jsp的機制
定義方便部署的portlet打包方法
提供jsr168規(guī)范下的portal的二進制portlet便攜性
通過WSRP(web service for remote portlet)協(xié)議運行符合jsr168規(guī)范的遠程portlet
IT
界已經(jīng)廣泛的接受了jsr168規(guī)范。所有的portal領域主要公司都是jsr168專家組的成員:Apache,AGT,BEA,Boeing,Borland,Broadvision,Citrix,EDS, Fujitsu, Hitachi, IBM, Novell, Oracle, SAP, SAS Institute, Sun Microsystems, Sybase, TIBCO, and Vignette。官方支持列表甚至更長。
客戶端請求由
Portal Web
應用程序進行處理,它為當前用戶檢索當前頁上的
Portlet
。然后,
Portal Web
應用程序為每個
Portlet
調(diào)用
Portlet
容器來通過
Container Invoker API
檢索它的內(nèi)容。
Portlet
容器通過
Portlet API
調(diào)用
Portlet
。
Container Provider Service Provider Interface
(
SPI
)允許
portlet
容器通過
Portal
檢索信息。
Portlet
窗口包括:
l 標題欄,帶有 Portlet 的標題
l 修飾,包括用于更改 Portlet 的窗口狀態(tài)的按鈕(比如最大化或最小化 Portlet )和用于更改 Portlet 的模式的按鈕(比如顯示幫助或編輯預定義的 Portlet 設置)
l
由
Portlet
產(chǎn)生的內(nèi)容(也稱為一個標記段)。
下面是典型的事件流程,當用戶訪問 portal 頁面的時候:
<!--[if !supportLists]-->² <!--[endif]-->客戶端在驗證后向portal發(fā)http請求。
<!--[if !supportLists]-->² <!--[endif]-->portal接收請求。
<!--[if !supportLists]-->² <!--[endif]-->portal判斷是否有包含請求,并請求包含的動作指向的portlet是和這個portal頁面相關聯(lián)的。
<!--[if !supportLists]-->² <!--[endif]-->如果含有動作的目標portlet,portal發(fā)請求給portlet容器去執(zhí)行相應的portlet的動作。
<!--[if !supportLists]-->² <!--[endif]-->portal通過portlet容器調(diào)用portlets,去獲得內(nèi)容片斷,這個片斷可以包含在portal頁面中。
<!--[if !supportLists]-->² <!--[endif]-->portal集合portlets的輸出內(nèi)容到1個portal頁面中,并把頁面返回客戶端。
Portlet 產(chǎn)生標記片斷。 Portal 通常給 portlet 產(chǎn)生的標記片斷加了標題,控制按鈕和其他的裝飾,這個新的片斷叫 portlet 窗口。然后 portal 整合 portlet 窗口到完整的文件, portal 頁面。
<!--[endif]-->
Portlets 運行在 portlet 容器內(nèi)。 Portlet 容器接收 portlets 產(chǎn)生的內(nèi)容。典型的, portlet 容器把 portlet 內(nèi)容傳到 portal 。 Portal server 根據(jù) portlet 產(chǎn)生的內(nèi)容創(chuàng)建 portal 頁面,并傳送給客戶端,由客戶端顯示。
<!--[endif]-->
客戶使用客戶終端訪問 portal 。在收到請求后, portal 判斷滿足請求的 portlets 列表。 Portal 通過 portlet 容器,調(diào)用 portlets 。 Portal 用 portlet 產(chǎn)生的片斷創(chuàng)建 portal 頁面,同時把頁面返回給用戶。
<!--[endif]-->
用戶可以根據(jù)需要通過增刪 Portlet 的方式配置他們的頁面。在 Windows 或者 XWindows 窗口程序中,窗口有最大化和最小化的窗口狀態(tài), portlet 也有窗口狀態(tài)。 窗口狀態(tài)是 portal 頁面空間數(shù)量的指示器,它被賦值給 portlet 產(chǎn)生的內(nèi)容中。當調(diào)用 portlet ,容器提供當前窗口狀態(tài)給 portlet 。 Portlet 使用窗口狀態(tài)決定多少信息需要 render 。 Portlets 能在處理 action 請求時,編程的改變他們的窗口狀態(tài)。 Portlet 規(guī)范定義了 3 種窗口狀態(tài), normal , maximized 和 minimized 。
Normal
窗口狀態(tài)
Normal 窗口狀態(tài)表示 portlet 要和其他的 portlet 共享頁面。它也表示目標設備限制了顯示能力。因此, portlet 限制輸出的尺寸。
MAXIMIZED
窗口狀態(tài)
Maximized 窗口狀態(tài)表示 portlet 是 portal 頁面唯一的 portlet ,或 portlet 相比與其他的 portlet 有更多的空間。當窗口狀態(tài)是 Maximized 時, portlet 產(chǎn)生更多的內(nèi)容。
Minimized
窗口狀態(tài)
當 portlet 是 minimized 狀態(tài),它將是最小限度的輸出,或不輸出。
Portlet 模式指出 porlet 的功能。一般來說, portlet 執(zhí)行不同任務,依靠當前執(zhí)行的任務的創(chuàng)建不同內(nèi)容。 Portlet 模式告訴 portlet 他們執(zhí)行什么任務,生產(chǎn)什么內(nèi)容。當調(diào)用 portlet ,容器提供當前 portlet 模式給 portlet 。 Portlets 在處理 action 請求時能編程的改變他們的 portlet 模式。
Portlet 有四種模式: view , edit, help 和 config 。
可用的模式根據(jù)用戶的角色受到限制。例如,匿名用戶只能使用 view 和 help 模式,而驗證用戶可以使用 edit 模式。
舉例來說,一個用戶可以定制的股票信息Portlet,View模式允許用戶查看股票列表,Help模式提供給用戶幫助手冊,Edit模式允許用戶定制自己關注的股票列表,而Config模式允許管理員改變股票服務的一些配置。
VIEW
模式
View
模式期待的功能是產(chǎn)生標記反映當前的狀態(tài)給portlet。例如,view模式的portlet包含1個或多個框,用戶可以操作或交互,或組成不需要任何用戶交互的的靜態(tài)內(nèi)容。
Portlet
開發(fā)者需要通過覆蓋doView方法實現(xiàn)view portlet模式的功能。
EDIT
模式
通過edit模式,portlet提供內(nèi)容和logic讓用戶用戶化portlet的行為。Edit模式包含一個或多個框,用戶可以定位并輸入他們的用戶化數(shù)據(jù)。
典型的,edit模式,將設置或修改portlet的參數(shù)。Portlet開發(fā)者需要通過覆蓋doEdit方法實現(xiàn)edit portlet模式的功能。
HELP
模式
當在help模式,portlet提供portlet的help信息。這個help信息將會是簡單的框,用連貫的正文或上下文敏感的幫助闡明了整個portlet。Portlet開發(fā)者需要通過覆蓋doHelp方法實現(xiàn)help portlet模式的功能
CONFIG
模式
當在config模式,管理員可以進行相應的操作。 Portlet開發(fā)者需要通過覆蓋doConfig方法實現(xiàn)view portlet模式的功能。
因為Portlet繼承于Servlet,所以portlet可以打包成war文件發(fā)布到Portal容器中。管理員可以發(fā)布或者卸載portlet。在一個Portlet Web 應用中,一個portlet描述文件用來描述portlet的屬性和初始化信息。一個Portlet定義包含一個application portlet和多個concrete portlet。一個Application Portlet在portlet容器中僅存在一個實例。一個concrete Portlet實例一個使用額外的數(shù)據(jù)實例化的portlet。