作者:林海濱 (dev2dev ID:linhibin) 摘要 本文著重于從理論與應(yīng)用的角度,對Bea WebLogic Portal8.1做一個介紹和分析,詳細介紹JSR168標準,并對Portal基本原理及經(jīng)常碰到的問題進行討論。 PortletSession與HttpSession的關(guān)系... Portal簡介什么是Portal?Portal是一個基于web的應(yīng)用程序,它主要提供個性化、單點登錄、不同來源的內(nèi)容整合以及存放信息系統(tǒng)的表示層。 什么是Portlet?Portlet是基于java技術(shù)的web組件,它由portlet容器管理、并處理請求,并動態(tài)生成輸出內(nèi)容。 Portlet的輸出是一個片段,即不是一個完整的頁面。 Portal標準為規(guī)范Portal,SUN于2003年底制定了JSR168,它定義了portlet標準,并給出了一個實現(xiàn)接口。 Portlets與Servlet的異同?相同點基于web應(yīng)用的java技術(shù) 由特定的容器管理 動態(tài)生成內(nèi)容 生命周期由容器進行管理 通過request/reponse進行交互 不同點portlet只生成片段 portlet并不直接綁定到某一個URL上 portlet通過portal進行交互 portlet可以多次在同一個portal頁面上同時出現(xiàn) portlet優(yōu)點能訪問到用戶配置信息 能在不同的域中存儲會話:應(yīng)用程序級到私有級。 portlet與servlet的關(guān)系前者能調(diào)用后者,并且能共享信息,包括:Attributes portlet容器是servlet容器的擴展 portlet無法做到的事情設(shè)置response的字符集編碼 設(shè)置http header 獲取客戶端的request Portlets實例如果是在普通的場合下使用,即不是在分布式場合,則每個portal應(yīng)用就會生成一個portlet實例。而如果是在分布式場合下使用的話,則每個jvm只有一個實例。 Portlet生命周期Portlet接口的四個方法構(gòu)成一個完整的生命周期:init, processAction,render,destroy public void init(PortletConfig config) throws PortletException; 由portlet容器調(diào)用,在將portlet放入服務(wù)區(qū)前調(diào)用。portlet容器在初始化portlet后,直接調(diào)用這個方法。 public void processAction (ActionRequest request, ActionResponse response) throws PortletException, java.io.IOException; 由portlet容器調(diào)用,用來處理action request。 public void render (RenderRequest request, RenderResponse response) throws PortletException, java.io.IOException; 由portlet容器調(diào)用,用來生成輸出。 public void destroy(); 將portlet從服務(wù)區(qū)中刪除。 Portlet URLs如何生成Portlet URLRenderResponse.createActionURL RenderResponse.createRenderURL 調(diào)用setParameter、setParameters可以用來設(shè)置參數(shù). 如何使用Portlet URL開發(fā)者不可以對參數(shù)進行任何編碼,它(編碼)是由portlet容器進行的。見下面例子: PortletURL url = response.createRenderURL(); url.setParameter(“customer”,”foo.com”); url.setParameter(“show”,”summary”); writer.print(“Summary”); portlet URL可以包含portlet的模式及窗口的狀態(tài),見下面例子: PortletURL url = response.createActionURL(); url.setParameter(“paymentMethod”,”creditCardInProfile”); url.setWindowState(WindowState.MAXIMIZED); writer.print(“ |
|
來自: smoking_boy > 《Portal》