servlet与portlet的异同

portlet上下文
由PortletContext实现,必须与ServletContext一致。主要方法:getPortalInfo、getProperty、getPropertyNames、getSupportedPortletModes、getSupportedWindowStates

PortletRequest
PortletRequest有两个子类: ActionRequest,RenderRequest

主要方法:

getParameter返回指定名称参数的第一个值,getParameterNames返回指定名称参数数组名称,getParameterValues 返回指定名称参数的值数组,getParameterMap

portlet容器不会将request的参数传播到外面,除非portlet在processAction中,调用了ActionRequest.setRenderParameter。不同portlet之间的request是不可见的。

Attributes可以与JSP及Servlet共享,它用来在普通API无法应用的场合。

Properties由portlet容器指定,用来获取http的某些特性, 包括:content-length, content-type, accept-language等等。前缀为“javax.portlet.”的属性及参数是保留名称。

PortletRequest的生命周期,仅在processAction方法或render调用期间。

PortletResponse
PortletResponse有两个子类: ActionResponse,RenderResponsePortletResponse的主要方法:setProperty,addProperty,encodeURL,sendRedirectActionResponse接口,允许重定向、设置参数、改变窗口状态及模式。setRenderParameterRenderResponse接口,允许设置标题、内容。setContentTypegetPortletOutputStreamgetWriter生命周期:在processAction方法或render调用期间。
Portlet参数
Portlet通过参数来获取各种属性,接口是:PortletPreferencesPortlet只能在processAction调用的时候修改参数。本地化参数,根据ResourceBundle类进行实现。命名规则:’javax.portlet.preference.description.验证:实现:PreferencesValidator,并且必须以线程安全的模式实现,它在JVM中必须是单子的。当有验证器与参数关联时,PortletPreferences.store()必须调用验证器的validate()方法。参数的修改必须是原子性。
会话PortletSession
变量范围定义
一是应用程序级别APPLICATION_SCOPE,二是Portlet级别PORTLET_SCOPE。APPLICATION_SCOPE必须采用前缀表示法来进行属性的存取。当使用PortletSessionUtil类进行属性的访问时,对PORTLET_SCOPE的变量不用采取前缀,建议用取这种方法。
PortletSession与HttpSession的关系
在PortletSession与HttpSession中的属性必须是互相可见的。PORTLET_SCOPE属性必须加上前缀,两种session必须一致。APPLICATION_SCOPE的属性名称必须是一致的。“javax.portlet.”前缀的属性名称是保留的,开发者不能使用。

缓存Cache
超时缓存,不要求实现。使用RenderResponse设置属性可以改变缓存EXPIRATION_CACHE,如果设置为0则不使用缓存,设置为-1则缓存永不过时。在描述文件中没有定义,但程序中设置了的话,会被忽略。

Portlet应用
Portlet应用是一个web应用,并且可以用于不同的portlet容器中。Portlet应用与web应用的关系:由servlet容器管理所有的组件、资料(除portlet外)。Portlet应用与PortletContext的关系:由容器实现一对一。目录结果:/WEB-INF/portlet.xml,/WEB-INF/classes,/WEB-INF/lib,ClassLoader:与servlet同样。
标记库
defineObjects定义了以下几个变量:RenderRequest,RenderResponse,PortletConfigactionURL用来创建URL,定义了以下几个变量:String windowState,String portletMode,String var,String securenamespace定义了当前portlet的一个唯一值,用于输出时确保名称的唯一性,例如javascript函数名。param用来加入到URL中,必须在actionURL的内部定义。例如:”myParam” value=”someValue”/>
定制的Portlet模式
about, config, edit_defaults, priview, print

不允许的标记
基于HTML:base, body, iframe, frame, frameset, head, html, title。基于XHTML:base, body, iframe, head, html, title。不太兼容的标记:link,meta,style。
Portlet标准虽不复杂,但其在整个portal应用中不过是冰山一角。实际上,实现一个portal是一个非常庞大的工程,它几乎等同于一个IDE的开发,Bea WebLogic在这方面可以说是业界的先锋,其IDE环境workshop,已完全集成了Portal的开发,达到了可视化目的,这也是下一节所要详述的。

二 portlet与servlet的关系

Portlet 和 Servlet 算是兄弟有那么一点点相似却又有那么一点点不同,因为 Servlet 和 Portlet 不尽然相同,所以研究小組決定将 portlets 定义成为一个新的组件,因此定义了 portlets 一个新的并且明确的界面与行为。为了尽可能与现有的 servlet 结合达到重复使用的目的,portlet 的规范利用了 servlet 的规范,许多观念都很相似的,结合 portlets、servlets 及 jsp 在同一个网站系统中,我们称为 portlet application 。在同一个 portlet application 中,他们将分享同一个 classloader,context 及 session。

1) Portlet 和 Servlet 的相似之处

@ portlets 也是 Java 技术的 web 组件
@ portlets 也是有特定的 container 在管理
@ portlets 可以动态产生各种内容
@ portlets 的生命周期由 container 所管理
@ portlets 和客户端的互动是通过 request/response 的机制

2) Portlet 和 Servlet 也有一些不同

@ portlets 只产生 markup 信息片段,不是完整的网页文件。而 Portal 会将所有的 Portlet markup 信息片段放到一个完整的 Portal 网页。
@ portlets 不会和 URL 有直接的关系
@ 客户端必须通过 portal 系统才能和 portlets 互动
@ portlets 有一些定义好的 request 处理,action request 以及 render request。
@ portlets 默认定义 portlet modes 及窗口状态可以指出在网页中该 portlet 的哪个功能正在执行及现在的 状态。
@ portlets 可以在同一个 portal 网页之中存在多个。

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

@ Portlets 能够存取及储存永久配置文件及定制资料。
@ portlets 可以存取使用者数据
@ portlets 具有 URL 的重写功能在文件中去动态建立连结,允许 portal server 不用去知道如何在网页的片 段之中建立连结及动作。
@ portlets 可以储存临时性的数据在 portlet session 之中,拥有两个不同的范围 :
application-wide scope 及 portlet private scope 。

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

@ servlet 具有设置输出的文字编码( character set encoding)方式
@ servlet 可以设置 HTTP 输出的 header
@ servlet 才能够接收客户对于 portal 发出的 URL 请求
累了,去[url=http://www.diy567.com]读意优[/url]休息一下下,QQ空间,美文,非主流,网络日记,搞笑短信,祝福短信,热门短信,有意思啊
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值