天天看點

portal學習(一)抄書

這兩天将網上下載下傳的《jsr168 porlet标準手冊漢化整理》和《liferay portal二次開發指南》認認真真地看了幾遍,看了bea站點上portal的getting start,寫了hello world,算是正式開始學習portal了。感謝這麼多人無私地分享知識。抄書。

第一節 portal 規範

随着portal 的興起,越來越多的公司開始涉足portal 産品開發,并組建各自的portal 組

件和基于其的産品,比如ibm、bea、microsoft、sap、apache 等。各個廠商的接口互不

相容,給軟體開發商以及開發人員帶來諸多不便。

1.1.1 jsr168

為此,jcp 組織釋出了jsr168(java specification request),portlet specification v1.0,

用來提供不同的portal 和portlet 之間的互通性。隻要開發的portlet 遵循jsr168,則就可以

在所有遵循jsr168 的portal 上部署運作。

jsr168 中定義了portal 的實作規範和接口,并對理想的portlet 進行了詳細的規劃和描

述。

1.1.2 wsrp

wsrp 是oasis web service for remote portlet 的縮寫。wsrp 是web service 的一種新

的商業應用,一種新的标準,主要用來簡化portal 對于各種資源或者程式整合的複雜度,可

以避免程式設計帶來的整合麻煩和問題。而且portal 管理者可以從海量的wsrp 服務中選擇需

要的功能用以整合到目前所用的portal 中。它有三種角色:

①、生産者 􀃆 提供portlet

②、消費者 􀃆 使用portlet

③、終端使用者 􀃆 最終使用者

它的特點在于生産者将消費者所需要的資訊通過wsrp 傳回給消費者,這些資訊是相對

标記片斷,例如html、xhtml 等,可以直接嵌入使用者的頁面中,而不用像web service

一樣開發使用者端接口。

實作這個規範,portal 可以跟各式各樣的資料源打交道,徹底終結資訊孤島的窘境。

第二節 什麼是portal

portal 是基于web 的,以“應用整合”和“消除資訊孤島”為最終目的,提供單點登

錄、内容聚合、個性化門戶定制等功能的綜合資訊系統。

完整的portal 通常由portal 伺服器、portlet 容器、portlet 構成。

1.2.1 portal 伺服器

portal 伺服器是容納portlet 容器,支援portlet 呈現的普通或者特殊web 伺服器。

portal 伺服器通常會提供個性化設定、單點登入、内容聚合、資訊釋出、權限管理等功能,

支援各種資訊資料來源,并将這些資料資訊放在網頁中組合而成,提供個性化的内容定制,

不同權限的浏覽者能夠浏覽不同的資訊内容。通常,portal 提供以下功能:

單點登入:portal 通常采用acl、ssl、ldap 等業界标準的安全技術,提供對所有現有

應用系統的安全內建,隻需在portal 的唯一入口上登入一次,就可以通路所有應用系統和

資料。對于安全性要求較高的應用系統,如電子商務平台、交易系統等,通過擴充接口傳遞

使用者身份資訊,如數字證書資訊、數字簽名資訊等,進行二次身份認證,保證單點登陸的安

全性。

權限控制:系統采用ldap 對使用者資源進行統一的管理,同時提供二次開發接口,可以

與其他應用系統的使用者管理子產品對接,并能随相關業務系統實時更新通路權限。通過完善的

授權機制及存取控制,使用者通路權限控制到字段級别,確定使用者隻能通路具有權限的應用系

統及相關資訊。

内容管理: 實作應用系統之間實時交換資訊。采用多種緩存機制,保證内容交換的性能

和準确性。采用基于xml 的rich site summary (rss)标準,迅速在各應用系統之間傳播最

新變化。

資訊釋出: 實作資訊門戶内容的動态維護。動态網站系統可與oa 協同辦公系統、知識

管理系統等內建,網站資訊須經oa 系統的審批流程流轉通過後或知識管理平台設定具有外

部共享權限後才可正式釋出,真正實作内外資訊釋出的同步。

檔案管理: 系統實作無縫內建多種資料源,包括:資料庫、文檔(office 文檔、pdf、

autocad、甚至zip 文檔)、web 網頁、ftp 站點等,并對資料按業務要求和職務特點加以分

析整理,通過統一web 界面主動推送(push)至使用者的門戶桌面,幫助使用者做出及時、正确的

決策。

1.2.2 portlet 容器

portlet 容器提供portlet 執行的環境,包含很多portlet 并管理它們的生命周期,保

存portlet 的定制資訊。

一個portal 容器接收到來自portal 的請求後,接着将這個請求傳遞給存在portal 容

器的portlet 執行。portlet 容器沒有義務去組合portlet 産生的資訊內容,這個工作必

須由portal 來處理。portal 和 portal 容器可以放在一起視為同一個系統的元件,或者分

開成為兩個獨立的元件。

portlet 容器是普通web servlet 容器的擴充,是以一個portlet 容器可以建構于一個

已經存在的servlet 容器或者可能實作全部web servlet 容器的全部功能。無論portlet

容器怎麼實作,它的運作環境總是假定它支援servlet2.3 規範。

通常,portlet 容器擴充自普通的servlet 容器。

第三節 什麼是portlet

portlet 是portal 中最重要的元件,負責在portal 中呈現資訊内容,有相應的生命周

期。通過自定義portlet,使用者很容易定義個性化的portal 頁面。portlet 由portlet 容器

負責管理、處理請求并傳回動态頁面,可以作為portal 的可即插即用的界面元件。

1.3.1 portlet

一個portlet是以java技術為技術的web元件,由portlet容器所管理,專門處理客戶的

資訊請求以及産生各種動态的資訊内容。portlet 為可插式的客戶界面元件,提供呈現層成

為一個資訊系統。

這些由portlet産生的内容也被稱為片段,而片段是具有一些規則的标記( html、xhtml、

wml ),而且可以和其他的片段組合而成一個複雜的檔案。一個或多個 portlet 的内容聚合

而成為一個 portal 網頁。而 portlet 的生命周期是被 portlet 容器所管理控制的。

用戶端和portlet的互動是由portal通過典型的請求/響應方式實作,正常來說,客戶會

和portlet所産生的内容互動,舉例來說,根據下一步的連接配接或者是确認送出的表單,結果

portal将會接收到portlet的動作,将這個處理狀況轉向到目标portlet。這些portlet 内容

的産生可能會因為不同的使用者而有不同的變化,完全是根據客戶對于這個portlet的設定。

1.3.2 portlet 與servlet 的關系

portlet 被定義成為一個新的元件,具有新的明确的界面與行為。為了盡可能與現有的

servlet 結合達到重複使用的目的,portlet 的規範利用了 servlet 的規範,許多觀念都

很相似的,結合 portlet、servlet 及 jsp 在同一個網站系統中,我們稱為portlet 應用 。

在同一個 portlet 應用 中,他們将分享同一個類加載器(classloader),上下文(context)

及 session。

①、portlet 和 servlet 的相似之處

@ portlet 也是 java 技術的 web 元件

@ portlet 也是有特定的 container 在管理

@ portlet 可以動态産生各種内容

@ portlet 的生命周期由 container 所管理

@ portlet 和用戶端的互動是通過 request/response 的機制

②、portlet 和 servlet 也有一些不同

8

@ portlet 隻産生 markup 資訊片段,不是完整的網頁檔案。而 portal 會将所有的

portlet markup 資訊片段放到一個完整的 portal 網頁。

@ portlet 不會和 url 有直接的關系

@ 用戶端必須通過 portal 系統才能和 portlet 互動

@ portlet 有一些定義好的 request 處理,action request 以及 render request。

@ portlet 預設定義 portlet modes 及視窗狀态可以指出在網頁中該 portlet 的哪個功

能正在執行及現在的 狀态。

@ portlet 可以在同一個 portal 網頁之中存在多個。

③、portlet 有一些附加的功能是 servlet 所沒有的

@ portlet 能夠存取及儲存永久配置檔案及定制資料。

@ portlet 可以存取使用者資料

@ portlet 具有 url 的重寫功能在檔案中去動态建立連結,允許 portal server 不用去

知道如何在網頁的片 段之中建立連結及動作。

@ portlet 可以儲存臨時性的資料在 portlet session 之中,擁有兩個不同的範圍 :

application-wide scope 及 portlet private scope 。

④、portlet 不具有一些功能, 但是 servlet 卻有提供

@ servlet 具有設定輸出的文字編碼( character set encoding)方式

@ servlet 可以設定 http 輸出的 header

@ servlet 才能夠接收客戶對于 portal 發出的 url 請求

1.3.3 portlet 的生命周期

一個portlet有着良好的生命周期管理,定義了怎樣裝載,執行個體化和初始化,怎樣響應來

自用戶端的請求及怎樣送出服務。這個portlet生命周期由portlet接口的init,processaction,

render和destroy方法來表達。

載入和執行個體化:portlet 容器負責載入和執行個體化portlet。當portlet 容器運作portlet 應用或

者延遲到portlet 需要服務使用者的請求時,portlet 就會被載入并執行個體化。載入portlet 類後,

portlet 類随即被執行個體化。

初始化:portlet 類執行個體化後,portlet 容器還需要初始化portlet。以調用portlet 去響應客

戶端的請求。portlet 容器呼叫portlet 接口中的init 方法初始化portlet。擴充自portletconfig

的類可以取出定義在部署描述檔案中的初始化參數,以及resource bundle。

初始化異常:在 portlet 初始化期間,portlet 可能會丟出 unavailableexception 或

portletexception 異常。此時,portlet 容器不能把 portlet 置入已啟動的服務,并且 portlet

容器必需釋放這個 portlet。 destory 方法不能被呼叫,因為初始化被認為執行失敗。發生 失

敗後,portlet 容器會嘗試着重新執行個體化及初始化 portlet。這個異常處理的規則是:由一個

unavailableexception 指定一個不能執行的最小時間,當此異常發生時,portlet 容器必需等

到指定時間過去後才産生并且初始化一個新的 portlet。

在初始化過程中所丟出的 runtime exception 異常,被當作 portletexception 來處理。

文章轉自莊周夢蝶  ,原文釋出時間2007 7 15