liferay6介紹學(xué)習(xí).doc_第1頁
liferay6介紹學(xué)習(xí).doc_第2頁
liferay6介紹學(xué)習(xí).doc_第3頁
liferay6介紹學(xué)習(xí).doc_第4頁
liferay6介紹學(xué)習(xí).doc_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Liferay學(xué)習(xí)portal 規(guī)范隨著Portal的興起,有眾多的廠商開始涉足Portal產(chǎn)品開發(fā),并構(gòu)建自己的Portal組件和基于他的產(chǎn)品,比如IBM、ORACLE、Microsoft、apache、SAP等,但是各個產(chǎn)品之間互不兼容,給開發(fā)者和各個廠商帶來了諸多不便。JSR168在這種情況下,JSR168規(guī)范應(yīng)運(yùn)而生,2003年10月7日,JCP組織發(fā)布了JSR168(Java Specification Request),Portlet Specification V1.0,用來提供不同的Portal和Portlet之間的互通性。只要開發(fā)的Portlet遵循JSR168,就可以在所有遵循JSR168的Portal上部署運(yùn)行。JSR168中定義了Portal的實(shí)現(xiàn)規(guī)范和接口,并對理想的Portlet進(jìn)行了詳細(xì)規(guī)劃和描述。WSRPwsrp是OASIS Web Service For Remote Rortlet的縮寫。WSRP是Web Service的一種新的商業(yè)應(yīng)用,一種新的標(biāo)準(zhǔn),主要用來簡化portal對于各種資源或程序整合的復(fù)雜度,可以避免編程帶來的整合麻煩和問題。而且Portal管理員可以從海量的WSRP服務(wù)中選擇需要的功能用以整合到目前所有的Portal中。它有三種角色:、 生產(chǎn)者 = 提供Portlet、 消費(fèi)者 = 使用Portlet、 終端用戶 = 最終用戶它的特點(diǎn)在于生產(chǎn)者將消費(fèi)者所需要的信息通過WSRP 返回給消費(fèi)者,這些信息是相對標(biāo)記片斷,例如HTML、XHTML 等,可以直接嵌入用戶的頁面中,而不用像Web Service一樣開發(fā)用戶端接口。實(shí)現(xiàn)這個規(guī)范,Portal 可以跟各式各樣的數(shù)據(jù)源打交道,徹底終結(jié)信息孤島的窘境。什么是PortalPortal服務(wù)器Portal 服務(wù)器是容納Portlet 容器,支持Portlet 呈現(xiàn)的普通或者特殊Web 服務(wù)器。Portal 服務(wù)器通常會提供個性化設(shè)置、單點(diǎn)登錄、內(nèi)容聚合、信息發(fā)布、權(quán)限管理等功能,支持各種信息數(shù)據(jù)來源,并將這些數(shù)據(jù)信息放在網(wǎng)頁中組合而成,提供個性化的內(nèi)容定制,不同權(quán)限的瀏覽者能夠?yàn)g覽不同的信息內(nèi)容。通常,Portal 提供以下功能:單點(diǎn)登錄:Portal 通常采用ACL、SSL、LDAP 等業(yè)界標(biāo)準(zhǔn)的安全技術(shù),提供對所有現(xiàn)有應(yīng)用系統(tǒng)的安全集成,只需在Portal 的唯一入口上登錄一次,就可以訪問所有應(yīng)用系統(tǒng)和數(shù)據(jù)。對于安全性要求較高的應(yīng)用系統(tǒng),如電子商務(wù)平臺、交易系統(tǒng)等,通過擴(kuò)展接口傳遞用戶身份信息,如數(shù)字證書信息、數(shù)字簽名信息等,進(jìn)行二次身份認(rèn)證,保證單點(diǎn)登陸的安全性。權(quán)限控制:系統(tǒng)采用LDAP 對用戶資源進(jìn)行統(tǒng)一的管理,同時提供二次開發(fā)接口,可以與其他應(yīng)用系統(tǒng)的用戶管理模塊對接,并能隨相關(guān)業(yè)務(wù)系統(tǒng)實(shí)時更新訪問權(quán)限。通過完善的授權(quán)機(jī)制及存取控制,用戶訪問權(quán)限控制到字段級別,確保用戶只能訪問具有權(quán)限的應(yīng)用系統(tǒng)及相關(guān)信息。內(nèi)容管理: 實(shí)現(xiàn)應(yīng)用系統(tǒng)之間實(shí)時交換信息。采用多種緩存機(jī)制,保證內(nèi)容交換的性能和準(zhǔn)確性。采用基于XML 的Rich Site Summary (RSS)標(biāo)準(zhǔn),迅速在各應(yīng)用系統(tǒng)之間傳播最新變化。信息發(fā)布: 實(shí)現(xiàn)信息門戶內(nèi)容的動態(tài)維護(hù)。動態(tài)網(wǎng)站系統(tǒng)可與OA 協(xié)同辦公系統(tǒng)、知識管理系統(tǒng)等集成,網(wǎng)站信息須經(jīng)OA 系統(tǒng)的審批流程流轉(zhuǎn)通過后或知識管理平臺設(shè)置具有外部共享權(quán)限后才可正式發(fā)布,真正實(shí)現(xiàn)內(nèi)外信息發(fā)布的同步。文件管理: 系統(tǒng)實(shí)現(xiàn)無縫集成多種數(shù)據(jù)源,包括:數(shù)據(jù)庫、文檔(Office 文檔、PDF、AutoCAD、甚至ZIP 文檔)、Web 網(wǎng)頁、FTP 站點(diǎn)等,并對數(shù)據(jù)按業(yè)務(wù)要求和職務(wù)特點(diǎn)加以分析整理,通過統(tǒng)一Web 界面主動推送(Push)至用戶的門戶桌面,幫助用戶做出及時、正確的決策。portlet容器Portlet 容器提供Portlet 執(zhí)行的環(huán)境,包含很多Portlet 并管理它們的生命周期,保存Portlet 的定制信息。一個Portal 容器接收到來自Portal 的請求后,接著將這個請求傳遞給存在Portal 容器的Portlet 執(zhí)行。Portlet 容器沒有義務(wù)去組合Portlet 產(chǎn)生的信息內(nèi)容,這個工作必須由Portal 來處理。Portal 和 Portal 容器可以放在一起視為同一個系統(tǒng)的組件,或者分開成為兩個獨(dú)立的組件。Portlet 容器是普通Web Servlet 容器的擴(kuò)展,所以一個Portlet 容器可以構(gòu)建于一個已經(jīng)存在的Servlet 容器或者可能實(shí)現(xiàn)全部Web Servlet 容器的全部功能。無論P(yáng)ortlet容器怎么實(shí)現(xiàn),它的運(yùn)行環(huán)境總是假定它支持Servlet2.3 規(guī)范。通常,Portlet 容器擴(kuò)展自普通的Servlet 容器。什么是PortletPortlet 是Portal 中最重要的組件,負(fù)責(zé)在Portal 中呈現(xiàn)信息內(nèi)容,有相應(yīng)的生命周期。通過自定義Portlet,用戶很容易定義個性化的Portal 頁面。Portlet 由Portlet 容器負(fù)責(zé)管理、處理請求并返回動態(tài)頁面,可以作為Portal 的可即插即用的界面組件。Portlet一個Portlet是以Java技術(shù)為技術(shù)的Web組件,由Portlet容器所管理,專門處理客戶的信息請求以及產(chǎn)生各種動態(tài)的信息內(nèi)容。Portlet 為可插式的客戶界面組件,提供呈現(xiàn)層成為一個信息系統(tǒng)。這些由Portlet產(chǎn)生的內(nèi)容也被稱為片段,而片段是具有一些規(guī)則的標(biāo)記( HTML、XHTML、WML ),而且可以和其他的片段組合而成一個復(fù)雜的文件。一個或多個 Portlet 的內(nèi)容聚合而成為一個 Portal 網(wǎng)頁。而 Portlet 的生命周期是被 Portlet 容器所管理控制的??蛻舳撕蚉ortlet的互動是由Portal通過典型的請求/響應(yīng)方式實(shí)現(xiàn),正常來說,客戶會和Portlet所產(chǎn)生的內(nèi)容互動,舉例來說,根據(jù)下一步的連接或者是確認(rèn)送出的表單,結(jié)果Portal將會接收到Portlet的動作,將這個處理狀況轉(zhuǎn)向到目標(biāo)Portlet。這些Portlet 內(nèi)容的產(chǎn)生可能會因?yàn)椴煌氖褂谜叨胁煌淖兓?,完全是根?jù)客戶對于這個Portlet的設(shè)置。Portlet 與Servlet 的關(guān)系Portlet 被定義成為一個新的組件,具有新的明確的界面與行為。為了盡可能與現(xiàn)有的Servlet 結(jié)合達(dá)到重復(fù)使用的目的,Portlet 的規(guī)范利用了 Servlet 的規(guī)范,許多觀念都很相似的,結(jié)合 Portlet、Servlet 及 Jsp 在同一個網(wǎng)站系統(tǒng)中,我們稱為Portlet 應(yīng)用 。在同一個 Portlet 應(yīng)用 中,他們將分享同一個類加載器(ClassLoader),上下文(Context)及 Session。、 Portlet 和 Servlet 的相似之處 Portlet 也是 Java 技術(shù)的 web 組件 Portlet 也是有特定的 container 在管理 Portlet 可以動態(tài)產(chǎn)生各種內(nèi)容 Portlet 的生命周期由 container 所管理 Portlet 和客戶端的互動是通過 request/response 的機(jī)制、 Portlet 和 Servlet 也有一些不同 Portlet 只產(chǎn)生 markup 信息片段,不是完整的網(wǎng)頁文件。而 Portal 會將所有的Portlet markup 信息片段放到一個完整的 Portal 網(wǎng)頁。 Portlet 不會和 URL 有直接的關(guān)系客戶端必須通過 portal 系統(tǒng)才能和 Portlet 互動 Portlet 有一些定義好的 request 處理,action request 以及 render request。 Portlet 默認(rèn)定義 Portlet modes 及窗口狀態(tài)可以指出在網(wǎng)頁中該 Portlet 的哪個功能正在執(zhí)行及現(xiàn)在的 狀態(tài)。 Portlet 可以在同一個 portal 網(wǎng)頁之中存在多個。、 Portlet 有一些附加的功能是 Servlet 所沒有的 Portlet 能夠存取及儲存永久配置文件及定制資料。 Portlet 可以存取使用者數(shù)據(jù) Portlet 具有 URL 的重寫功能在文件中去動態(tài)建立連結(jié),允許 portal server 不用去知道如何在網(wǎng)頁的片 段之中建立連結(jié)及動作。 Portlet 可以儲存臨時性的數(shù)據(jù)在 Portlet session 之中,擁有兩個不同的范圍:application-wide scope 及 Portlet private scope 。、 Portlet 不具有一些功能, 但是 Servlet 卻有提供 Servlet 具有設(shè)置輸出的文字編碼( character set encoding)方式 Servlet 可以設(shè)置 HTTP 輸出的 header Servlet 才能夠接收客戶對于 portal 發(fā)出的 URL 請求Portlet 的生命周期一個Portlet有著良好的生命周期管理,定義了怎樣裝載,實(shí)例化和初始化,怎樣響應(yīng)來自客戶端的請求及怎樣送出服務(wù)。這個Portlet生命周期由Portlet接口的init,processAction,render和destroy方法來表達(dá)。載入和實(shí)例化:Portlet 容器負(fù)責(zé)載入和實(shí)例化Portlet。當(dāng)Portlet 容器運(yùn)行Portlet 應(yīng)用或者延遲到Portlet 需要服務(wù)使用者的請求時,Portlet 就會被載入并實(shí)例化。載入Portlet 類后,Portlet 類隨即被實(shí)例化。初始化:Portlet 類實(shí)例化后,Portlet 容器還需要初始化Portlet。以調(diào)用Portlet 去響應(yīng)客戶端的請求。Portlet 容器呼叫Portlet 接口中的init 方法初始化Portlet。擴(kuò)展自PortletConfig的類可以取出定義在部署描述文件中的初始化參數(shù),以及Resource Bundle。初始化異常:在 Portlet 初始化期間,Portlet 可能會丟出 UnavailableException 或PortletException 異常。此時,Portlet 容器不能把 Portlet 置入已啟動的服務(wù),并且 Portlet容器必需釋放這個 Portlet。 destory 方法不能被呼叫,因?yàn)槌跏蓟徽J(rèn)為執(zhí)行失敗。發(fā)生 失敗后,Portlet 容器會嘗試著重新實(shí)例化及初始化 Portlet。這個異常處理的規(guī)則是:由一個UnavailableException 指定一個不能執(zhí)行的最小時間,當(dāng)此異常發(fā)生時,Portlet 容器必需等到指定時間過去后才產(chǎn)生并且初始化一個新的 Portlet。在初始化過程中所丟出的 Runtime Exception 異常,被當(dāng)作 PortletException 來處理。Portlet標(biāo)簽跟Servlet 一樣,Portlet 也自定義了很多靈活的標(biāo)簽。通過這些標(biāo)簽,可以調(diào)用Portlet內(nèi)部的參數(shù)比如renderResponse、renderRequest、PortletConfig 等,在JSP 中跟Portlet 通信。當(dāng)然,在使用之前,除了要在web.xml 中聲明標(biāo)簽庫外,還要在JSP 的頭部聲明標(biāo)簽庫調(diào)用:Xml代碼 1. defineObjects 標(biāo)簽在使用Portlet 典型標(biāo)簽之前,要見聲明,這樣才可以使用其他的標(biāo)簽。defineObjects 中間不允許定義任何屬性和包含任何內(nèi)容。renderURL 標(biāo)簽屬性值類型對應(yīng)值windowStateStringminimizednormalmaximizedportletModeStringviewedithelpvarStringsecureStringtruefalseXml代碼 1. 2. 3. 4. 創(chuàng)建一個當(dāng)前RenderURL,當(dāng)訪問它時將使Portlet窗口變?yōu)樽畲蠡癄顟B(tài),模式變?yōu)闉g覽。子元素會在生成的RenderURL中增加number、page兩個參數(shù)和值。actionURL 標(biāo)簽屬性值類型對應(yīng)值windowStateStringminimizednormalmaximizedportletModeStringviewedithelpvarStringsecureStringtruefalseXml代碼 1. 2. 3. 創(chuàng)建一個當(dāng)前ActionURL,當(dāng)訪問它時將使Portlet窗口變?yōu)檎顟B(tài),模式變?yōu)榫庉?。子元素會在生成的ActionURL中增加action參數(shù)和值。renderURL和actionURL兩個標(biāo)簽在諸如生成form表單的action等方面特別有用。param 標(biāo)簽屬性值類型nameString用在renderURL和actionURL標(biāo)簽內(nèi)部,用來在生成的URL中增加參數(shù)和值。param標(biāo)簽不運(yùn)行body內(nèi)容存在。namespace標(biāo)簽為目前的Portlet產(chǎn)生一個唯一的Value,防止與其他Portlet或者Portal上面的Value沖突。上述標(biāo)簽的具體屬性及其約束, 請參閱$CATALINA_HOME/liferay/WEB-INF/tld/liferay-portlet.tldPortal 的對象JSR168 給Portal 定義了幾個特別的對象,用來操作Portal 特有的信息。這些對象跟Servlet的對象有點(diǎn)類似, 又有點(diǎn)不同。這些對象都封裝在$CATALINA_HOME/common/lib/ext/portlet.jar 包中,具體支持實(shí)現(xiàn)要視Portal 服務(wù)器而定。Request 對象Portlet 中的Request 與Servlet 的Request 一樣接受客戶端發(fā)送的請求,但是與Servlet不同,Portlet 的Request 分為Action Request 及Render Request 兩種類型,因此Portlet 接口中定義了兩種方法用來處理不同的Request。分別是processAction(ActionRequest request,ActionResponse response) 和render(RenderRequest request,RenderResponse response),分別用以處理Action Request 和Render Request。某種意義上來講,render 方法類似Servlet 中的service 方法,doView,doEdit,doHelp 方法又類似doGet,doPost 方法。、RenderRequest和ActionRequestPortletRequest分為RenderRequest和ActionRequest兩種,分別由renderURL和actionURL來觸發(fā)。renderURL是actionURL的一種優(yōu)化。Portlet的開發(fā)過程中盡量使用renderURL而避免actionURL。actionURL適用于有確實(shí)的Action(行為)的情況下。比如說,表單form提交后Persistent狀態(tài)的改變、session的改變、perference的修改等等。renderURL通常用來處理Portlet的導(dǎo)航。舉個例子:使用actionURL:Java代碼 1. % 2. PortletURLpu=renderResponse.createActionURL(); 3. pu.setParameter(ACTION,LOGIN); 4. formname=usrformmethod=postaction= 5. %PortletURL pu = renderResponse.createActionURL();pu.setParameter(ACTION,LOGIN);form name=usrform method=post action=%說明:表單提交最好使用Post方法而不是Get方法,因?yàn)槟承㏄ortal服務(wù)器可能會將內(nèi)部狀態(tài)編碼到URL的Query字符串中。使用renderURL: Java代碼 1. 5. ahref=下一頁a href=下一頁、renderURL和actionURL的處理方式當(dāng)客戶端請求是由一個renderURL觸發(fā)的時候,Portal服務(wù)器會調(diào)用該P(yáng)ortal頁面所有Portlet的render方法。而當(dāng)客戶端請求是由一個actionURL觸發(fā)的時候,Portal服務(wù)器會先按用該頁面所有Portlet的processAction方法再調(diào)用render方法。所以,要明確自己到底使用那種URL來出發(fā)客戶端請求。、RenderRequest和ActionRequest的parameter參數(shù)作用范圍當(dāng)客戶端請求由一個actionRequest觸發(fā)時,所有parameter參數(shù)的取得都必須在processAction方法中進(jìn)行。比如:Java代碼 1. publicvoidprocessAction(ActionRequestreq,ActionResponseres) 2. Stringstr=req.getParameter(ACTION); 3. /response.setRenderParameter(ACTION,action); 4. 5. publicvoiddoView(ActionRequestreq,ActionResponseres) 6. Stringstr=req.getParameter(ACTION); 7. public void processAction(ActionRequest req,ActionResponse res)String str = req.getParameter(ACTION);/response.setRenderParameter(ACTION,action);public void doView(ActionRequest req,ActionResponse res)String str = req.getParameter(ACTION);如上processAction方法中,getParameter方法將能成功得到表單中的參數(shù)ACTION所對應(yīng)的值,因?yàn)槲覀冎溃?dāng)目標(biāo)Portlet的processAction方法運(yùn)行完后,Portlet Container將調(diào)用Portal頁面中所有Portlet的render方法但是實(shí)際上doView方法中使用getParameter不會得到任何值但是如果把processAction方法中注釋了的一行解除注釋的話,你就可以在doView方法中的得到參數(shù)ACTION對應(yīng)的值 這說明action request的參數(shù),render方法中不可以直接取到必須使用了setRenderParameter方法,再次傳遞一次Response 對象與Request 對象一樣,Response 對象也有兩種:RenderResponse 和ActionResponse,分別用來封裝對應(yīng)的RenderRequest 和ActionRequest 的返回信息,比如重定向、窗口狀態(tài)、Portlet 模式等。他們兩者的父類PortletResponse 擁有serPorperty 和getPorperty 兩個方法,用來遞信息給Portal 容器。ActionResponse 主要用來處理以下功能:a) 重定向b) 改變窗口狀態(tài)、Portlet 模式c) 傳遞parameter 參數(shù)到RenderRequest 中去RenderResponse 主要用來提供以下功能:d) 設(shè)置ContentTypee) 得到OutputStream 和Writer 對象,用來輸出頁面內(nèi)容f) Buffering 緩沖g) 設(shè)定Portlet 的標(biāo)題,但是必須在Portlet 輸出前調(diào)用,否則將被忽略PortletConfig 對象和ServletConfig 對象類似, PortletConfig 對象提供對Portlet 初始化信息以及PortletContext 對象存取的方法。和ServletConfig 對象不同的是,PortletConfig 對象提供對Portlet 的標(biāo)題等資源的I18N支持,可以通過設(shè)定不同的Resource Bundle 文件以提供多種語言支持。Session 對象由于容器不同,Portal 的Session 對象與Servlet 的Session 對象略有不同。由于Portlet 處于Portal 服務(wù)器的緣故,Portlet 的Session 分為Application Scope 和PortletScope。兩者的區(qū)別在于:、 Application Scope 范圍的Session 中保存的對象,對于同一個Portlet 應(yīng)用范圍內(nèi)的所有Portlet 都是可用的。、 Portlet Scope 范圍的Session 中保存的對象,只對本Portlet 可用,其他Portlet 即使在同一個應(yīng)用中,也不可用。但是對于Portlet 應(yīng)用來說,可以通過HttpSession 來訪問。畢竟Portlet 應(yīng)用也是Web應(yīng)用。在使用Session 對象的時候,最好能明確指出使用的是那個Scope 范圍的Session。比如:Xml代碼 1. 2. 3. 4. 5. 6. 這個JSP創(chuàng)建了兩個ActionURL,分別產(chǎn)生了兩種PortletSession對象。Java代碼 1. PortletSessionps=req.getPortletSession(); 2. if(ps.getAttribute(PortletSession.AS,PortletSession.APPLICATION_SCOPE)!=null) 3. app=ps.getAttribute(PortletSession.AS,PortletSession.APPLICATION_SCOPE). 4. toString(); 5. 6. if(ps.getAttribute(PortletSession.PS,PortletSession.PORTLET_SCOPE)!=null) 7. portlet=ps.getAttribute(PortletSession.PS,PortletSession.PORTLET_SCOPE). 8. toString(); 9. PortletSession ps = req.getPortletSession();if(ps.getAttribute(PortletSession.AS,PortletSession.APPLICATION_SCOPE)!=null)app=ps.getAttribute(PortletSession.AS,PortletSession.APPLICATION_SCOPE).toString();if(ps.getAttribute(PortletSession.PS,PortletSession.PORTLET_SCOPE)!=null)portlet=ps.getAttribute(PortletSession.PS,PortletSession.PORTLET_SCOPE).toString();以上代碼根據(jù)需要取得不同Scope范圍的Session對象值。同一個應(yīng)用下,可以直接通過ServletSession取得Java代碼 1. PortletSessi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論