Portlet规范笔记
一、Portlet什么周期
1、Loading and instantiation
Portlet container负责装载和实例化portlet,装载和实例化过程发生在portlet容器启动portlet application时,或者延迟到容器决定portlet需要处理一个请求时。
Porlet 容器必须使用同一个calssloader来装载portletclass,之后容器初始化portlet
2、初始化
实例化portlet对象后,容器在调用potlet处理请求之前必须初始化portlet。Portlet容器调用portlet对象的init方法来初始化,一般是初始化一些代价高的资源和执行一些一次性的操作。
初始化中出现异常,抛出unavailableException 或者portletException的话,portlet容器不会发布这个portlet,destory方法也不会调用。容器可能会在错误发生后在制定的任何时候重新实例化和初始化porlte,初始化中抛出的runtimeexception必须作为portletexception来处理。
3、portal window
The portlet definition 可能包含一些默认值的参数属性。他们被用来创建perferences objects。
at runtime,当处理一个请求时,a portlet object和一个prefenrences object,一般一个portlet是在关联的参数对象的属性的基础上自定义它的行为和内容的。
默认一个参数对象使用在部署描述符里定义的初始参数值来构建。
4、请求处理
Porlet接口提供了两个方法来处理request,processAction和render方法。
调用ProcessAction的请求称为action request,调用render的请求成为render quest。
一般,客户端请求是通过portles创建的url来触发的,portlet url分为action url和render url两种。
当客户端发起一个action url是,容器先调用portlet的processaction,处理完成之后再调用portal页面里所有的除了被缓存里的portlet的render方法。当客户端发起一个render url时,只调用render方法,不包括已经缓存的portlet
Action request
Processaction方法有actionrequest和actionreponse两个参数
ActionRequest提供一些actionrequest 的parameters、window state、portlet mode,portal context、portlet session、portlet preferences的信息。
ActionResponse可能用来修改portlet mode和portlet window state
在processaction里修改的状态和权限必须在后续的render请求里生效。
Render request
两个参数RenderRequest,RenderResponse
RenderRequest的功能类似ActionRequest,RenderRequest使用writer或者代理给jsp或servlet来产生portlet 的content。
GenericPortlet类提供了一些处理render request的默认功能和便利的方法。它的render方法根据portlet配置文件指定的portlet title然后调用doDispatch方法。doDispatch方法根据portlet mode调用相应的方法(doView,doEdit,doHelp);如果window state是minimized(最小化)时,这个render方法就不调用任何方法。
对线程处理requset
Portlet容器通过在不同的线程上的并发运行来处理同一个portlet的多个并发请求。
处理请求时的exception
A portlet可能会在处理请求时抛出PortletException、PortletSecurityException或者UnavailableException
Portletexception发生时,容器应该clean up request,如果在processaction中抛出此异常,actionresponse的所有操作都必须忽略,并且不调用render方法,但是容器应该继续处理portal page其他的portlets。
UnavailableException指portlet临时或永久不能处理reqeust,如果是永久的话,portlet容器必须立即删除从服务里删除portlet,调用destroy方法然后释放porlet对象。当临时抛出此异常时,容器在临时异常期间可能不会将请求路由到portlet。Portlet可能不会区分这两种unavailableexception,可能都会将其看待为永久性的unavailableexception。
A RuntimeException must be handled as a PortletException.
当一个portlet抛出异常时,容器可能会在portal page里包含一个恰当的错误消息
线程安全
。。。
End of service
当portlet容器决定要把一个portlet从服务里删除时,容器会调用portlet的destroy方法,释放一些资源,保存一些持久性状态。在调用destroy方法之前,应该等待正在处理portlet请求的其他线程处理完毕,可以预定义等待的时间。
一旦destroy方法调用后,容器就不处理所有被删除的portlet的请求。如果在destroy里抛出任何的runtimeException,应该视为destroy成功。
二、portlet config
<portlet> <portlet-info> <title>Stock Quote Portlet</title> <short-title>Stock</short-title> <keywords>finance,stock market</keywords> </portlet-info> <resource-bundle>com.foo.myApp.QuotePortlet</resource-bundle> </portlet>
三、portlet url
PortletURL通过调用RenderResponse的createActionURL和createRenderURL来创建。
PortletURL url = response.createRenderURL(); url.setParameter(“customer”,”foo.com”); url.setParameter(“show”,”summary”); url.setWindowState(WindowState.MAXIMIZED);//设置window state writer.print(“<A HREF=\””+url.toString()+”\”>Summary</A>”);
setSecure方法将url指示是否是安全的url(https or http),如果未设,就和当前请求的安全级别一样。
四、portlet modes
<portlet-app> <custom-portlet-mode> <description>Creates content for Cut and Paste</description> <name>clipboard</name> </custom-portlet-mode> <custom-portlet-mode> <description>Provides administration functions</description> <name>config</name> </custom-portlet-mode> </portlet-app>
五、window states
<portlet-app>
<custom-window-state>
<description>Occupies 50% of the portal page</description>
<name>half_page</name>
</custom-window-state>
</portlet-app>
六、portlet context
初始化参数的访问和servletContex具有同样的效果。和ServletContext功能类似,portletcontext的属性在servletcontext里可见
七、portlet request
7.1Request parameters
1、容器实现参数必须经过encode
2、容器must not 在action request中将参数传播到后续的render request中,如果需要,使用processAction中actionResponse对象的setRenderParameter or setRenderParameters方法
3、如果一个portlte接受一个客户端请求到portal page的另一个portlet的结果的render request的时,参数和之前的render request的一样。
如果是从一个render request到一个action request时,render request的参数必须设置在action request的render parameters,确保参数在多个render request 里传播。
4、Commonly, portals provide controls to change the portlet mode and the window state of portlets. The URLs these controls use are generated by the portal. Client requests triggered by those URLs must be treated as render URLs and the existing render parameters must be preserved.
7.2extra request parameters
容器的实现可能会在portlet url中增加一些extra parameters,用来帮助容器来路由和处理客户端请求。Extra parameters必须对接受请求的portlet不可见。容器应适当的对extra parameters编码来避免名字冲突。
7.3 request attributes
Request Attributes能够在通过portletrequestdispatcher添加的jsp和servlet中共享使用。
7.4request properties
The header of http client request through the following methods of methods of the portletrequest interface。
7.5request context path
If the portlet application is rooted at the base of the web server URL namespace (also known as "default" context), this path must be an empty string.lviii Otherwise, it must be the path the portlet application is rooted to, the path must start with a '/' and it must not end with a '/' character.
7.6 security attributes
getAuthType
getRemoteUser
getUserPrincipal
isUserInRole
isSecure
7.7Response Content Types
getResponseContentTypes容器支持的文本类型
7.8 internationalization
getLocale
7.9portlet mode
getPortletMode
7.10window state
getWindowState
ActionRequest Interface
Extends PortletRequest,增加了对request input stream 的访问
获取uploaded data,getPorletInputStream,getReader
RenderReqeust interface
Extends PortletRequest interface,为定义任何额外的方法。
Request object 的lifetime
每个reqest object在processAction或者render方法调用是有效。
八、Portlet Reponse
PorletResponse接口定义了ActionResponse和RenderResponse的通用功能。ActionResponse接口继承portletresponse接口,此接口可以redirect another url,set render parameters,change the window state of the portlet and change the protlet mode of portlet。
setPortletMode, setWindowState, setRenderParameter or setRenderParameters必须在sendRedirect方法之前设置,否则抛出IllegalStateException,setContentType在getWriter之前设置,否则也会抛出同样的异常。同样setBufferSize应在写入out流之前调用。
Life time同样也只在processAction和render方法调用时存在。
九、portal context
The PortalContext interface provides information about the portal that is invoking the portlet.
十、portlet preferences
。。。
十一、Session
Each portlet application has its own distinct PortletSession object per user session.The portlet container must not share the PortletSession object or the attributes stored in it among different portlet applications or among different user sessions
APPLICATION_SCOPE同一application内的portlet共享,PORTLET_SCOPE单个portlet的session,PortletSession必须存储portlet application所有httpsession里的attributes,portlet application范围的portletsession存储的data在httpsession里是可以访问的。如果httpsession对象被废弃,那么portletsession对象必须也被容器废弃;如果portletsession对象被一个portlet废弃,那么portlet容器必须废弃相关的httpsession对象。
十二、Dispatching Requests to Servlets and JSPs
PortletContext调用getRequestDispatcher或getNamedDispatcher来获得portletRequestDispatcher对象,
十三、User infomation
Portlet application部署描述符必须定义portlet使用的user attribute名字,获得用户信息代码示例如下:
<portlet-app> … <user-attribute> <description>User Given Name</description> <name>user.name.given</name> </user-attribute> <user-attribute> <description>User Last Name</description> <name>user.name.family</name> </user-attribute> <user-attribute> <description>User eMail</description> <name>user.home-info.online.email</name> </user-attribute> <user-attribute> <description>Company Organization</description> <name>user.business-info.postal.organization</name> </user-attribute> … <portlet-app>
Map userInfo = (Map) request.getAttribute(PortletRequest.USER_INFO); String givenName = (userInfo!=null) (String) userInfo.get(“user.name.given”) : “”;
十四、Caching
caching机制是一个用户客户端一个portlet,缓存的内容不能跨不同的显示相同portlet的用户客户端共享。
十五、Portlet application
构建portlet容器之上的servlet容器管理portlet application components and resources而不是portlets;每个portlets application和porletcontext是一对一的关系,如果是分布式的application,portlet容器必须在每个jvm中创建一个实例;目录结构遵循web application的目录架构,但是多一个portlet.xml文件;portlet容器必须使用servlet容器使用的web application resources的同一个classloader来装载portlets和相关的资源;portlet application也打包成war文件;portlet容器应该可以在无需重启的情况下来更新portlet application;
十六、安全
相关推荐
Portlet规范定义了这些组件如何在门户环境中交互、渲染和管理用户界面。本篇文章将深入探讨Portlet的概念、功能、工作原理以及相关的技术标准。 Portlet是Java Portlet API的核心组成部分,它允许开发人员创建可...
### Portlet规范详解 #### 一、Portlet概念解析 Portlet规范,主要涉及JSR#168标准,是专为门户应用设计的一套框架,用于构建高度个性化和交互式的Web应用程序。它将门户(Portal)分解为三个关键部分:Portal ...
### Portlet 2.0 规范详解 #### 一、概述 《Portlet 2规范》即JSR-286最终版,是Portlet技术发展的里程碑之一。该规范在Portlet 1.0的基础上进行了大幅度的改进和完善,不仅增强了Portlet的功能性和互操作性,还...
### Portlet规范之Pluto实现的关键知识点 #### 1. PortletResourceBundle的使用 `PortletResourceBundle`主要用于定义Portlet的一些描述性信息,比如标题、关键字等,它可以替代`<portlet-info>`标签,帮助实现...
Portlet规范和API是Web应用程序开发中的重要组成部分,主要用于构建可重用的、交互式的Web组件。JSR(Java Specification Request)168和286是定义portlet标准的两个关键版本,它们由Java Community Process(JCP)...
1. Java Portlet规范:Java Portlet规范是一种基于Web的portlet规范,用于开发portlet应用程序,portlet程序可以嵌入到portlet容器中,提供portlet服务。 2. automobiles试验数据重用:汽车试验数据重用是指对汽车...
### JSR168规范详解:The Java Portlet Specification #### 引言 JSR168(Java Specification Request 168)是一项重要的技术规范,它为门户服务器中的组件开发提供了一套标准化的方法。这一规范得到了业界主要...
将后缀改为mht 博文链接:https://p2world.iteye.com/blog/639088
《portlet规范》(JSR 168)是为开发者提供的一份关键文档,它定义了portlet的开发标准,使得portlet能够在不同的门户环境中实现一致性和互操作性。这份规范由Java Community Process(JCP)发布,主要由Sun ...
为了保持兼容性和重用性,Portlet规范借鉴了Servlet的部分概念,但为Portlet定义了独特的接口和行为。Portlet与Servlet的主要区别在于,Portlet处理的是局部视图,而Servlet通常处理整个页面的请求。因此,尽管它们...
在JetSpeed中开发portlet项目是一项涉及Java Web技术的重要工作,主要基于JSR168(portlet规范1.0)标准。JetSpeed是一个开源的企业门户服务器,它支持portlet的开发和集成,提供了一个灵活且可扩展的框架来构建企业...
Portlet是一种在Web应用程序中,特别是企业级门户平台中,用于呈现内容和功能的可重用组件。在Java世界中,portlet技术主要基于JSR 286(Portlet 2.0 API)标准,它定义了portlet如何与门户服务器交互。本篇文章将...
JSR 168,全称为JavaTM Standardization Request for the Java Portlet规范,是Java Community Process(JCP)提出的一个标准,旨在统一和促进portlet之间的互操作性。该规范由IBM和Sun共同主导,并得到了众多业界...
- 提供的文件“portlet-1_0-pfd-spec.pdf”很可能是一个关于Portlet 1.0规范的文档,该规范定义了portlet开发的标准,包括portlet生命周期、渲染、事件处理、通信等。 - “portlet-1_0-pfd-spec-api.zip”可能包含...
Spring MVC Portlet是一个用于构建portlet应用程序的框架,它结合了Spring MVC的灵活性和portlet规范的强大功能。在这个demo中,我们将会深入探讨如何利用Spring 3.0 MVC架构来开发portlet应用。 **Spring MVC简介*...
6. **portlet标准**:有两个主要的portlet规范定义了portlet的行为:JSR 168(portlet 1.0)和JSR 286(portlet 2.0)。这两个标准由Java Community Process发布,提供了portlet开发的统一接口。最新的标准是JSR 362...
Portlet开发参考手册是针对portlet技术的一份详细指南,它为开发者提供了全面的指导,以帮助他们构建和集成portlet到Web门户中。Portlet是一种可重用的Web组件,它们在门户环境中运行,允许用户自定义门户界面,展示...
Portlet入门介绍 在Web开发领域,Portlet是一种特殊的组件,它被设计用来构建可复用、可配置的Web应用程序,通常在Portal环境下运行。Portlet技术为用户提供了一种集中访问多种服务和信息的方式,例如新闻、天气...
**jQuery Portlet 知识详解** `jQuery Portlet` 是基于 jQuery UI 框架实现的一种portlet组件,它主要用于构建可自定义布局、具有拖放功能的Web应用程序界面。Portlet是Web应用中的一个模块化组件,常用于企业级...
Pluto是Java Portlet规范的开源实现,提供了运行和测试Portlet的基本环境。 Portlet与传统的Web应用不同,它并不处理整个页面,而是与多个其他Portlets一起协作构建一个完整的Web页面。每个Portlet有自己的生命周期...