第三節 ?什么是Portlet
Portlet是Portal中最重要的組件,負責在Portal中呈現信息內容,有相應的生命周期。通過自定義Portlet,用戶很容易定義個性化的Portal頁面。Portlet由Portlet容器負責管理、處理請求并返回動態頁面,可以作為Portal的可即插即用的界面組件。
1.3.1? P ortlet
一個Portlet是以Java技術為技術的Web組件,由Portlet容器所管理,專門處理客戶的信息請求以及產生各種動態的信息內容。Portlet 為可插式的客戶界面組件,提供呈現層成為一個信息系統。
這些由Portlet產生的內容也被稱為片段,而片段是具有一些規則的標記( HTML、XHTML、WML ),而且可以和其他的片段組合而成一個復雜的文件。一個或多個 Portlet 的內容聚合而成為一個 Portal 網頁。而 Portlet 的生命周期是被 Portlet 容器所管理控制的。
客戶端和Portlet的互動是由Portal通過典型的請求/響應方式實現,正常來說,客戶會和Portlet所產生的內容互動,舉例來說,根據下一步的連接或者是確認送出的表單,結果 Portal將會接收到Portlet的動作,將這個處理狀況轉向到目標Portlet。這些Portlet 內容的產生可能會因為不同的使用者而有不同的變化,完全是根據客戶對于這個Portlet的設置。
1.3.2 ? P ortlet與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? P ortlet的生命周期
一個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的可用權限,實現個性化的桌面信息定制。