乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      深入理解Weblogic Portal8.1

       smoking_boy 2005-08-24

      作者:林海濱 dev2dev IDlinhibin

      摘要

      本文著重于從理論與應用的角度,對Bea WebLogic Portal8.1做一個介紹和分析,詳細介紹JSR168標準,并對Portal基本原理及經(jīng)常碰到的問題進行討論。

      Portal簡介...

      什么是Portal?.

      什么是Portlet?.

      Portal標準...

      PortletsServlet的異同?...

      相同點...

      不同點...

      portlet優(yōu)點...

      portletservlet的關系...

      portlet無法做到的事情...

      Portlets實例...

      Portlet生命周期...

      Portlet URLs.

      如何生成Portlet URL.

      如何使用Portlet URL.

      portlet模式...

      VIEW模式...

      EDIT模式...

      HELP模式...

      portlet窗口狀態(tài)...

      portlet上下文...

      PortletRequest

      PortletResponse.

      Portlet參數(shù)...

      會話PortletSession.

      變量范圍定義...

      PortletSessionHttpSession的關系...

      緩存Cache.

      Portlet應用...

      標記庫...

      .

      .

      .

      .

      定制的Portlet模式...

      不允許的標記...

      WebLogic Portal

      基礎概念--配置篇...

      Desktop.

      Book.

      Page.

      基礎概念--開發(fā)篇...

      User Porfile Property Set

      User Segment

      Content Selector

      Campaign.

      PlaceHolder

      目錄結構...

      開發(fā)步驟...

      雜項...

      WebLogic Portal原理及應用...

      生命周期...

      參數(shù)傳遞...

      JSR168標準...

      WebLogic Portal8.1用法...

      Cache機制...

      用戶認證...

      輸出機制...

      WebLogic Portal設計模式...

      Singleton模式...

      Factory模式...

      Visitor模式...

      Facade模式:

      State模式:

      Observer模式...

      Abstract Factory模式...

      WebLogic Portal集成...

      遠程Portlet

      集成OA.

      單點登錄SSO..


      Portal簡介

      什么是Portal?

      Portal是一個基于web的應用程序,它主要提供個性化、單點登錄、不同來源的內(nèi)容整合以及存放信息系統(tǒng)的表示層。

      什么是Portlet?

      Portlet是基于java技術的web組件,它由portlet容器管理、并處理請求,并動態(tài)生成輸出內(nèi)容。

      Portlet的輸出是一個片段,即不是一個完整的頁面。

      Portal標準

      為規(guī)范Portal,SUN2003年底制定了JSR168,它定義了portlet標準,并給出了一個實現(xiàn)接口。

      PortletsServlet的異同?

      相同點

      基于web應用的java技術

      由特定的容器管理

      動態(tài)生成內(nèi)容

      生命周期由容器進行管理

      通過request/reponse進行交互

      不同點

      portlet只生成片段

      portlet并不直接綁定到某一個URL

      portlet通過portal進行交互

      portlet可以多次在同一個portal頁面上同時出現(xiàn)

      portlet優(yōu)點

      能訪問到用戶配置信息

      能在不同的域中存儲會話:應用程序級到私有級。

      portletservlet的關系

      前者能調(diào)用后者,并且能共享信息,包括:Attributes

      portlet容器是servlet容器的擴展

      portlet無法做到的事情

      設置response的字符集編碼

      設置http header

      獲取客戶端的request

      Portlets實例

      如果是在普通的場合下使用,即不是在分布式場合,則每個portal應用就會生成一個portlet實例。而如果是在分布式場合下使用的話,則每個jvm只有一個實例。

      Portlet生命周期

      Portlet接口的四個方法構成一個完整的生命周期:init, processAction,render,destroy

      public void init(PortletConfig config) throws PortletException;

      portlet容器調(diào)用,在將portlet放入服務區(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從服務區(qū)中刪除。

      Portlet URLs

      如何生成Portlet URL

      RenderResponse.createActionURL

      RenderResponse.createRenderURL

      調(diào)用setParametersetParameters可以用來設置參數(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(“

      ”);

      setSecure方法用來設置是否是https。

      portlet模式

      portlet模式用來指示portlet應執(zhí)行的功能,標準定義了三種:VIEW, EDIT, HELP。

      VIEW模式

      用來生成當前portlet狀態(tài)的標簽內(nèi)容,可能包含一個或多個screen。開發(fā)者必須重載GenericPortlet.doView()方法。此模式是所有的portlet都必須實現(xiàn)的。

      EDIT模式

      用來編輯portlet模式。必須重載GenericPortlet.doEdit()方法。此模式并不要求實現(xiàn)。

      HELP模式

      提供有關portlet的信息。重載GenericPortlet.doHelp()方法。此模式并不要求實現(xiàn)。

      此外,還可以創(chuàng)建自定義的模式。定制的portlet必須重載GenericPortlet.doDispatch()方法

      在描述文件中指明所支持的模式,元素是,見下例子:

            

             text/html

             edit

             help

            

      portlet窗口狀態(tài)

      窗口狀態(tài)可以用來指示當前頁面的有效空間, portlet可以根據(jù)窗口狀態(tài)來進行不同的輸出。

      內(nèi)置狀態(tài)分為三種:NORMAL、MAXIMIZED、MINIMIZED,此外還可以自定義狀態(tài)。

      portlet上下文

      PortletContext實現(xiàn),必須與ServletContext一致。

      主要方法:getPortalInfo、getProperty、getPropertyNames、getSupportedPortletModesgetSupportedWindowStates

      PortletRequest

      PortletRequest有兩個子類:

             ActionRequest

             RenderRequest

      主要方法:

      getParameter返回指定名稱參數(shù)的第一個值

      getParameterNames返回指定名稱參數(shù)數(shù)組名稱

      getParameterValues 返回指定名稱參數(shù)的值數(shù)組

      getParameterMap

      portlet容器不會將request的參數(shù)傳播到外面,除非portletprocessAction中,調(diào)用了ActionRequest.setRenderParameter。不同portlet之間的request是不可見的。

      Attributes可以與JSPServlet共享,它用來在普通API無法應用的場合。

      Propertiesportlet容器指定,用來獲取http的某些特性, 包括:content-length, content-type, accept-language等等。前綴為“javax.portlet.”的屬性及參數(shù)是保留名稱。

      PortletRequest的生命周期

      僅在processAction方法或render調(diào)用期間。

      PortletResponse

      PortletResponse有兩個子類:

             ActionResponse

             RenderResponse

      PortletResponse的主要方法:

      setProperty

      addProperty

      encodeURL

      sendRedirect

      ActionResponse接口

             允許重定向、設置參數(shù)、改變窗口狀態(tài)及模式。

             setRenderParameter

      RenderResponse接口

             允許設置標題、內(nèi)容。

             setContentType

             getPortletOutputStream

             getWriter

      生命周期:在processAction方法或render調(diào)用期間。

      Portlet參數(shù)

      Portlet通過參數(shù)來獲取各種屬性,接口是:PortletPreferences

      Portlet只能在processAction調(diào)用的時候修改參數(shù)。

      本地化參數(shù)

      根據(jù)ResourceBundle類進行實現(xiàn)。

      命名規(guī)則:’javax.portlet.preference.description.

      驗證:

      實現(xiàn):PreferencesValidator,并且必須以線程安全的模式實現(xiàn),它在JVM中必須是單子的。

      當有驗證器與參數(shù)關聯(lián)時,PortletPreferences.store()必須調(diào)用驗證器的validate()方法。

      參數(shù)的修改必須是原子性。

      會話PortletSession

      變量范圍定義

      一是應用程序級別APPLICATION_SCOPE,

      二是Portlet級別PORTLET_SCOPE

      APPLICATION_SCOPE必須采用前綴表示法來進行屬性的存取。

      當使用PortletSessionUtil類進行屬性的訪問時,對PORTLET_SCOPE的變量不用采取前綴,建議用取這種方法。

      PortletSessionHttpSession的關系

      PortletSessionHttpSession中的屬性必須是互相可見的。

      PORTLET_SCOPE屬性必須加上前綴,兩種session必須一致。

      APPLICATION_SCOPE的屬性名稱必須是一致的。

      javax.portlet.”前綴的屬性名稱是保留的,開發(fā)者不能使用。

      緩存Cache

       超時緩存,不要求實現(xiàn)。

            

                    300

            

      使用RenderResponse設置屬性可以改變緩存EXPIRATION_CACHE,如果設置為0則不使用緩存,設置為-1則緩存永不過時。在描述文件中沒有定義,但程序中設置了的話,會被忽略。

      Portlet應用

      Portlet應用是一個web應用,并且可以用于不同的portlet容器中。

      Portlet應用與web應用的關系:由servlet容器管理所有的組件、資料(除portlet外)。

      Portlet應用與PortletContext的關系:由容器實現(xiàn)一對一。

      目錄結果:

      /WEB-INF/portlet.xml

      /WEB-INF/classes

      /WEB-INF/lib

      ClassLoader:與servlet同樣。

      標記庫

      <%@ taglib uri=”http://java./portlet” prefix=”portlet” %>

      defineObjects定義了以下幾個變量:

             RenderRequest

             RenderResponse

             PortletConfig

      actionURL用來創(chuàng)建URL,定義了以下幾個變量:

             String windowState

             String portletMode

             String var

             String secure

      20

      namespace定義了當前portlet的一個唯一值,用于輸出時確保名稱的唯一性,例如javascript函數(shù)名。

      param用來加入到URL中,必須在actionURL的內(nèi)部定義。

      例如:myParam value=someValue/>

      定制的Portlet模式

      about, config, edit_defaults, priview, print

      不允許的標記

      基于HTML:base, body, iframe, frame, frameset, head, html, title。

      基于XHTML:base, body, iframe, head, html, title

      不太兼容的標記:link,meta,style。

      Portlet標準雖不復雜,但其在整個portal應用中不過是冰山一角。實際上,實現(xiàn)一個portal是一個非常龐大的工程,它幾乎等同于一個IDE的開發(fā),Bea WebLogic在這方面可以說是業(yè)界的先鋒,其IDE環(huán)境workshop,已完全集成了Portal的開發(fā),達到了可視化目的,這也是下一節(jié)所要詳述的。

      WebLogic Portal

      其實Bea WebLogic Portal7.0就已是一個十分成熟的門戶框架, Portal8.1更是一個出色的產(chǎn)品,它與workshop開發(fā)環(huán)境的無縫集成,使開發(fā)者的解決方案速度大大地加快,從某種意義上來說,只要會配置portal,可以不用寫一行代碼就可以實現(xiàn)一個門戶應用。那么就讓我們來看看如何配置Weblogic

      首先來看看Portal的基本概念:

      基礎概念--配置篇

      Desktop

             Portal桌面,每個portal可以具有多個桌面。

             一個桌面可以具有多個書冊

      Book

             書冊,等同于傳統(tǒng)軟件界面的tab,是由desktop包容的。

      書冊是可以嵌套的,即一個書冊中可以再嵌入另一個書冊

      一個書冊可以包含多個頁面。

      Page

             頁面,每個book可以包含多個頁面。

      一個頁面可以包含多個portlet。

      基礎概念--開發(fā)篇

      User Porfile Property Set

      用戶配置屬性集,用來存儲用戶信息。

      User Segment

      用戶分段,用來分用戶劃分等級,應用程序可以根據(jù)等級進行不同的邏輯處理,例如可以實現(xiàn)網(wǎng)上購物的用戶等級劃分

      Content Selector

      內(nèi)容選擇符

      Campaign

      活動,用來定義門戶事件邏輯處理。

      PlaceHolder

      占位符,是web網(wǎng)頁上的一個表示空間,可以存放文字、圖片或shockware等信息。

      目錄結構

      compaigns

      framework

             markup

                    layout:布局,用來安排網(wǎng)頁的表現(xiàn)形式

                    lookandfeel:外觀

                    menu:菜單

                    shell:外殼

                    theme:主題

             skeletons骨架,此目錄一般包括種jsp資源,包括header.jsp/footer.jsp等。

             skins,外觀,即網(wǎng)頁的表現(xiàn)形式

      portlets存放portlets的目錄

      visitorTools用戶訪問工具,利用此工具可以定義portal的外觀、布局。

      導航菜單

             Multi Level Menu多層菜單,即類似于windows菜單系統(tǒng)。

             Single Levle Menu單層菜單

      作用域

             desktop::lookandfee::shell::book::page::portlet

      開發(fā)步驟

      1.         使用configuration wizard建立一個portal domain。

      2.         新建一個portal application

      3.         在應用中新建一個portal project。

      4.         在項目中新一個portal。

      5.         在項目中新建一個portlet

      6.         portal中,插入新建的portlet

      雜項

      Portal8.1還具有如下特性:

      實現(xiàn)了jsr168標準。

      支持用戶自定義桌面、外觀。

      你可以在如下路徑中找到相關標準接口:

      %weblogic81%portallib etuixsystemextsystemportlet.jar。

      portlet包含器的位置是:

      %weblogic81%portallib etuixwebportlet-container.jar

      此外,對于WebLogic Portal,最重要的包莫過于:

      %weblogic81%portallib etuixsystem etuix_system.jar

      WebLogic Portal原理及應用

      生命周期

      WebLogic Portal使用了流行的單入口方法實現(xiàn)portal,在web.xml文件中,你會看到類似如下的兩個servlet

      AppManagerServlet=com.bea.netuix.servlets.manager.PortalServlet

      PortletServlet=com.bea.netuix.servlets.manager.PortletServlet

      對于任何擴展名為portal的訪問,都會由PortalServlet進行解釋,這種熟悉的解決是否令你想起了strutsaxis?在bea portal中,對struts的支持已是相當完善的了,不過,還有更好的框架,那就是page flow。

      PortletServlet繼承了UIServlet,而后者則繼承了Servlet,這樣一來,你就可以猜到它的生命周期了吧。

      內(nèi)部流程:

      PortalServlet.service

             UIServlet.service

                    Lifecycle.run

                           ControlTreeWalker.walk

                                  JspRenderer.beginRender

                                  JspRenderer.endRender

      參數(shù)傳遞

      調(diào)用portlet時,可能會傳遞一些參數(shù)進去,例如對于信息發(fā)布系統(tǒng),在同一頁面可能需要顯示多個欄目的新聞,即在同一個page中可能調(diào)用同一個portlet的多個實例,此時,傳遞參數(shù)是實現(xiàn)這個方案的關鍵。

      對于傳統(tǒng)的jsp來說,是通過include中來傳遞參數(shù)。而對于portlet來說,JSR168已指定的一個標準,此外,Weblogic Portal也提供了一個實現(xiàn)方案。詳細描述見下:

      JSR168標準

             1、在portlet.xml部署文件中進行參數(shù)值指定,見下面例子。

          xsi:schemaLocation="http://java./xml/ns/portlet"

          xmlns="http://java./xml/ns/portlet/portlet-app_1_0.xsd">

            

                   

                    info

                    InfoView

                   

                           text/html

                           edit

                   

                   

                          

                   

                   

                          

                                  showChannelTitle

                                  true

                          

                   

            

      2、獲取、設置參數(shù):

      <%@taglib uri="http://java./portlet" prefix="portlet"%>

      <%@page import="javax.portlet.PortletPreferences"%>

      <%

      PortletPreferences prefs = renderRequest.getPreferences();  

      String showChannelTitle = prefs.getValue("showChannelTitle","true");  

      %>

      WebLogic Portal8.1用法

             1、在portlet窗口中,新建一個Prefenrence,見下圖:

             2、為Prefenrence指定參數(shù)值。見下圖:

             3、獲取、設置Prefenrence

             使用Weblogic提供的標記庫,包括:getPreference、getPreferences等。

      Cache機制

             Portal使用的是Weblogic的公共Cache機制,在portlet部署中可以獨立指定Cache的超時時間。

      用戶認證

             Portal用戶認證,使用是的weblogic的安全機制,參見如下流程:

             com.bea.p13n.security.Authentication.login(p13n_system.jar)

                    weblogic.servlet.security.ServletAuthentication.weak(weblogic.jar)

                           weblogic.servlet.security.internal.SecurityModule.checkAuthenticate

             由此,我們可以得出結論,portal用戶是基于weblogic平臺的用戶,它與weblogic控制端的安全用戶定義是互相可見的。但是,用戶群組及用戶角色則portal專有的,與weblogic server的控制端無任何關系。

      輸出機制

             顯然,客戶端輸出的生命周期與類調(diào)用的順序是一樣的,見如下描述:

      skeleton.beginRender

      layout.beginRender

      portlet.beginRender

      portlet.endRender

      layout.endRender

      skeleton.endRender

      WebLogic Portal設計模式

      Singleton模式

             此模式是得到最廣泛應用的,Portal中大量地應用到此模式,例如Debug類便實現(xiàn)了此模式。

      Factory模式

             用戶屬性集中便用到此模式,

             Factory:ProfileFactory

             Object:ProfileWrapper

      Visitor模式

             Portal的生命周期中,使用了visitor模式進行客戶端的渲染(render)。具體由Lifecycle使用Visitor模式驅(qū)動lifecycle通過整個control tree

             vistor:ControlVisitor 、

             concreteVisitor: ControlLifeCycleRootLifeCycle內(nèi)置了多個visitor,用來進行portlet的渲染。

             Element:UIControl

             ConcreteElement: PresentationControl

      Facade模式:

             事件服務通過facade模式提供。

             類:EventService

      State模式:

             類:Event

             在不同的狀態(tài)下實現(xiàn)不同的行為。

      Observer模式

             事件機制使用了Observer模式

             Observer:EventListener,接收來自于EventHandle的事件,此事件是本類經(jīng)過注冊的。

             Subject:EventHandle,用于分派事件到EventListener

      Abstract Factory模式

             Portal大量地使用了抽象工廠模式,原因是由于portal中大量地使用了可配置組件,例如ButtonEvent、Context等等。

      WebLogic Portal集成

      遠程Portlet

             Weblogic Portal8.1支持遠程portlet,目前提供了wsrp(Web Services for Remote Portlets)可提供與遠程portlet集成。

             wsrp是基于producerconsumer的方式實現(xiàn)的,遠程的portlet服務即為procuder,而當前 portal服務器即為consumer

             其框圖見下:

             基于weblogic portal的應用,能夠不加任何編碼或任何第三方軟件即可實現(xiàn)單點登錄(sso)。前提是必須在使用遠程portlet前,在當前portal中登錄。

             wsrp是基于web service協(xié)議實現(xiàn)的,它已與workshop達到了無縫集成。具體情況請參考:

      集成OA

      利用compoze portlet for weblogic,可以很好地與這Domino、Exchange Server進行交互,但是,使用compoze portlet還有一個限制,那就是那只能集成notes環(huán)境,如果你的oa是基于IE的話,那么還需要在服務器端進行開發(fā)修改。

      單點登錄SSO

             weblogic本身并不提供SSO解決方案,但是由于其良好的架構以及對安全體系技術的支持,很容易利用第三方工具,例如SiteMinder,達到支持SSO功能。當然,你可以自己實現(xiàn)單點登錄,但要做的工作就相當多啦,這已不是本文要討論的范圍了。

      總結
      由于目前web資源越來越有整合的趨勢,故門戶建設也已達到勢在必行的地步,大中型企業(yè)、政府部門的這種需求更是強烈。因此,如何充分利用好portal,實現(xiàn)企業(yè)資源的整合,也成了解決方案提供商必須掌握的功課。
      portal是一個相當復雜的框架,需要不斷的學習與理解,也需要不斷的創(chuàng)新。

      關于作者:
      林海濱
      高級軟件工程師,系統(tǒng)分析員。
      任職于智軟(中國)電腦開發(fā)有限公司,負責軟件架構及系統(tǒng)設計

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多