JSR168PORTLET标准必备资料.docx

上传人:b****6 文档编号:8900591 上传时间:2023-02-02 格式:DOCX 页数:45 大小:77.26KB
下载 相关 举报
JSR168PORTLET标准必备资料.docx_第1页
第1页 / 共45页
JSR168PORTLET标准必备资料.docx_第2页
第2页 / 共45页
JSR168PORTLET标准必备资料.docx_第3页
第3页 / 共45页
JSR168PORTLET标准必备资料.docx_第4页
第4页 / 共45页
JSR168PORTLET标准必备资料.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

JSR168PORTLET标准必备资料.docx

《JSR168PORTLET标准必备资料.docx》由会员分享,可在线阅读,更多相关《JSR168PORTLET标准必备资料.docx(45页珍藏版)》请在冰豆网上搜索。

JSR168PORTLET标准必备资料.docx

JSR168PORTLET标准必备资料

JSR168PORLET标准手册汉化整理

 

PLT.1.1序言参考jini

许多大型企业的网站,渐渐采用了portalserver作为开发的基础.至于什么是portal呢,中文翻译为"门户网站"。

有人可能想..天杀的..门户网站不是就像yahoo,pchome,yam等等。

不过,我们现在讨论的portalserver,不是那么地简单,基本上yahoo,pchome,yam那些只能称为搜索引擎的门户网站。

如果你从来沒有用过portalserver或是似懂非懂..大家可以连结到MyNetscape或MyYahoo去注册一个帐号。

因为MyNetscape的样式比较好看,所以我接下来就以MyNetscape为介绍的范例。

如果你第一次接触到portal,你会惊讶的发现...哇..为何一个网站里面充满了这么多小窗口.我们称这些小窗口叫做"portlet",而且每个小窗口都存在着独立的信息与内容,可以放到最大化,缩小,还原,关闭等等。

当你登陆之后,可以选择及调整自己portlet的配置,也可以设置自己喜爱的风格与样式,更可以设置每个portlet的资料配置。

这种以客户为上帝的系统,就是我们将要介绍的portal。

PLT.2.1什么是Portal(门户)?

Portal的组成可以分为三部份

(1)PortalServer

(2)PortletContainer(3)Portlet

1)PortalServer的定义是

一个Portal(门户网站)就是指一个Web-based的系统,通常都会提供个人化设置、单一登陆、以及由各种不同来源或不同网站取得各式各样的信息,并且将这些信息放在网页之中组合而成的呈现平台,门户网站会有精巧的个人化设置去提供定制的网页,当不同等级的使用者来浏览该页面将获得不同的信息内容。

2)PortletContainer的定义是

portletcontainer是提供portlets执行的环境,包含了许多portlets并且管理他们的生命周期,他也会永远保存着portlets的喜好设置,一个portletcontainer接收到来自portal的请求后,接着将这个请求传递给存在container的portlet执行。

portletcontainer没有义务去组合portlets产生的信息內容,这个工作必须由portal来处理。

portal和portletcontainer可以放在一起视为同一个系统的组件,或者分开成为两个独立的组件。

PLT.2.2什么是Portlet?

一个Portlet是以Java技术为技术的Web组件,由PortletContainer所管理,专门处理客户的request以及产生各种动态的信息内容。

Portlets为可插式(pluggable)的客户界面组件,提供呈现层成为一个信息系统。

这些由portlet产生的内容也被称为片段(fragment),而片段是具有一些规则的Markup(HTML、XHTML、WML),而且可以和其他的片段组合而成一个复杂的文件。

而Portlet中的内容正常来说是与其他Portlet的内容聚合而成为一个Portal网页。

而Portlet的生命周期是被PortletContainer所管理控制的。

客户端和portlets的互动是由portal通过典型的request/response方式实现,正常来说,客户会和portlets所产生的内容互动,举例来说,根据下一步的连接或者是确认送出的表单,结果portal将会接收到portlet的动作,将这个处理状况转向到目标portlet。

这些portlet内容的产生可能会因为不同的使用者而有不同的变化,完全是根据客户对于这个portlet的设置。

PLT.2.3portlet与servlet的关系?

 

Portlet和Servlet算是兄弟有那么一点点相似却又有那么一点点不同,因为Servlet和Portlet不尽然相同,所以研究小組決定将portlets定义成为一个新的组件,因此定义了portlets一个新的并且明确的界面与行为。

为了尽可能与现有的servlet结合达到重复使用的目的,portlet的规范利用了servlet的规范,许多观念都很相似的,结合portlets、servlets及jsp在同一个网站系统中,我们称为portletapplication。

在同一个portletapplication中,他们将分享同一个classloader,context及session。

1)Portlet和Servlet的相似之处

@portlets也是Java技术的web组件

@portlets也是有特定的container在管理

@portlets可以动态产生各种内容

@portlets的生命周期由container所管理

@portlets和客户端的互动是通过request/response的机制

2)Portlet和Servlet也有一些不同

@portlets只产生markup信息片段,不是完整的网页文件。

而Portal会将所有的Portletmarkup信息片段放到一个完整的Portal网页。

@portlets不会和URL有直接的关系

@客户端必须通过portal系统才能和portlets互动

@portlets有一些定义好的request处理,actionrequest以及renderrequest。

@portlets默认定义portletmodes及窗口状态可以指出在网页中该portlet的哪个功能正在执行及现在的状态。

@portlets可以在同一个portal网页之中存在多个。

3)Portlet有一些附加的功能是Servlet所没有的

@Portlets能够存取及储存永久配置文件及定制资料。

@portlets可以存取使用者数据

@portlets具有URL的重写功能在文件中去动态建立连结,允许portalserver不用去知道如何在网页的片段之中建立连结及动作。

@portlets可以储存临时性的数据在portletsession之中,拥有两个不同的范围:

application-widescope及portletprivatescope。

4)Portlet不具有一些功能,但是Servlet却有提供

@servlet具有设置输出的文字编码(charactersetencoding)方式

@servlet可以设置HTTP输出的header

@servlet才能够接收客户对于portal发出的URL请求

PLT.3.1从Portlets到Servlets/JSPs的关联

Portlets可以调用servlets,JSPs和JSPs标签库来产生内容。

一个portlet可以使用请求发送者来调用servlets和JSPs,就像servlet使用调用其它servlets和JSPs一样。

为了使portlets和servlets之间整合得天衣无缝,Portlet规范允许调用更多的servlet对象。

当servlet或JSP在portlet中被调用时,传给servlet或JSP的request是以portletrequest为基础的。

同样,传给servlet或JSP的response是以portletresponse为基础的。

被包括的servletrequest可使用portletrequest的Attributes设置。

portlet和被包括的servle或JSP分享同一个的输出流。

portlet会话中的Attributes设置可以来自于servlet会话,反之亦然。

PLT.3.2Servlet容器和Portlet容器的关系

portlet容器是servlet容器的扩展,所以一个portlet容器可以构建于一个已存在的servlet容器之上或者可能实现servlet容器的全部功能。

无论portlet容器如何实现,它的运行环境总是假定它支持Servlet2.3规范。

 

PLT.4.1ElementsofaPortalPage(Portal页面的结构)

一个portlet能产生标记片段。

portal通常在portlet产生的标记片段中加上标题,控制按钮及其它修饰。

这个新的标记片段称为portlet窗口。

然后portal合并这些portlet窗口为一个完整的文档,即portal页面

 

修饰和控件

标题portlet片段

portlet窗口

portal页面

 

PLT.4.2PortalPageCreation参考kojilin

portlets在portletcontainer内执行,portletcontainer接收portlets产生的内容。

通常portletcontainer将这些内容提交给portalserver,portalserver从这些内容建立portalpage然后将它传给客户端。

(参考SpecFigure4-2)

 

PLT.4.3PortalPageRequestSequence

使用者经由客户端设备(例如浏览器)存取portal,portal根据接收到的request决定哪些portlets需要被执行以满足需求。

portal通过portletcontainer呼叫portlets,然后由portlets产生的片段建立portalpage,再传回客户端呈现给使用者。

 

PLT.5ThePortletInterface

Portletinterface是PortletAPI中主要的抽象接口,所有的portlet不是直接操作这个接口,就是继承了

这个接口类。

PortletAPI包含GenericPortlet类,此类提供了一些预设的功能;开发人员应该继承、直接或间接地拓展

GenericPortlet类,以写出自己的portlet。

PLT.5.1NumberofPortletInstances

PortletContainer如何产生portletinstances是被布署描述(deploymentdescriptor)中portlet的

定义所控制的。

在没有分布式的环境中(默认情况),portletcontainer必须实例化一个并且只能使用一个portlet物件来对应一个portlet定义。

另一方面,在某种情况下,portlet在web.xml部署描述文件中被部署为分布式环境下的portlet应用程序的一部份。

那么,在同一虚拟机(VM)中,同一部署描述文件内,同一portlet定义下,一个portlet容器只能实例该portlet一次。

PLT.5.2PortletLifeCycle

一个portlet有着良好的生命周期管理,定义了怎样装载,实例化和初始化,怎样握持来自客户端的请求及怎样送出服务。

这个portlet生命周期由portlet接口的init,processAction,render和destroy方法来表达。

PLT.5.2.1LoadingandInstantiation

portletcontainer负责载入和实例化portlet。

当portletcontainer运行portletapplication或者

延迟至portlet需要服务使用者请求时,portlet就会被载入和实例化。

在Webapplication下的portletapplication中,portletcontainer用来载入portlet的ClassLoader

和Servletcontainer的ClassLoder是相同的。

载入portletclass后,portletclass就被实例化。

PLT.5.2.2Initialization

portlet物件实例化后,portletcontainer还必须初始化portlet,以调用portlet去处理客户端要求。

Protlet经由初始化完成初始高代价的资源(例如在背景扫行的连结),和执行其他只要执行一次的初始工作。

portletcontainer呼叫Portlet接口中init方法来初始化portlet,init方法中portlet的定义由拓展PortletConfig接口的物件来提供。

此configuration物件可取出定义在部署描述的初始化参数(initializationparameter)及ResourceBundle。

此configuration物件亦提供存取描述portletruntime环境的上下文(context)物件。

要了解PortletConfig接口的详细信息,请参考PLT.6PortletConfig章节。

要了解PortletContex接口的详细信息,请参考PLT.10PortletContext章节。

PLT.5.2.2.1ErrorConditionsonInitialization

在portlet初始化期间,portlet物件可能会丟出UnavailableException或PortletException异常。

此时,portletcontainer不能把portlet物件置入已启动的服务,并且portletcontainer必需释放这个

portlet物件。

destory方法不能被呼叫,因为初始化被认为执行失败。

发生failure后,portletcontainer会尝试着重新实例化及初始化portlet。

这个异常处理的规则是:

由一个

UnavailableException指定一个不能执行的最小时间,当此异常发生时,portletcontainer必需等到指定时间过去

后才产生并且初始化一个新的portlet物件。

在初始化过程中所丟出的RuntimeException异常,必需当作PortletException来处理。

PLT.5.2.2.2ToolsConsideration待续

 

PLT.6PortletConfig

PortletConfig物件,提供了在初始化一个portlet时所需要的信息。

同时可以通过此物件取得portletcontext和提供portlettitle-bar信息的resourcebundle。

译者注:

这里提到的“信息”指的是title,short-title,keyword。

PLT.6.1InitializationParameters

通过PortletConfig这个interface所提供的getInitParameterNames和getInitParameter这两个方

法,可以得知在portlets部署描述文件中所定义的portlet初始参数及初始值。

dummyName

dummyValue

PLT.6.2PortletResourceBundle

在Portlets的部署描述文件中,可以设定portlet的基本信息如portlettitle-bar的名称及portlet在portal中的分类名称。

为了显示这些信息,PortletSpec.定义了一些resourceelements让title,short-title,keyword可以根据Locale来显示。

(seethePLT.21.10ResourceBundlesSection)

在portlets部署描述文件中,这些resourceelements可以直接放在portlet的定义中,亦或是写在

resourcebundle(*.properties)里。

以下是一个定义portlet信息的例子:

StockQuotePortlet

Stock

finance,stockmarket

假如这些信息的定义是写在resourcebundle中的话,此时这个portlet必须提供一个resourcebundle

的名字。

示例如下:

com.foo.myApp.QuotePortlet

假如portlet定义提供了一个resourcebundle的话,portlet-container则必须通过ResourceBundle

来lookup这些设定值。

假如rootresourcebundle没有设定这些信息,且同时这些信息是写在的话,portletcontainer必须把他们都设到rootresourcebundle里。

TCKPORTLET:

SPEC:

24提到:

假如使用ResourceBundle资源文件来定义,则Portletcontainer必须先lookup在ResourceBundle里定义的信息。

若是ResourceBundle没有这些信息,或是没有使用ResourceBundle来定,则portletcontainer必须lookup写在定义文件里的信息。

假如ResourceBundle和定义文件里都没有定义这些信息,则portletcontainer必须以空字符串来回

传。

假如在定义portlet时,没有定义resourcebundle,而是把信息定义在部署定义文件中,此时portlet

container则必须产生一个ResourceBundle,并且把这些信息放进来。

而使用的key值必须遵照PLT.21.10ResourceBundlesSection所定义的。

GenericPortlet的rendermethod在取得portlet的title名称时,就是使用PortletConfig的

ResourceBundle物件,通过相关的ResourceBundle设定或是直接写在portlet部署描述文件中的资料而来。

 

PLT.7PortletURLs

Portlet也许会在自己的内容里出现URLlink,同时这个URLlink是参考到自己本身。

比如说,当User在操作一个portlet里面的URL时(也就是说点选一个链接或是submit一张表单)。

对portal而言,此时是一个新的请求,而这个请求的目标就是那一个portlet。

那些URLs就称作为portletURLs。

PLT.7PortletURL

PortletAPI定义了一个PortletURL的接口。

Portlets必须用这个PortletURL物件来产生portletURLs。

在产生PortletURL的同时,PortletURL也会呼叫RenderResponse接口定义的两个方法:

createActionURL和createRenderURL。

createActionURL用来生成actionURLs。

createRenderURL用来生成renderURLs。

由于一些portal/portlet-containers在实际操作时可能会附加一些querystring在urllink上,以期提供这些container所需要的一些内部状态的参数等等,所以portlet开发者不应指定表单的传送方法为HTTPGET。

ex:

WebLogic会对urllink加上一些参数的例子。

http:

//localhost:

7001/my.portal?

_nfpb=true&_pageLabel=book_33

一个renderURL是对某些特殊类型actionURLS的一种优化。

在renderportletURL的过程中Portal/portlet-container不允许调用目标portlet的processAction方法。

Portal/portlet-container必须确保当在建构renderURL时所设定的参数,也能变成是在请求这个portlet时的参数。

RenderURLsshouldnotbeusedfortasksthatarenotidempotentfromtheportletperspective。

点击render过的URL发出的请求,portlet所产生的结果有可能会因为错误状况,缓存失效,外部资料的改变等等,而有所影响。

RenderURLs不应放在form表单里,因为portal/portlet-container有可能因此而忽略form表单的参数。

Portlets可以通过PortletURL所提供的setParameter和setParameters两个方法,对PortletURL物件设定一些应用程序的特殊参数。

setParameter这个方法必须把以前所设定的同名参数给取代掉。

所有portlet所加到PortletURL物件上的参数都必须为该portlet的可用请求参数。

Portlet开发者必须注意到renderrequest的请求参数并非在产生PortletURL时就被使用到。

portlet-container必须把加到portletURL物件上的参数名和值以“x-www-form-urlencoded“方式编码。

在这些参数名和值被添加到portletUR物件上之前,portlet开发人员不可以编码它们。

如果protal/portlet-container

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 思想汇报心得体会

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1