1 序言
許多大型企業的網站, 漸漸采用了 portal server 作為開發的基礎. 至于什么是 portal 呢, 中文翻譯為 "門戶網站"。 有人可能想.. 天殺的.. 門戶網站不是就像 yahoo, pchome, yam 等等。不過, 我們現在討論的 portal server, 不是那么地簡單, 基本上 yahoo, pchome, yam 那些只能稱為搜索引擎的門戶網站。
如果你從來沒有用過 portal server 或是似懂非懂.. 大家可以連結到 MyNetscape 或 MyYahoo 去 注冊一個帳號。因為 MyNetscape 的樣式比較好看, 所以我接下來就以 MyNetscape 為介紹的范例。
如果你第一次接觸到 portal,你會驚訝的發現... 哇.. 為何一個網站里面充滿了這么多小窗口. 我們稱這些小窗口叫做 "portlet",而且每個小窗口都存在著獨立的信息與內容,可以放到最大化,縮小,還原,關閉等等。當你登陸之后,可以選擇及調整自己 portlet 的配置,也可以設置自己喜愛的風格與樣式,更可以設置每個 portlet 的資料配置。這種以客戶為上帝的系統,就是我們將要介紹的 portal。
2 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 的設置。
3 portlet 與 servlet 的關系
Portlet 和 Servlet 算是兄弟有那么一點點相似卻又有那么一點點不同,因為 Servlet 和 Portlet 不盡然相同,所以研究小組決定將 portlets 定義成為一個新的組件,因此定義了 portlets 一個新的并且明確的界面與行為。為了盡可能與現有的 servlet 結合達到重復使用的目的,portlet 的規范利用了 servlet 的規范,許多觀念都很相似的,結合 portlets、servlets 及 jsp 在同一個網站系統中,我們稱為 portlet application 。在同一個 portlet application 中,他們將分享同一個 classloader,context 及 session。
抽象類portlet是Portlet API的核心。 Portlet類擴展了Servelt API的HTTPServlet。所有的Portlet 都從HTTPServlet繼承而來,間接地擴展了Portlet類,如下所示:
... +--javax.servlet.http.HttpServlet | +--org.apache.jetspeed.portlet.Portlet | +--org.apache.jetspeed.portlet.PortletAdapter | +--com.myCompany.myApplication.myPortlet
因此,Portlet是一類特殊的Servlet,能方便的插入Portal Server,并在其上運行。與 servlet 不同,portlet 無法直接發送重定向或錯誤信息到瀏覽器,以及轉發請求或者寫專用標記到輸出流。
與 servlet 相比,Portlet有更強的動態性,可在不重新啟動 Portal Server 的情況下進行更新:
- 可以使用門戶網站管理界面安裝和除去portlet 應用程序
- portlet 的設置可由擁有適當訪問權的管理員進行更改
- 可以使用管理 portlet 動態創建和刪除 portlet
Portlet容器依賴于J2EE體系結構。Portlet 被打包成類似于J2EE Web應用的WAR文件,并按類似于 servlet 的方式部署。與其它 servlet 相似,使用 servlet 部署描述符(web.xml)把 portlet 定義到應用程序服務器,這個文件定義 portlet 的類文件和只讀初始化參數。除此之外,portlet還必須提供一個portlet的部署描述符(portlet.xml)來把portlet定義到portal server
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 請求
4 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 冥王星計劃。至于為何叫做冥王星,我猜是 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 這種權限管控機制的開發。
5 css 定義
每個通過認證的使用者,就可以使用相關的 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
5) menus ( popup menu )
portlet-menu
portlet-menu-item
portlet-menu-item-selected
portlet-menu-item-hover
portlet-menu-item-hover-selected
portlet-menu-cascade-item
portlet-menu-cascade-item-selected
portlet-menu-description
portlet-menu-caption
基本上, 你要了解什么地方該用什么 css,這些 css 名稱套用在你開發的 portlet 之中,你就可以移植到其他支持 jsr#168 的系統,不需要在花時間去更改成為他們的 Look&Feel。
6 信息片段 ( fragment markup ) 的限制
每個 portlet 輸出都是一個信息片段,之前有提到, 這些 markup 有些限制。
如果你是生成 HTML 格式的信息片段,就*不可以*擁有以下這些 tag :
base, body, iframe, frame, frameset, head, html, 及 title
如果生成是 XHTML 或 XHTML-basic 格式的信息片段,就*不可以*擁有以下這些 tag :
base, body, iframe, head, html 及 title
7 其他細節
最后, portlet 需要考慮的還有 security, caching, taglib 等等..
Portal 是連結后端 EAI 處理的信息整合平臺,提供了企業完整的解決方案,提供了單一登陸的機制,貼心的個人化頁面設置,更可以提供各式各樣平臺如 pda, 手機等等的統一窗口。因此, 政府與大企業都 *應該* 采用這種解決方案,通過 Webservice 達成信息流/金流/物流 的效果....
posted on 2007-01-23 10:40
周銳 閱讀(460)
評論(0) 編輯 收藏 所屬分類:
Portal