日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

深入理解Weblogic Portal8.1

 smoking_boy 2005-08-24

作者:林海濱 dev2dev IDlinhibin

摘要

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

Portal簡介...

什么是Portal?.

什么是Portlet?.

Portal標準...

PortletsServlet的異同?...

相同點...

不同點...

portlet優(yōu)點...

portletservlet的關(guān)系...

portlet無法做到的事情...

Portlets實例...

Portlet生命周期...

Portlet URLs.

如何生成Portlet URL.

如何使用Portlet URL.

portlet模式...

VIEW模式...

EDIT模式...

HELP模式...

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

portlet上下文...

PortletRequest

PortletResponse.

Portlet參數(shù)...

會話PortletSession.

變量范圍定義...

PortletSessionHttpSession的關(guān)系...

緩存Cache.

Portlet應(yīng)用...

標記庫...

.

.

.

.

定制的Portlet模式...

不允許的標記...

WebLogic Portal

基礎(chǔ)概念--配置篇...

Desktop.

Book.

Page.

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

User Porfile Property Set

User Segment

Content Selector

Campaign.

PlaceHolder

目錄結(jié)構(gòu)...

開發(fā)步驟...

雜項...

WebLogic Portal原理及應(yīng)用...

生命周期...

參數(shù)傳遞...

JSR168標準...

WebLogic Portal8.1用法...

Cache機制...

用戶認證...

輸出機制...

WebLogic Portal設(shè)計模式...

Singleton模式...

Factory模式...

Visitor模式...

Facade模式:

State模式:

Observer模式...

Abstract Factory模式...

WebLogic Portal集成...

遠程Portlet

集成OA.

單點登錄SSO..


Portal簡介

什么是Portal?

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

什么是Portlet?

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

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

Portal標準

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

PortletsServlet的異同?

相同點

基于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)用程序級到私有級。

portletservlet的關(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 URL

RenderResponse.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(“

”);

setSecure方法用來設(shè)置是否是https

portlet模式

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

VIEW模式

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

EDIT模式

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

HELP模式

提供有關(guān)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)分為三種:NORMALMAXIMIZED、MINIMIZED,此外還可以自定義狀態(tài)。

portlet上下文

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

主要方法:getPortalInfo、getPropertygetPropertyNamesgetSupportedPortletModes、getSupportedWindowStates

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無法應(yīng)用的場合。

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è)置參數(shù)、改變窗口狀態(tài)及模式。

       setRenderParameter

RenderResponse接口

       允許設(shè)置標題、內(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ù)關(guān)聯(lián)時,PortletPreferences.store()必須調(diào)用驗證器的validate()方法。

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

會話PortletSession

變量范圍定義

一是應(yīng)用程序級別APPLICATION_SCOPE,

二是Portlet級別PORTLET_SCOPE。

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

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

PortletSessionHttpSession的關(guān)系

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

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

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

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

緩存Cache

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

      

              300

      

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

Portlet應(yīng)用

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

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

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

目錄結(jié)果:

/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標準雖不復(fù)雜,但其在整個portal應(yīng)用中不過是冰山一角。實際上,實現(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)一個門戶應(yīng)用。那么就讓我們來看看如何配置Weblogic

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

基礎(chǔ)概念--配置篇

Desktop

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

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

Book

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

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

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

Page

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

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

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

User Porfile Property Set

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

User Segment

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

Content Selector

內(nèi)容選擇符

Campaign

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

PlaceHolder

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

目錄結(jié)構(gòu)

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的外觀、布局。

導(dǎo)航菜單

       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.         在應(yīng)用中新建一個portal project。

4.         在項目中新一個portal。

5.         在項目中新建一個portlet

6.         portal中,插入新建的portlet

雜項

Portal8.1還具有如下特性:

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

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

你可以在如下路徑中找到相關(guān)標準接口:

%weblogic81%portallib etuixsystemextsystemportlet.jar。

portlet包含器的位置是:

%weblogic81%portallib etuixwebportlet-container.jar

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

%weblogic81%portallib etuixsystem etuix_system.jar

WebLogic Portal原理及應(yīng)用

生命周期

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)這個方案的關(guā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è)置參數(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、獲取、設(shè)置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

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

輸出機制

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

skeleton.beginRender

layout.beginRender

portlet.beginRender

portlet.endRender

layout.endRender

skeleton.endRender

WebLogic Portal設(shè)計模式

Singleton模式

       此模式是得到最廣泛應(yīng)用的,Portal中大量地應(yīng)用到此模式,例如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模式:

       事件服務(wù)通過facade模式提供。

       類:EventService

State模式:

       類:Event

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

Observer模式

       事件機制使用了Observer模式

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

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

Abstract Factory模式

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

WebLogic Portal集成

遠程Portlet

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

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

       其框圖見下:

       基于weblogic portal的應(yīng)用,能夠不加任何編碼或任何第三方軟件即可實現(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的話,那么還需要在服務(wù)器端進行開發(fā)修改。

單點登錄SSO

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

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

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

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多