2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

深入理解Weblogic Portal8.1

 smoking_boy 2005-08-24

作者:林海濱 dev2dev IDlinhibin

摘要

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

Portal簡介...

什么是Portal?.

什么是Portlet?.

Portal標(biāo)準(zhǔn)...

PortletsServlet的異同?...

相同點(diǎn)...

不同點(diǎn)...

portlet優(yōu)點(diǎn)...

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

portlet無法做到的事情...

Portlets實(shí)例...

Portlet生命周期...

Portlet URLs.

如何生成Portlet URL.

如何使用Portlet URL.

portlet模式...

VIEW模式...

EDIT模式...

HELP模式...

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

portlet上下文...

PortletRequest

PortletResponse.

Portlet參數(shù)...

會(huì)話PortletSession.

變量范圍定義...

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

緩存Cache.

Portlet應(yīng)用...

標(biāo)記庫...

.

.

.

.

定制的Portlet模式...

不允許的標(biāo)記...

WebLogic Portal

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

Desktop.

Book.

Page.

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

User Porfile Property Set

User Segment

Content Selector

Campaign.

PlaceHolder

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

開發(fā)步驟...

雜項(xiàng)...

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

生命周期...

參數(shù)傳遞...

JSR168標(biāo)準(zhǔn)...

WebLogic Portal8.1用法...

Cache機(jī)制...

用戶認(rèn)證...

輸出機(jī)制...

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

Singleton模式...

Factory模式...

Visitor模式...

Facade模式:

State模式:

Observer模式...

Abstract Factory模式...

WebLogic Portal集成...

遠(yuǎn)程Portlet

集成OA.

單點(diǎn)登錄SSO..


Portal簡介

什么是Portal?

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

什么是Portlet?

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

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

Portal標(biāo)準(zhǔn)

為規(guī)范Portal,SUN2003年底制定了JSR168,它定義了portlet標(biāo)準(zhǔn),并給出了一個(gè)實(shí)現(xiàn)接口。

PortletsServlet的異同?

相同點(diǎn)

基于web應(yīng)用的java技術(shù)

由特定的容器管理

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

生命周期由容器進(jìn)行管理

通過request/reponse進(jìn)行交互

不同點(diǎn)

portlet只生成片段

portlet并不直接綁定到某一個(gè)URL

portlet通過portal進(jìn)行交互

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

portlet優(yōu)點(diǎn)

能訪問到用戶配置信息

能在不同的域中存儲(chǔ)會(huì)話:應(yīng)用程序級(jí)到私有級(jí)。

portletservlet的關(guān)系

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

portlet容器是servlet容器的擴(kuò)展

portlet無法做到的事情

設(shè)置response的字符集編碼

設(shè)置http header

獲取客戶端的request

Portlets實(shí)例

如果是在普通的場(chǎng)合下使用,即不是在分布式場(chǎng)合,則每個(gè)portal應(yīng)用就會(huì)生成一個(gè)portlet實(shí)例。而如果是在分布式場(chǎng)合下使用的話,則每個(gè)jvm只有一個(gè)實(shí)例。

Portlet生命周期

Portlet接口的四個(gè)方法構(gòu)成一個(gè)完整的生命周期:init, processAction,render,destroy

public void init(PortletConfig config) throws PortletException;

portlet容器調(diào)用,在將portlet放入服務(wù)區(qū)前調(diào)用。portlet容器在初始化portlet后,直接調(diào)用這個(gè)方法。

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)用setParametersetParameters可以用來設(shè)置參數(shù).

如何使用Portlet URL

開發(fā)者不可以對(duì)參數(shù)進(jìn)行任何編碼,它(編碼)是由portlet容器進(jìn)行的。見下面例子:

       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í)行的功能,標(biāo)準(zhǔn)定義了三種:VIEW, EDIT, HELP。

VIEW模式

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

EDIT模式

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

HELP模式

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

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

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

      

       text/html

       edit

       help

      

portlet窗口狀態(tài)

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

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

portlet上下文

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

主要方法:getPortalInfogetProperty、getPropertyNamesgetSupportedPortletModes、getSupportedWindowStates

PortletRequest

PortletRequest有兩個(gè)子類:

       ActionRequest

       RenderRequest

主要方法:

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

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

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

getParameterMap

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

Attributes可以與JSPServlet共享,它用來在普通API無法應(yīng)用的場(chǎng)合。

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

PortletRequest的生命周期

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

PortletResponse

PortletResponse有兩個(gè)子類:

       ActionResponse

       RenderResponse

PortletResponse的主要方法:

setProperty

addProperty

encodeURL

sendRedirect

ActionResponse接口

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

       setRenderParameter

RenderResponse接口

       允許設(shè)置標(biāo)題、內(nèi)容。

       setContentType

       getPortletOutputStream

       getWriter

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

Portlet參數(shù)

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

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

本地化參數(shù)

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

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

驗(yàn)證:

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

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

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

會(huì)話PortletSession

變量范圍定義

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

二是Portlet級(jí)別PORTLET_SCOPE。

APPLICATION_SCOPE必須采用前綴表示法來進(jìn)行屬性的存取。

當(dāng)使用PortletSessionUtil類進(jìn)行屬性的訪問時(shí),對(duì)PORTLET_SCOPE的變量不用采取前綴,建議用取這種方法。

PortletSessionHttpSession的關(guān)系

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

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

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

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

緩存Cache

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

      

              300

      

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

Portlet應(yīng)用

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

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

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

目錄結(jié)果:

/WEB-INF/portlet.xml

/WEB-INF/classes

/WEB-INF/lib

ClassLoader:與servlet同樣。

標(biāo)記庫

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

defineObjects定義了以下幾個(gè)變量:

       RenderRequest

       RenderResponse

       PortletConfig

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

       String windowState

       String portletMode

       String var

       String secure

20

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

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

例如:myParam value=someValue/>

定制的Portlet模式

about, config, edit_defaults, priview, print

不允許的標(biāo)記

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

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

不太兼容的標(biāo)記:link,meta,style

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

WebLogic Portal

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

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

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

Desktop

       Portal桌面,每個(gè)portal可以具有多個(gè)桌面。

       一個(gè)桌面可以具有多個(gè)書冊(cè)

Book

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

書冊(cè)是可以嵌套的,即一個(gè)書冊(cè)中可以再嵌入另一個(gè)書冊(cè)

一個(gè)書冊(cè)可以包含多個(gè)頁面。

Page

       頁面,每個(gè)book可以包含多個(gè)頁面。

一個(gè)頁面可以包含多個(gè)portlet。

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

User Porfile Property Set

用戶配置屬性集,用來存儲(chǔ)用戶信息。

User Segment

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

Content Selector

內(nèi)容選擇符

Campaign

活動(dòng),用來定義門戶事件邏輯處理。

PlaceHolder

占位符,是web網(wǎng)頁上的一個(gè)表示空間,可以存放文字、圖片或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建立一個(gè)portal domain。

2.         新建一個(gè)portal application

3.         在應(yīng)用中新建一個(gè)portal project。

4.         在項(xiàng)目中新一個(gè)portal。

5.         在項(xiàng)目中新建一個(gè)portlet

6.         portal中,插入新建的portlet

雜項(xiàng)

Portal8.1還具有如下特性:

實(shí)現(xiàn)了jsr168標(biāo)準(zhǔn)。

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

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

%weblogic81%portallib etuixsystemextsystemportlet.jar。

portlet包含器的位置是:

%weblogic81%portallib etuixwebportlet-container.jar

此外,對(duì)于WebLogic Portal,最重要的包莫過于:

%weblogic81%portallib etuixsystem etuix_system.jar

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

生命周期

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

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

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

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

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

內(nèi)部流程:

PortalServlet.service

       UIServlet.service

              Lifecycle.run

                     ControlTreeWalker.walk

                            JspRenderer.beginRender

                            JspRenderer.endRender

參數(shù)傳遞

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

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

JSR168標(biāo)準(zhǔn)

       1、在portlet.xml部署文件中進(jìn)行參數(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窗口中,新建一個(gè)Prefenrence,見下圖:

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

       3、獲取、設(shè)置Prefenrence

       使用Weblogic提供的標(biāo)記庫,包括:getPreference、getPreferences等。

Cache機(jī)制

       Portal使用的是Weblogic的公共Cache機(jī)制,在portlet部署中可以獨(dú)立指定Cache的超時(shí)時(shí)間。

用戶認(rèn)證

       Portal用戶認(rèn)證,使用是的weblogic的安全機(jī)制,參見如下流程:

       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平臺(tái)的用戶,它與weblogic控制端的安全用戶定義是互相可見的。但是,用戶群組及用戶角色則portal專有的,與weblogic server的控制端無任何關(guān)系。

輸出機(jī)制

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

skeleton.beginRender

layout.beginRender

portlet.beginRender

portlet.endRender

layout.endRender

skeleton.endRender

WebLogic Portal設(shè)計(jì)模式

Singleton模式

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

Factory模式

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

       Factory:ProfileFactory

       Object:ProfileWrapper

Visitor模式

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

       vistor:ControlVisitor 、

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

       Element:UIControl

       ConcreteElement: PresentationControl

Facade模式:

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

       類:EventService

State模式:

       類:Event

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

Observer模式

       事件機(jī)制使用了Observer模式

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

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

Abstract Factory模式

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

WebLogic Portal集成

遠(yuǎn)程Portlet

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

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

       其框圖見下:

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

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

集成OA

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

單點(diǎn)登錄SSO

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

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

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

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多