![](http://static.javashuo.com/static/loading.gif)
Portal是web應用發展的一個重要趨勢,目前幾乎全部大的軟件廠商都有本身的Portal產品。而且Portal技術已經造成規範。本文對Portal技術和產品進行了分析,目的是爲公司產品的規劃提供參考。php
1 Portal的概念根據(JSR (Java Specification Request) 168)的定義,Portal是基於web的應用,它主要做爲信息系統的展示層,提供個性化、統一登陸和內容整合的功能。整合就是將不一樣來源的信息集中展示在一張網頁上。一個Portal能夠具備不少個性化參數,用來調整爲用戶定製的內容。對於不一樣用戶,一個Portal網頁可能由多組不一樣的頁面構件-portlet組成,portlet爲不一樣用戶生成不一樣的定製內容。Portal網頁的內容如圖1所示。Portal網頁中的Portlet窗口通常有常規、最大化和最小化三種狀態,窗口的狀態能夠由用戶調整。java
從上面的定義能夠看出,Portal的核心思想是網頁個性化,它有兩個含義,一是爲不一樣的網頁訪問者匹配不一樣的內容,二是爲不一樣的網頁訪問者提供不一樣的portlet應用服務,並在所能提供服務的基礎上根據訪問者的不一樣相應改變處理流程。web
最初的Portal指的是像YahooLycos這樣的Internet門戶網站。這些門戶網站爲用戶提供了檢索、分類和相似"My Yahoo!"的個性化定製服務,目的是幫助用戶更快地找到本身所須要的信息。這樣的Portal被稱爲Public Portal即面向公衆的信息門戶。數據庫
隨着web應用的發展,又出現了Vertical Portal和Enterprise Information Portal。Vertical Portal即行業門戶,目的是幫助某一行業的商業人員和技術人員找到自已須要的特定行業的商業信息和技術信息。Enterprise Information Portal(EIP)即企業信息門戶。目的是幫助企業用戶及員工經過統一入口找到分佈於企業的各類信息。與Public Portal類似,Vertical Portal和EIP也一樣提供了檢索、分類和個性化定製服務。瀏覽器
1.2 Portal的價值從不一樣的角度出發,對不一樣的應用來講,Portal所體現的價值是不一樣的。服務器
首先做爲一個網絡用戶,基於Portal的網站可以爲咱們更有效的提供信息和服務。雖然目前的Internet爲咱們提供了大量的信息,但這些信息很是分散而且重複不少。所以有必要創建以行業或專業領域爲中心的網站,集中提供某個行業或領域的信息和服務。網絡
對於企業內網系統來講,若是經過Portal與外網集成,將減小網絡系統開發和維護的成本。經過企業內部文檔和資料的內容管理,能夠增強知識的積累和共享。經過創建公告信息,記事本、聊天室等協同工做的工具,能夠幫助員工提升工做效率。經過EIP與企業舊有信息系統(如ERP、SCM、POS)的運做結合,能夠強化企業的運做效率。框架
2 Portal廠商及Portlet規範 2.1國外廠商在EIP發展的後面階段,隨着EIP與應用集成的發展,WEB應用服務器和數據庫服務器的提供者、CRM 和ERP的提供者、EAI廠商也加入到EIP廠商的行列。服務器廠商包括IBM,Oracle,BEA,Sybase 以及微軟。CRM 和ERP廠商包括BroadVision,Vignette,SAP和PeopleSoft等。EAI廠商象Tibco和WebMethods等。工具
隨着數據倉庫工具的普及,商業智能供應商,例如Connos,Business Objects以及Brio等也加入到Portal廠商的行列。它們都提供了集成分析報表與Portal的工具。post
2.2 開放源代碼項目除了上面提到的國內外廠商外,一些開放源代碼組織也提供了基於JAVA平臺的Portal解決方案,這些開源產品有JetSpeed、Jboss nukes、Liferay等。
JetSpeed是Apache組織的一個Portal開源項目, IBM早期的WebSphere Portal Server就是基於JetSpeed進行二次開發的。jcorporate的Expresso(一個基於開放標準的J2EE體系框架)也採用了JetSpeed。
Jboss nukes是基於postnuke、phpnuke等內容管理系統開發的java平臺的內容管理系統。因爲使用了java,其在響應速度和系統集成能力等方面都要比用和php開發的postnuke、phpnuke等系統出色。
Liferay的portlet配置文件能夠自由地動態擴展,並使用Apahce Lucene實現全文檢索功能。
3 Portal技術分析 3.1 PortletJSR-168 Portlet Specifications對Portlet的定義以下:
portlet是基於web的Java組件。它由portlet容器管理,可以處理請求,產生動態內容。portlet被Portal用做爲可插拔的用戶接口組件,爲信息系統提供展示。
由portlet動態產生的內容也被叫作fragment。fragment是遵循某種規則的標記(例如:HTML,XHTML,WML),可與其餘的fragment一塊兒創建一個完整的文檔。通常一個portlet產生的內容和其餘的portlet產生的內容彙集在一塊兒造成Portal網頁。
3.2 Portlet 容器portlet在portlet容器中運行,portlet容器爲portlet提供必需的運行環境。portlet容器包含portlet(組件)而且管理它們的生命週期,它也爲portlet的參數設置提供持久化的存儲。
portlet 容器不是一個相似於 servlet 容器的獨立容器。它是在 servlet 容器上經過擴展方式實現的,並重用 servlet 容器提供的功能。
3.3 工做原理在圖8中,portlet的生命週期由portlet容器管理。web端經過由Portal執行的請求/應答機制與portlet進行交互。一般,用戶與由portlet產生的內容進行交互,好比經過單擊按鈕或連接,Portal接收到portlet窗口的動做,隨後將portlet產生的內容送至用戶操做的portlet窗口。 對不一樣的用戶,一個portlet產生的內容可能會大不同,這與用戶對portlet的設置有關。
portlet容器接收來自Portal的請求並運行它管理的portlet執行請求。portlet容器並不負責彙集portlet產生的內容,處理內容彙集是Portal的職責。Portal和Portlet容器可以被做爲單一的應用組件組合在一塊兒,也能夠做爲一個Portal應用的2個分離的組件。