文檔說明
參與人員:
作者 網名 聯絡
柯自聰 eamoi educhina eamoi@163.com(技術) zcke0728@hotmail.com(版權)
發布記錄:
版本 日期 作者 說明
1.0 2005-10-20 柯自聰 創建,第一版
鏈接:
類別 網址
Blog http://www.tkk7.com/eamoi/
MSN-Space http://spaces.msn.com/members/eamoi/
OpenDoc版權說明:
本文檔版權歸原作者所有。
在免費、且無任何附加條件的前提下,可在網絡媒體中自由傳播。
如需部分或者全文引用,請事先征求作者意見。
如果本文對您有些許幫助,表達謝意的最好方式,是將您發現的問題和文檔改進意見及時反饋給作者。當然,倘若有時間和能力,能為技術群體無償貢獻自己的所學為最好的回饋。
序... 5
第一部分 Liferay Portal 架構解析... 6
第一章 Liferay Portal. 6
第一節 Portal規范... 6
1.1.1 JSR168. 6
1.1.2 WSRP. 6
第二節 什么是Portal7
1.2.1 Portal 服務器... 7
1.2.2 Portlet容器... 7
第三節 什么是Portlet8
1.3.1 Portlet8
1.3.2 Portlet與Servlet的關系... 8
1.3.3 Portlet的生命周期... 9
第四節 Liferay Portal工作原理... 9
1.4.1 Portlet 樣式以及窗口狀態... 10
1.4.2 Portal頁面... 11
第二章Liferay Portal的使用... 13
第一節 Liferay Portal安裝... 13
第二節 Liferay Portal的用戶策略... 14
2.2.1 定義用戶... 14
2.2.2 添加用戶... 15
2.2.3 修改用戶... 15
2.2.4 定義用戶組... 18
2.2.5 新增、重命名用戶組... 19
2.2.6 修改用戶組... 19
2.2.7 定義角色... 21
2.2.8 新增、重命名角色... 21
2.2.9 修改用戶組角色... 21
2.2.10 定義Portlet的角色... 22
第三節 Liferay Portal內容和布局... 24
2.3.1 什么是布局... 24
2.3.2 什么是內容... 26
2.3.3 內容布局與Portlet的關系... 27
2.3.4 選擇內容和布局... 28
第四節 Liferay Portal的桌面... 28
2.4.1 什么是桌面... 28
2.4.2 定義個性化的桌面... 29
第五節 Liferay Portal的品質... 29
2.5.1 什么是品質... 30
2.5.2 品質和Portlet、Portal的關系... 30
2.5.3 定義個性化的品質... 30
第六節 Liferay Portal的部署描述文件... 31
2.6.1 web.xml31
2.6.2 portlet.xml32
2.6.3 liferay-Portlet.xml33
2.6.4 liferay-display.xml34
2.6.5 liferay-layout-templates.xml35
2.6.7 liferay-look-and-feel。xml35
第二部分 Liferay Portal 二次開發... 36
第三章開發自己的Portlet. 36
第一節 重要的基類:GenericPortlet36
第二節 Portlet標簽... 37
3.2.1 defineObjects標簽... 37
3.2.2 renderURL標簽... 37
3.2.3 actionURL標簽... 38
3.2.4 param標簽... 38
3.2.5 namespace標簽... 38
第三節 Portal的對象... 38
3.3.1 Request對象... 39
3.3.2 Response對象... 41
3.3.3 PortletConfig對象... 41
3.3.4 Session對象... 41
3.3.5 Preference對象... 43
第四節 編寫自己的Portlet類... 44
3.4.1 開發環境... 44
3.4.2 準備工作... 44
3.4.3 HelloWorldPortlet46
3.4.4 HelloJSPPortlet47
第五節 修改Web部署描述文件... 48
第六節 創建Liferay Portal部署描述文件... 49
第三部分 Liferay Portal部署... 54
第四章部署自己的Portlet. 54
第一節 手動部署... 54
第二節 Ant自動部署... 55
第三節 加入Liferay Portal自有列表... 55
第四節 普通Java Web應用轉化為Portlet應用... 56
第四部分附錄... 58
第五章相關資源... 58
第一節資源網站... 58
第二節 示例... 58
第六章參考資料... 59
后序
第一部分 Liferay Portal 架構解析
本部分主要內容
Portal 服務器 Portal 容器 Portlet
第一章 Liferay Portal
作為一個開源Portal產品,Liferay Portal提供對多個獨立系統的內容集成,幫助多個組織實現更有效的合作。與其他商業的Portal產品相比,Liferay 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 也有一些不同
@ 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 來處理。
第四節 Liferay Portal工作原理
Portal系統根據需要由一個或者多個Portal頁面組成,每個Portal頁面包含零個或者多個的Portlet。每個Portlet呈現自己的信息內容,以此實現內容聚合。通過定義每個Portlet的可用權限,實現個性化的桌面信息定制。
1.4.1 Portlet 樣式以及窗口狀態
JCP組織提出的JSR168規范定義了Portlet的實現標準。每個Portlet對外表現為一個小窗口,有自己的默認樣式和窗口狀態。如上圖,Portlet有自己的標題,瀏覽狀態下支持編輯、關閉、上移、下移、最大化、最小化功能,編輯狀態下支持返回和關閉功能。從各種數據來源提取的信息以Portlet內容的形式呈現在Portal中。
Portlet樣式指出 Portlet正處于什么模式,Portlet通常會根據所處的模式而執行不同的工作并產生不同的內容。
Portlet模式讓 Portlet決定它該顯示什么內容和執行什么動作。調用一個 Portlet的時候,Portlet 容器會提供一個 Portlet模式給那個 Portlet。當在處理一個請求動作時,Portlet 的模式是可以用程序來改變的。
JSR168規范定義了三個Portlet模式: 瀏覽、編輯和幫助,Liferay Portal支持其中的全部三個模式。同時Portal是可以根據使用者的角色,來決定是要提供(顯示)哪幾個 Portlet 模式給使用者操作。
例如,匿名使用者可以操作瀏覽和幫助等 Portlet 模式的內容, 而只有授權過的使用者可以操作編輯這個 Portlet 模式所提供的內容或動作。
在瀏覽這個Portlet模式里,所被期望要提供的功能是產生標記語言來表現此時 Portlet的狀態。 舉例來說, Portlet的 瀏覽 模式可以包含一個或多個畫面讓使用者可以瀏覽與互動, 或是一些不需要與使用者互動的靜態內容。
在編輯這個Portlet模式里, Portlet 需要提供內容和邏輯來讓使用者定制 Portlet 的行為。典型的說,編輯模式的 Portlet 會設定或更新 Portlet 的參數設定值。
在幫助這個模式里,Portlet應該提供有關這個 Portlet的幫助信息。這個幫助信息可以是有關這個 Portlet的簡單且條理清楚的視窗說明或是詳細的說明整個來龍去脈。所有的Portlet并不需要都提供幫助這個模式。
一個 Portlet可以根據窗口狀態來決定在一個頁面里該占多少空間。當調用一個 Portlet時, Portlet容器 需要告訴該 Portlet目前的窗口狀態。 此時 Portlet可以根據窗口狀態來決定它該對多少信息作處理。在處理請求的過程中, Portlet可以通過程序的方式來改變窗口狀態。
1.4.2 Portal頁面
每個Portal頁面包含零個或者多個Portlet小窗口,構成一個完整的信息呈現頁面。Portal在啟動之后根據Portlet配置文件等信息,給Portlet的標題等屬性賦值,賦予Portlet編輯、關閉等各種控制按鈕,使Portlet成為一個標準的Portlet窗口。Portlet合并這些Portlet窗口,組成一個完整的文檔,即Portal頁面。每個Portlet都處于相應的布局當中,呈現事先定義的內容,表現Portal公共的品質。而且Portlet可以在不同的布局之間切換。Portlet響應客戶端的請求,并將請求提交到相應的URL進行邏輯處理。
Portlet開發完畢之后,部署到Portal服務器,由Portal服務器負責組織、權限控制和呈現。Portal頁面創建過程如下:
Portlet 在 Portlet容器內執行,Portlet容器接收 Portlet產生的內容。通常 Portlet容器將這些內容提交給 Portlet服務器,Portlet服務器依照這些內容建立Portal頁面,然后將它傳給客戶端呈現。具體流程如下圖:
Portal頁面的請求過程如下:
使用者經由客戶端設備(例如瀏覽器)存取 Portal,Portal 根據接收到的請求決定哪些 Portlet 需要被執行以滿足需求。Portal 通過Portlet容器呼叫 Portlet,然后由 Portlet產生的片段建立Portal頁面,再傳回客戶端呈現給使用者。具體流程如下圖:
第二章Liferay Portal的使用
Liferay Portal分為Professional 和 Enterprise兩個版本。
Liferay Portal支持多個應用服務器和Servlet容器。Liferay Portal Ent版本需要一個健壯的J2EE服務器,而Pro版本只要一個普通的Servlet服務器就可以運行。如果需要運行EJB,建議使用Pro版本。兩個版本的源碼和應用接口都是一樣的。
默認的,Pro版本分別集成Tomcat / Jetty / Resin作為Web服務器,采用Struts作為Web框架,實現輕量級的系統架構。Enterprise集成JBoss作為Web服務器,采用Spring作為Web框架,兼顧EJB。
Liferay Portal默認集成HSQL數據庫,來持久化保存用戶自定義的數據。通過修改集成在Liferay Portal的Tomcat的部署描述文件,用戶可以更改數據源。Liferay Portal官方網站提供了數據庫表的生成腳本。
下面以Pro版本(Tomcat服務器)為例,講述Liferay Portal的用戶策略、內容布局、桌面和品質。
第一節 Liferay Portal安裝
由于Liferay Portal Pro版本集成了Tomcat服務器V5,所以只要把應用包下載解壓就可以直接運行。
1、從 http://www.iferay.om/web/guest/downloads/portal_pro 下載Pro版本zip包, 解壓到目錄{PORTAL_HOME}, 目錄結構相對普通的Tomcat增加了Liferay文件夾。Liferay是默認的Web應用。
2、正確安裝JDK1.4或者JDK1.5,并在環境變量里面正確配置JAVA_HOME變量。
3、從命令行啟動{PORTAL_HOME}/bin/startup.bat,啟動Liferay Portal。
4、在瀏覽器地址欄輸入http://localhost ,訪問Portal首頁。
5、用Login為test@liferay.com密碼為test的用戶登錄Portal系統,得到的是一個Demo的首頁。
如果啟動呈現異常,請查看Tomcat控制臺查找原因。
Liferay Portal啟動之后,HSQL數據庫自動啟動。
登錄系統后,點擊右上角“My Account”鏈接,在“Display”選項卡中將Language改為“Chinese(China)”,以便中文化Portal界面。
第二節 Liferay Portal的用戶策略
Liferay Portal通過定義嚴謹的用戶策略、靈活的可個性化定制的內容和布局以及豐富可定制的品質策略,實現靈活的可定制的產品理念。
Liferay Portal采用用戶-用戶組-角色-Portlet的關聯方式來實現用戶權限的管理。用戶錄屬于用戶組(也可以單獨存在),該用戶組具有某種(多種)角色,角色分配給用戶組,也可以直接分配給用戶。而操作某個Portlet 需要具有其指定的角色。下面通過實例操作,來了解和體驗一下Liferay Portal的用戶管理策略。
2.2.1 定義用戶
Liferay Portal的用戶管理在系統管理的Portlet中。缺省只有系統管理員才能使用。登錄Portal后,可以在默認的桌面上找到“系統管理”Portlet。如果沒有,從頁面底部的選擇框中選擇“系統管理”添加上。也可以通過右上角“CMS”桌面的“內容和布局”頁面找到管理入口。
從“系統管理”Portlet中選擇“用戶”項,進入用戶管理界面。
2.2.2 添加用戶
圖2.2.1-2所示頁面右邊為“新增用戶”列,填入你所要增加的用戶名稱,姓氏,用戶標識(可自動生成),郵件地址,密碼(可自動生成)等。可以修改該用戶所具有的用戶組和角色信息(也可創建之后再修改)。用戶標識必須是系統唯一的,所以請確保你所輸入的用戶標識與已有的不沖突。
點擊“新增用戶”,我們成功增加一位用戶標示為“educhina”的用戶,如圖2.2.1-2所示。左側列表中新增一項“educhina eamoi”。然后我們就可修改這位用戶的用戶組,角色,個人檔案等信息了。
2.2.3 修改用戶
選擇用戶列表中一項,然后點擊底部的三個編輯按鈕,就可以分別編輯該用戶的用戶組、角色、檔案等信息了。
此處我們選擇用戶“educhina eamoi”,然后選擇“編輯檔案”,出現檔案編輯頁面。如圖2.2.3-3所示。填寫你想要修改的信息,點擊對應的“更新”按鈕即可完成修改。需要注意的是整個檔案頁面分成幾個部分,需要分別修改更新。
選擇用戶“educhina eamoi”,然后選擇“編輯角色”,進入角色編輯頁面,如圖2.2.3-4所示。左側列表框為當前該用戶所具有的角色,右側列表為所有可用的角色。要賦給用戶新角色,則從右側選擇一項或多項,通過中間的轉移按鈕,從右側添加至左側。要刪減用戶角色,則從左側移至