weblogic P81展现原理研究.docx
- 文档编号:7161707
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:15
- 大小:850.52KB
weblogic P81展现原理研究.docx
《weblogic P81展现原理研究.docx》由会员分享,可在线阅读,更多相关《weblogic P81展现原理研究.docx(15页珍藏版)》请在冰豆网上搜索。
weblogicP81展现原理研究
WLP8.1展现原理研究
作者
陈渚
版本
V1.0草稿
日期
2004年5月13日
类型
内部文档
TableofContent
1.RequestOverview
在文章开始之前,我们先看下面的三张图:
(图一)
(图二)
(图三)
图一是WeblogicPortal8.1自身带的例程的运行界面,在页面的上方有一栏菜单选项,页面的主体是三个Portlet。
图一的界面显得比较单调,而图二、三则分别是两个采用WeblogicPortal8.1实现的商业网站,可以看到商业网站不仅仅是颜色多样,菜单栏的显示和Portlet的布局方式也有所不同。
WeblogicPortal8.1自身携带的表现方式主要是做一个示范作用,往往不能直接应用在实际的应用中,因此开发商就要根据客户的需求定制相应的显示界面。
关于Portal应用界面的需求一般包括:
●对Portal表现结构的需求,例如各个摆放位置、提供树形菜单等;
●对Portal外感感觉的需求,例如Portlet标题的颜色、字体等;
●应该具备多种显示方案,可以动态选择;
●最终用户能够定制自己的表现方案
本文的目的是说明如何在WeblogicPortal8.1展现框架上进行定制和扩充。
首先说明Portal应用的结构,然后说明其渲染机制和原理,最后说明如何定制和扩充。
2.PortalComponentTree,SingleFileandStreamingPortal
2.1.PortalComponentTree
当我们提及Portal的时候,首先第一个问题就是“什么是Portal?
”,这里是BEA的官方回答(
一个Portal应用可能包含十几个到上百个Portlet,为了分门别类地管理、显示这些Portlet,需要引入新的组件对Portlet进行组织。
在WebLogicPortal8.1中,Portal应用的体系结构如下图:
(图四)
从图中可以看到,一个Portal应用是一个JavaWeb应用,内部可以包含多个Portal,每个Portal可以包含多个Desktop(桌面)。
Desktop是用户访问Portal的入口,一个Desktop包含多个Book和Page,Book之间可以自保函。
通过Book和Page的组织,用户访问到具体的Portlet应用。
在WebLogicPortal8.1中,Portal体系结构中的各部分称之为PortalComponent,它们的组称之为PortalComponentTree(组件树)。
当用户访问Portal应用的时候,实际上是在访问这棵组件树,那么这个组件树是如何产生的呢?
2.2.SingleFilePortal
当开发人员通过WebLogicWorkshop创建Portal应用的时候,将会创建相应的.portal文件。
.portal文件实际上对应的是一个Desktop,是一个xml格式的文件,包含了PortalComponentTree的完整内容,所以称之为SingleFilePortal。
如下图:
因为在一个文件中就包含PortalComponentTree的完整内容,所以在显示的时候不需要使用到数据库,适合于在开发阶段使用。
由于以文件形式存放,所以无法对SingleFilePortal进行个性化,每个用户都是访问同一个文件;同时SingleFilePortal的Book、Page等组件也不能进行授权。
在开发过程中要注意的是,由于SingleFilePortal的特性,当开发人员应用某个功能,例如为.portal文件指定一个Look&Feel的时候,其实是把这个Look&Feel的说明拷贝到.portal文件中。
如果之后开发人员在去修改这个Look&Feel,对.portal文件是没有影响的,只能重新为.portal文件指定Look&Feel才能导致新的修改会拷贝到.portal文件中。
2.3.StreamingPortal
一个Portal应用的结构,往往不是在开发阶段确定的,而是在系统上线后有管理人员根据实际情况决定。
WebLogicPortal8.1提供基于Web界面的管理控制台,管理人员可以通过控制台创建相应的Portal应用。
如下图:
通过控制台创建的Portal应用,其PortalComponentTree是存放在数据库中,最终用户访问Portal应用的时候,系统就从数据库读取信息,构造出相应的PortalComponentTree,并将其展现为HTML。
这种形式的Portal在WebLogicPortal8.1中称之为StreamingPortal。
StreamingPortal中的各个组件是存放在数据库中,每个组件都可以单独被管理,管理员可以设置每个组件的授权控制信息。
对于同一个Portal应用,每个用户的PortalComponentTree可以有所不同,这样就能实现应用的个性化。
WebLogicPortal8.1提供VisitorTools工具,可以让最终用户设计自己的PortalComponentTree。
3.HowPortalComponentsAreRendered?
从上一章我们知道,无论是SingleFilePortal还是StreamingPortal,都是提供一颗PortalComponentTree,那么用户最终看到的HTML页面怎么来的呢?
3.1.RenderingProcess
为了简单起见,我们假设有如下的一个简化的PortalComponentTree:
最终需要转换为如下的HTML页面:
为了做到这一点,直接的方法开发人员实现构造出整个HTML,然后在适当的地方插入Portlet的内容。
但这样的做法显然过于固定,Portal的渲染引擎应该能够根据不同的组件树动态生成HTML页面。
Portal的展现引擎能够遍历组件树,那么在这个遍历的过程中就能够根据组件树的结构生成HTML页面框架,如下:
但是渲染引擎如何渲染每一个组件呢?
例如上图中,对于Page组件,应该产生什么HTML代码?
这个问题的解决方法就是让组件来决定自己应该如何渲染。
这样遍历过程中,渲染引擎只需调用每个组件的渲染方法,将所有组件的渲染输出组合起来,就成了最终的、完整的HTML页面。
3.2.WLPLook&Feel
在WebLogicPortal8.1中,将界面输出的机制称之为:
Look&Feel,有以下部分组成:
●Shells
●Skeletons
●Skins
●NavigationMenus
●Layouts
●Themes
其中最主要的是Skeletons和Skins两部分。
3.2.1.Sekletons
Skeletons部分负责将PortalComponentTree渲染为HTML代码,由一系列的JSP文件组成,这些JSP文件的名称大部分都是固定的,分别对应不同的Portal组件,如下表:
Thisportalcomponent...
usesthisskeletonJSP...
to:
Desktop
desktop.jsp
InserttheHTMLdocumentdeclarationsandinsert
--BeginDesktop-->and
--EndDesktop-->comments.
Shell
shell.jsp
InserttheHTMLdocument'sopeningandclosingtagandinsert
--BeginShell-->and
--EndShell-->comments.
Shell-The head>tagina.shellfile head.jsp InserttheHTMLdocument'sopeningandclosing --BeginHead-->and --EndHead-->comments. Shell-The body>tagina.shellfile body.jsp InserttheHTMLdocument'sopeningandclosing Shell-The header>tagina.shellfile header.jsp Renderthedesktop'sheaderregion. Shell-The footer>tagina.shellfile footer.jsp Renderthedesktop'sfooterregion. Book book.jsp Renderthebookframeworkandstyles. NavigationMenu singlelevelmenu.jsp RendertheSingleLevelMenuprovidedbyWebLogicPortal. NavigationMenu multilevelmenu.jsp RendertheMultiLevelMenuprovidedbyWebLogicPortal. NavigationMenu submenu.jsp Usedbymultilevelmenu.jsptocreateabook'snavigationlinks.Alsoprovidesrenderingfornestedbooksandpages. Page page.jsp Renderapageframeworkandstyles. Layout-The gridLayout>tagina.layoutfile gridlayout.jsp RenderplaceholdersinthelayoutusingtheGridLayoutstyle. Layout-The borderLayout>tagina.layoutfile borderlayout.jsp RenderplaceholdersinthelayoutusingtheBorderlayoutstyle. Layout-The flowLayout>tagina.layoutfile. flowlayout.jsp RenderplaceholdersinthelayoutusingtheFlowlayoutstyle. Layout-The placeholder>taginthe.layoutfile placeholder.jsp RenderanindividualplaceholderinaLayout. Portlettitlebar titlebar.jsp Renderaportlettitlebar. Portlettitlebarbuttonsforfloatingwindows buttonfloat.jsp Renderabuttonthatlaunchesseparateportletmodewindows(forexample,EditandHelp). Portlettitlebartogglebuttons togglebutton.jsp Renderabuttonthattogglesbetweenportletstates(forexample,Minimize/RestoreandMaximize/Restore). PortlettitlebarDeletebutton buttondelete.jsp Renderabuttonthatremovesaportletfromapage. Portlet error.jsp Displayerrormessagesinaportlet. Portlet webflowportlet.jsp RenderaWebflowportletcreatedinpreviousversionsofWebLogicPortalandrunninginacompatibilitydomain. Book,Page,andPortlet window.jsp Renderingthecontainerforthecontentarea. Theme theme.jsp Renderbooks,pages,andportletsinthethemesappliedtothem. 通过Skeletons部分,可以决定Portal应用的最终渲染出来的结构。 在WebLogicPortal8.1中,系统还能根据接入设备的不同选择不同的Skeleton,以适应不同的要求。 例如通过PC机浏览和通过PocketPC(屏幕小)来访问。 3.2.2.Skins Skins部分负责界面的图像、颜色、字体等部分,主要影响Portal应用的观感。 对于同一个Portal应用,选择不同的Skin,能够给最终用户带来不同的感觉。 在WebLogicPortal8.1中,一个Portal应用的外观可以分为如下的部分: 这些部分的外观分别有以下的CSS文件所控制: IfthebookissettoSingle-LevelMenu Description Style(s) Stylesheet 1 Top-levelunselectedmenuitem .bea-portal-book-primary-menu-singlea book.css Rolloverontop-levelunselectedmenuitem .bea-portal-book-primary-menu-singlea: hover book.css 2 Top-levelselectedmenuitem .bea-portal-book-primary-menu-singlespan book.css 3 Top-levelmenubackground .bea-portal-book-primary-menu-single book.css 4 First-levelunselectedmenuitem .bea-portal-book-menu-singlea book.css Rolloveronfirst-levelunselectedmenuitem .bea-portal-book-menu-singlea: hover book.css 5 First-levelselectedmenuitem .bea-portal-book-menu-singlespan book.css 6 First-levelmenubackground.Alsoappliestothebackgroundthatdisplayssub-booksandpages. .bea-portal-book-single book.css 7/8 Second-and-higher-levelselectedmenususethesamestyleclassesasthefirst-levelmenus. book.css 9 Portlettitlebar background: .bea-portal-window-titlebar title: .bea-portal-window-titlebar-title window.css 10 Portlettitlebaricons Thesearenotdeterminedbystyleclasses.Theycomefromtheskin's/imagesdirectory.Thisinformationispresentedforconvenience. N/A 11 Portletborder .bea-portal-window window.css 12 Pagebackground .bea-portal-book-page book.css 13 Portletcontent(mainlyforpadding) Thecontentintheportletitself(JSP,HTML,orJPF)arenotskin-relatedandcontrolsthestylesusedwithinitself. .bea-portal-window-content window.css IfthebookissettoMulti-LevelMenu Description Style(s) Stylesheet 1 Top-levelunselectedmenuitem .bea-portal-book-primary-menu-roota book.css Rolloverontop-levelunselectedmenuitem .bea-portal-book-primary-menu-roota: hover book.css 2 Top-levelselectedmenuitem .bea-portal-book-primary-menu-roota book.css 3 Top-levelmenubackground .bea-portal-book-primary-menu-root book.css 4 Sub-levelmenuitemsinadrop-downlistfromthetop-levelmenu(notshowninthefigure) .bea-portal-book-primary-menu-nested-itema book.css 3.3.Summary 让我们来看看在WebLogicPortal8.1中,Portal界面是如何被渲染出来的: 1、在开发过程中,开发人员创建出Portal应用的相应组件 2、运行过程中,根据开发人员事先创建的组件以及相关的配置,Portal系统在内存中创建出相应的Portal组件树 3、渲染引擎调用相关的Skeleton部分,在渲染过程中,JSP页面还需要引用相关的Skin信息 4、融合Portlet自身的输出,组成最终的HTML页面 在接下的一章,我们将讲述开发人员如何创建自己的渲染规则。 4.HowtoCustomizetheLook&Feel 在本章中,并不试图提供完整的Look&Feel开发手册,这个部分读者可以参考WebLogicPortal8.1的在线帮助以及相关的例程。 本章着重讲述的Look&Feel开发过程中容易碰到的一些问题。 4.1.beginRender&endRender 打开每个Skeleton的JSP文件,我们都可以发现里面包含着来个JSPTag: beginRender&endRender。 这两个Tag是如何作用的呢? 让我们再来回顾Portal的渲染过程: 在遍历Portal组件树的过程中,除了叶子节点外其他节点都会经过两次。 在上图中,我们可以看到Page组件的输出内容是需要包含Portlet组件的输出内容,为了做到这一点,就必须: 1、首先输出Page组件的开始内容 2、然后输出Portlet的内容 3、最后输出Page组件的结束内容 在WLP的渲染过程中,每个JSP页面实际上会被调用两次,通过对当前状态的判断,每次只有beginRender&endRender其中的一个Tag起作用,从而能够在一个JSP文件中分别输出开头和结尾两部分。 4.2.ControlAPIOverview 在渲染的过程中,除了直接输入HTML代码之外,我们往往还需要更多的信息,包括当前组件的属性(例如标题等);另外在构造菜单的时候还需要了解组件树的结构。 在WebLogicPortal8.1中,每个展现的组件都是继承于uix.servlets.controls.PresentationContext类,这个类提供了获取属性和获取所有子组件的方法,通过这些方法我们可以做到: 1、获取每个组件的属性信息 2、在程序中遍历整个组件树 那么开发人员如何获得这个类的具体实例呢? 每个组件类都提供了获取自身实例的静态函数,开发人员可以在JSP页面踵调用适当的静态函数获得相应的实例。 PagePresentationContextpageCtx= PagePresentationContext.getPagePresentationContext(request); BookPresentationContextbookCTX= BookPresentationContext.getBookPresentationContext(request);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- weblogic P81展现原理研究 P81 展现 原理 研究
![提示](https://static.bdocx.com/images/bang_tan.gif)