Menghe

导航

PORTAL 之 JSR#168 portlet 說明

ch1 序言

許多大型企業的網站
漸漸採用了 portal server 作為開發的基礎
至於什麼是 portal 呢, 中文翻譯是 "入口網站"
有人可能想..
天殺的.. 入口網站不是就是像 yahoo, pchome, yam 等等
不過, 我們現在討論的 portal server
不是那麼地簡單,
基本上 yahoo, pchome, yam 那些只能稱為搜尋引擎的入口網站

如果你從來沒有用過 portal server
或是似懂非懂..
大家可以連結到
MyNetscape ( http://www.mynetscape.com/ )
MyYahoo ( http://my.yahoo.com/ )
去註冊一個帳號
因為 MyNetscape 的樣式比較好看
所以我接下來就以 MyNetscape 為介紹的範例

如果你第一次接觸到 portal
你會驚訝的發現...
哇.. 為何一個網站裡面
充滿了這麼多小視窗
我們稱這些小視窗叫做 "portlet"
而且每個小視窗都存在著獨立的訊息與內容
可以放到最大化, 縮小, 還原, 關閉等等
當你登入之後
可以選擇及調整自己 portlet 的配置
也可以設定自己喜好的風格與樣式
更可以設定每個 portlet 的資料設定
這種以客戶為尊的系統,
就是我們將要介紹的 portal

ch2 Portal 的組成

Portal 的組成可以分為三部份
(1) Portal Server
(2) Portlet Container
(3) Portlet

1) Portal Server 的定義是

一個Portal(入口網站)就是指一個 Web-based 的系統,
通常都會提供個人化設定、單一登入、
以及由各種不同來源或不同網站取得各式各樣的資訊,
並且將這些資訊放在網頁之中組合而成的呈現平台,
入口網站會有精巧的個人化設定去提供客制化的網頁,
當不同等級的使用者來瀏覽該頁面將獲得不同的資訊內容。


2) Portlet Container 的定義是

portlet container 是提供 portlets 執行的環境,
包含了許多 portlets 並且管理他們的生命週期,
他也會永續保存著 portlets 的喜好設定,
一個 portlet container 接收到來自 portal 的請求後,
接著將這個請求傳遞給存在 container 的 portlet 執行。
portlet container 將沒有義務
去組合 portlets 產生的資訊內容,
這個工作必須由 portal 來處理。
portal 和 portlet container 可以
放在一起視為同一個系統的元件,
或著分開成為兩個獨立的元件。


3) Portlet 的定義是

一個 Portlet 是以 Java 技術為基礎的 Web 元件,
由 Portlet Container 所管理,
專門處理客戶的 request 以及產生各種動態的資訊內容。
Portlets 為可插式 ( pluggable ) 的客戶介面元件,
提供呈現層成為一個資訊系統。
這些由 portlet 產生的內容也被稱為段落 (fragment),
而段落是具有一些規則的Markup( HTML、XHTML、WML ),
而且可以和其他的段落組合而成一個複雜的文件。
而 Portlet 中的內容正常來說是
與其他 Portlet 的內容聚合而成為一個 Portal 網頁。
而 Portlet 的生命週期是被Portlet Container所管理控制的。
客戶端和 portlets 的互動是由
portal 實作透過典型的 request/response 方式,
正常來說,客戶會和 portlets 所產生的內容互動,
舉例來說,根據下一步的連結或者是確認送出的表單,
結果 portal 將會接收到 portlet 的動作,
將這個處理狀況轉向到目標 portlet。
這些 portlet 內容的產生可能會
因為不同的使用者而有不同的變化,
完全是根據客戶對於這個 portlet 的設定值。

ch3 portlet 與 servlet 的關係

Portlet 和 Servlet 算是兄弟
有那麼一點點相似 卻又有那麼一點點不同
因為 Servlet 和 Portlet 不盡然相同,
所以研究小組決定將 portlets 成為一個新的元件,
因此定義了 portlets 一個新的並且明確的介面與行為。
為了盡可能與現有的 servlet 結合達到重複使用的目的,
portlet 的規格利用了 servlet 的規格,
許多觀念都會蠻相似的,
結合 portlets、servlets 及 jsp 在同一個網站系統中,
我們稱為 portlet application 。
在同一個 portlet application 中,
他們將分享同一個 classloader,context 及 session。

1) Portlet 和 Servlet 的相似之處
@ portlets 也是 Java 技術的 web 元件
@ portlets 也是有特定的 container 在管理
@ portlets 可以動態產生各種內容
@ portlets 的生命週期由 container 所管理
@ portlets 和客戶端的互動是透過 request/response 的機制

2) Portlet 和 Servlet 也有一些不同
@ portlets 只有產生 markup 資訊段落,不是完整的網頁文件。而 Portal 會將所有的 Portlet markup 資訊段落放到一個完整的 Portal 網頁。
@ portlets 不會和 URL 沒有直接的關係
@ 客戶端必須透過 portal 系統才能和 portlets 互動
@ portlets 有一些定義好的 request 處理,action request 以及 render request。
@ portlets 預先定義 portlet modes 及視窗狀態可以指出在網頁中該 portlet 的哪個功能正在執行及現在的狀態。
@ portlets 可以在同一個 portal 網頁之中存在多個。

3) Portlet 有一些附加的功能是 Servlet 所沒有的
@ Portlets 能夠存取及儲存永久設定檔及客制化資料。
@ portlets 可以存取使用者資料
@ portlets 具有 URL 的重寫功能在文件中去動態建立連結,允許 portal server 不用去知道如何在網頁的段落之中建立連結及動作。
@ portlets 可以儲存暫時性的資料在 portlet session 之中,擁有兩個不同的範圍 :
application-wide scope 及 portlet private scope 。

4) Portlet 不具有一些功能, 但是 Servlet 卻有提供
@ servlet 具有設定輸出的文字編碼( character set encoding)方式
@ servlet 可以設定 HTTP 輸出的 header
@ servlet 才能夠接收客戶對於 portal 發出的 URL 請求

ch4 RI - pluto 冥王星計劃

JSR 是由 JCP ( www.jcp.org )
這個 Java 組織所定義出來的規格
幾乎每個 JSR 都會產出 TCK* 及 RI**

*TCK ( Technology Compatibility Kit ) 相容性測試元件
*RI ( Reference Implementation ) 實作參考

2003/10/27 JSR#168 Portlet Spec 1.0 已經正式公佈
未來, 大家就可以開始根據這個規格書開發相容性的產品
而這個標準規格書的 RI
就是採用 Apache Jakarta Pluto 冥王星計劃
( http://jakarta.apache.org/pluto/ )
至於為何叫做冥王星,
我猜是 Sun 想要把光芒射到冥王星都會發光吧 :P

目前 pluto 尚未有正式的版本釋出
未來有興趣的人可以從 jakarta 網站下載
不過目前我由 CVS 取得版本
已經可以正常運作了
安裝的方法十分簡單..
只需要執行 %pluto%/bin/install 就可以安裝了
安裝過程會詢問你 tomcat 的目錄
假設你 tomcat 根目錄是 c:\tomcat4.1.27
你就打 c:\tomcat4.1.27 就可以了

接著 http://localhost:8080/pluto/portal
就可以看到很陽春的 portal 介面
至於操作模式與方法非常簡單
請多加操控就可以慢慢了解 portlet 的控制方法了

在 portlet spec 中定義的控制有分為
1) 基本的 Portlet Modes
VIEW - 你沒有做任何動作僅僅做內容顯示
EDIT - 編輯相關的設定
HELP - 尋求幫助

2) 基本的 Window States
NORMAL - 還原 portlet 視窗
MAXIMIZED - 最大化 portlet 視窗
MINMIZED - 最小化 portlet 視窗

其實, 這些動作都已經由 portal 所實作
portlet container 將接收與回應相關的動作
真正在程式開發上
並不會考慮到這些細節
除非你要做一個 portlet container
而開發上要考慮的是
什麼人能夠做什麼事情

例如說 尚未登入的人
應該只能夠 doView / doHelp
卻不能夠 doEdit 這種權限管控機制的開發

ch5 RI - pluto 冥王星計劃

每個通過認證的使用者
就可以使用相關的 portlet 外觀 ( Look&Feel )設定
而這些設定就是透過 css 來編輯
在沒有 portlet spec 之前
各家廠商都自行規定或由 ISV 各自完成
造成了許多 portlet 無法共用同一份 CSS 來實作
移植上將會有許多問題發生

因此 css 的定義對於具有
客制化功能的 portal 是相當重要的

0) Anchor
這個並沒有定義 :P

1) Fonts ( font )
portlet-font
portlet-font-dim

2) Message ( paragraph .. )
portlet-msg-status
portlet-msg-info
portlet-msg-error
portlet-msg-alert
portlet-msg-success

3) Sections ( table, div, span ... )
portlet-section-header
portlet-section-body
portlet-section-alternate
portlet-section-selected
portlet-section-subheader
portlet-section-footer
portlet-section-text

4) Forms ( form )
portlet-form-label
portlet-form-input-field
portlet-form-button
portlet-icon-label
portlet-dlg-icon-label
portlet-form-field-label
portlet-form-field

基本上, 你要了解什麼地方該用什麼 css
這些 css 名稱套用在你開發的 portlet 之中
你就可以移植到其他支援 jsr#168 的系統
不需要在花時間去更改成為他們的 Look&Feel

ch6 資訊段落 ( fragment markup ) 的限制

每個 portlet 輸出都是一個資訊段落
之前有提到, 這些 markup 有些限制

如果你是產出 HTML 格式的資訊段落
就*不可以*擁有以下這些 tag
base, body, iframe, frame, frameset, head, html, 及 title

如果產出是 XHTML 或 XHTML-basic 格式的資訊段落
就*不可以*擁有以下這些 tag
base, body, iframe, head, html 及 title

ch7 其他細節
最後, portlet 需要考慮的還有
security, caching, taglib 等等..

Portal 是連結後端 EAI 處理的資訊整合平台
提供了企業完整的解決方案
製作了單一登入的機制
貼心的個人化網頁設定
更可以提供各式各樣平台如 pda, 手機等等的統一窗口
因此, 政府與大企業都 *應該* 採用這種解決方案
透過 Webservice 達成資訊流/金流/物流 的效果....

以上全文 (1)-(7) 由 jini (99% jakarta) 所撰寫
版權歸屬於 (c)softleader taiwan ( http://www.softleader.com.tw )
如需轉載請來信告知 jini@bbs.openfind.com.tw

posted on 2005-04-02 16:06  孟和  阅读(419)  评论(0编辑  收藏  举报