来源:CSDN 作者:smallnest 出处:巧巧读书 2006-05-14
 
Portlet概念
Portlet 是可以提供对基于 Web 的内容、应用程序和其它资源访问的可重用组件。可通过 portlet 访问 Web 页面、web 服务、应用程序和成为企业组合的内容供给。公司可以创建他们自己的 portlet 或从第三方 portlet 目录中选择 portletportlet 是打算被组装成更大的门户网站页面,其中同一 portlet 的多个实例为每个用户显示不同的数据。
从用户的角度来看,portlet 是门户网站站点中提供特定服务或信息(例如,提供日历和新闻)的窗口。从开发者的角度来看,portlet 是可插入的模块,它们被设计成在 Portal Server portlet 容器中运行。
portlet 容器提供了一个运行时环境,在这个环境中实例化、使用和最终破坏 portletportlet 依靠门户网站基础结构来访问用户概要文件信息、参与在窗口和操作事件中、与其它 portlet 通信、访问远程内容、查找凭证以及存储持久数据。Portlet API 提供了这些功能的标准接口。portlet 容器不是一个类似于 servlet 容器的独立容器。它是以 servlet 容器上的瘦层的方式实现的,并重用 servlet 容器提供的功能。
 
下面是典型的事件流程,当用户访问portal页面的时候:
 
²        客户端在验证后向portalhttp请求。
²        portal接收请求。
²        portal判断是否有包含请求,并请求包含的动作指向的portlet是和这个portal页面相关联的。
²        如果含有动作的目标portletportal发请求给portlet容器去执行相应的portlet的动作。
²        portal通过portlet容器调用portlets,去获得内容片断,这个片断可以包含在portal页面中。
²        portal集合portlets的输出内容到1portal页面中,并把页面返回客户端。
Portlet产生标记片断。Portal通常给portlet产生的标记片断加了标题,控制按钮和其他的装饰,这个新的片断叫portlet窗口。然后portal整合portlet窗口到完整的文件,portal页面。
   [Portal参考手册]Portlet概念(图一)
Portlets 运行在portlet容器内。Portlet容器接收portlets产生的内容。典型的,portlet容器把portlet内容传到portalPortal server根据portlet产生的内容创建portal页面,并传送给客户端,由客户端显示。
[Portal参考手册]Portlet概念(图二)
 
       客户使用客户终端访问portal。在收到请求后,portal判断满足请求的portlets列表。Portal通过portlet容器,调用portletsPortalportlet产生的片断创建portal页面,同时把页面返回给用户。
[Portal参考手册]Portlet概念(图三)
用户可以根据需要通过增删Portlet的方式配置他们的页面。在Windows或者XWindows窗口程序中,窗口有最大化和最小化的窗口状态,portlet也有窗口状态。窗口状态是portal页面空间数量的指示器,它被赋值给portlet产生的内容中。当调用portlet,容器提供当前窗口状态给portletPortlet使用窗口状态决定多少信息需要renderPortlets能在处理action请求时,编程的改变他们的窗口状态。Portlet规范定义了3种窗口状态,normalmaximizedminimized
Normal窗口状态
 
Normal窗口状态表示portlet要和其他的portlet共享页面。它也表示目标设备限制了显示能力。因此,portlet限制输出的尺寸。
 
MAXIMIZED窗口状态
 
Maximized窗口状态表示portletportal页面唯一的portlet,或portlet相比与其他的portlet有更多的空间。当窗口状态是Maximized时,portlet产生更多的内容。
 
Minimized窗口状态
 
portletminimized状态,它将是最小限度的输出,或不输出。
 
 
Portlet模式指出porlet的功能。一般来说,portlet执行不同任务,依靠当前执行的任务的创建不同内容。Portlet模式告诉portlet他们执行什么任务,生产什么内容。当调用portlet,容器提供当前portlet模式给portletPortlets在处理action请求时能编程的改变他们的portlet模式。
 
Portlet有四种模式:viewedit, helpconfig
可用的模式根据用户的角色受到限制。例如,匿名用户只能使用viewhelp模式,而验证用户可以使用edit模式。
举例来说,一个用户可以定制的股票信息PortletView模式允许用户查看股票列表,Help模式提供给用户帮助手册,Edit模式允许用户定制自己关注的股票列表,而Config模式允许管理员改变股票服务的一些配置。
VIEW 模式
 
View模式期待的功能是产生标记反映当前的状态给portlet。例如,view模式的portlet包含1个或多个框,用户可以操作或交互,或组成不需要任何用户交互的的静态内容。
Portlet开发者需要通过覆盖doView方法实现view portlet模式的功能。
 
EDIT 模式
 
通过edit模式,portlet提供内容和logic让用户用户化portlet的行为。Edit模式包含一个或多个框,用户可以定位并输入他们的用户化数据。
 
典型的,edit模式,将设置或修改portlet的参数。Portlet开发者需要通过覆盖doEdit方法实现edit portlet模式的功能。
 
HELP 模式
 
当在help模式,portlet提供portlethelp信息。这个help信息将会是简单的框,用连贯的正文或上下文敏感的帮助阐明了整个portletPortlet开发者需要通过覆盖doHelp方法实现help portlet模式的功能
 
CONFIG 模式
 
当在config模式,管理员可以进行相应的操作。Portlet开发者需要通过覆盖doConfig方法实现view portlet模式的功能。
 
因为Portlet继承于Servlet,所以portlet可以打包成war文件发布到Portal容器中。管理员可以发布或者卸载portlet。在一个Portlet Web 应用中,一个portlet描述文件用来描述portlet的属性和初始化信息。一个Portlet定义包含一个application portlet和多个concrete portlet。一个Application Portletportlet容器中仅存在一个实例。一个concrete Portlet实例一个使用额外的数据实例化的portlet
 
servlet规范2.3定义如下:
servlet是基于web组件的,由容器管理的,产生动态内容的java技术。类似其他的java组件,servlets是平台独立的java类,它被编译为中间字节码,能被动态加载和运行在java激活的web server。容器,有时称为servlet引擎,是web server的扩展,它提供servlet功能。Servlets通过由容器执行的请求/返回模式和客户端交互。”
 
Portlets servlets有很多相似性:
 
? Portlets也是基于web组件的java技术
? Portlets由专门的容器管理。
? Portlets产生动态内容。
? Portlets生命周期由容器管理。
? Portlets请求/返回模式和客户端交互。
 
Portlets servlets不同的地方:
 
Portlets只产生标记片断,而不是完整的文档。Portal把这些整合到portal页面中去。
Portlets不是直接和url绑定。
web客户端通过portal系统和portlets作用。
Portlets有更精确的请求处理,action请求,render请求。
Portlets有预先定义的portlet模式和窗口状态,这些指出portlet的功能,和portal页面中实时状态的数量。
Portlets1portal页面中能存在好几次。
 
Portletsservlets不包含的功能:
 
Portlets有访问和储存持久化参数和用户化数据的方法。
Portlets能访问用户profile信息。
Portletsurl改写的功能去产生新的链接,这使得portal server可以在不知道的情况下,在页面片断中创建链接和动作。
Portlets能保存瞬时信息在不同范围的portlet session中:应用程序宽度的范围,和portlet私有的范围。
      
portlet没有而servlet有的功能:
 
设置返回字符的编码
设置返回的http
portal请求的客户端 URL
 
Spirit框架提供类内建的基于角色(Role)的的访问控制支持。Spirit使用portlet Web Application作为组。用户可能属于一个或者多个组(也就是说,用户可以访问一个或者多个Web Application)。
    Core Portlet API 提供了详细的编程接口。Portlet Service了÷框架提供了一个清晰的接口,用来产生可重用的服务。
    一个portlet的集成关系如下:
javax.servlet.http.HttpServlet
 
|__com.kuaff.spirit.portlet.Portlet
|__com.kuaff.spirit.portlet.PortletAdapter
|__
com.kuaff.spirit.portlet.AbstractPortlet
    |__
com.samples.MyPortlet