`
holdbelief
  • 浏览: 707591 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Portlet学习分析笔记

 
阅读更多
关于Portlet的一些概念性的文字网络上很多,谷歌或是百度一下可以很容易搜索到,下面我把自己觉得容易混淆和模糊的几个知识点做下简单介绍:
1、Portlet Request & URL

      在一个 Portal 页面中,通常都包含了多个 Portlet ,在一个时刻用户只能与一个 Portlet 交互,当用户向一个 Portlet 发出请求(例如点击了“ submit ”按钮),整个 Portlet 页面将会重新构成。在这个过程中,是否有与用户交互的 Portlet 处理方式显然是不同的,而且用户没有与之交互的 Portlet 显然不应该接收到用户的请求参数。
   因此 JSR168 规范中将对 Portlet 的请求分为 Action 和 Render 两种。 Portlet 在收到 Action 请求,获取用户所提交的信息,进行相应的处理;受到 Render 请求后,则生成页面代码。当用户向一个 Portlet 发出请求,该请求被 Portlet 容器接受, Portlet 容器再调用相应 Portlet 的 processAction() 方法;等到 processAction() 方法执行完毕后, Portlet 容器再调用所有 Portlet 的 render() 方法,并将这些方法所返回的内容组合形成一个页面返回给客户端。在上述过程中,所有 Portlet 的 render() 方法的调用次序在规范中没有规定,既可能是有顺序的串行调用,也可能是多线程的同步调用,依赖于厂商的具体实现。

       为了接受用户请求,一个 Portlet 需要有一个指向其自身的 URL ,例如用在 HTTP FORM 的 ACTION 字段。但是与 Servlet 不同的是, Portlet 不是一个完整的页面而只是页面的一部分,一个 Portlet 可以出现在多个页面中,所以 Portlet 无法绑定具体的 URL 。在 JSR168 规范中定义了 PortletURL 接口,通过该接口可以得到指向 Portlet 自身的 URL ,对应两种用户请求有两种产生 URL 的方法: q?4k2@*v_rk*l
一、for render():
PortletURL url = response.createRenderURL(); www.portalfan.com&S        A(`L v(s
url.setParameter(“customer”,”foo.com”);
url.setParameter(“show”,”summary”); !g{f#vk^
writer.print(“<A HREF=\””+url.toString()+”\”>Summary</A>”);

4x_kUS/^![
二、for processAction():
`kTi3O

PortletURL url = response.createActionURL();
url.setParameter(“paymentMethod”,”creditCardInProfile”);
url.setWindowState(WindowState.MAXIMIZED); www.portalfan.com1x"p VfH
writer.print(“<FORM METHOD=\”POST\” ACTION=\””+ url.toString()+”\”>”);
(r/aI iI(v/i
  上面的代码我们可以看到,除了得到 URL 外,还可以在其中加入参数。另外由于 Portal 服务器厂商通常都会利用 URL 增加一些产品相关的参数,因此强烈建议在 Portlet 中提交用户请求采用 POST 方式。

2、 Portlet Modes & Window States
在 Portal 应用中,用户通常需要设置、调整 Portlet 的显示方式,对此 JSR168 同样做出了规定。分别有 Portlet Modes 和 Window States 。
Portlet Modes 说明 Portlet 目前所执行的功能模式,规范要求 Portal 服务器必须支持以下三种模式: www.portalfan.com\        k6k7cWk
)e-[_lj rq&sI
q

VIEW ——内容显示,通常为缺省模式 
EDIT ——编辑相关的设置
HELP ——显示帮助信息
除此之外可以Portal服务器可以实现自定义的模式。portal爱好者0XLqXP5iv J

每个 Portlet 在 Portal 页面中就是一个“窗口”,类似于 MS Windows 、 XWindo 等窗口系统 Portlet 也有自己的窗口状态( Window States ),规范要求 Portal 服务器必须支持以下三种窗口状态 :
NORMAL ——普通 portlet 窗口,在这个状态下通常是与其它 Portlet 共享 Portal 页面; portal爱好者t8u/O/F;F
MAXIMIZED ——最大化 portlet 窗口,独占 Portal 页面;
J&?'X$az9u_eJ

MINMIZED ——最小化 portlet 窗口 #la|M@!YP?2N g
除此之外可以Portal服务器可以实现自定义的窗口状态         
在规范中对这些特性进行定义,使得 Portlet 开发者无需关心这方面实现细节,另外在 processAction() 和 render() 方法中开发者都可以通过 getPortletMode() 和 getWindowState() 等方法获得当前 Portlet 的情况从而决定相关操作。

3、Preferences & User Information say?d
  Portal 应用一个重要功能就是“个性化”,一方面 Portal 服务器需要根据用户的不同显示不同的 Portlet ,另一方面同一个 Portlet 也会根据用户的偏好显示不同的内容。这就要求 Portlet 需要保存一些用户的相关信息,例如一个股票实时信息的 Portlet 会根据用户所关注的股票显示相应的信息。
  每个 Portlet 都可能有自己相应的个性化信息, JSR168 规范提供了 PortletPreferences 接口来操纵这些信息。   
PortletPreferences 接口提供读取、设置属性的方法,如下:
PortletPreferences prefs = req.getPreferences();
String[] symbols = prefs.getValues(”preferredStockSymbols”, l&Fnew String[]{”ACME”,”FOO”}); www.portalfan.com*J4WF2WI qg
#f_,[$j({6M

d,NG1r(`*NUp

  在 JSR168 规范中 PortletPreferences 是用户相关的,也就是通过 getPreferences() 获得的对象是与当前登录用户绑定的, PortletPreferences 不会在用户之间共享属性。 lg4a {^a2zb q        ]
        PortletPreferences 提供了一个基本的读取、设置个性化属性的途径,使得 Portlet 无需依赖具体的数据储存环境(例如数据库联接、表结构等等)就可以实现个性化并能够在不同的 Portal 服务器之间移植。但是不应该使用 PortletPreferences 来替代一般的数据库功能。
       在实现个性化功能中经常需要获取各种用户信息,例如用户姓名、地址等等。因此 JSR168 也提供了一个获取用户信息的途径,如下:SK2B7KK
~}
n%R3I

Map userInfo = (Map) request.getAttribute(PortletRequest.USER_INFO);
String givenName = (userInfo!=null) ? (String) userInfo.get(“user.name.given”) : “”;
String lastName = (userInfo!=null) ? (String) userInfo.get(“user.name.family”) : “”; 
  所获得的 Map 对象是一个只读对象,不能更改。但是用户信息应该包含什么内容不在 JSR168 规范的范围,事实上目前还没有关于访问用户信息的 Java 标准, JSR168 提到在以后形成访问用户信息的 Java 标准时,当前的机制就会被取代。

4、Sessions K5u{g|)Q
w

portal爱好者SS"uu+~`
  作为一个 Web 应用组件, Portlet 同样有 Session 这个机制用于跟踪用户操作,而与一般的 Web 应用所不同的是 Portlet 的 Session 属性有两种作用域:fi
PORTLET_SCOPE:属性只能被设置它的Portlet访问
APPLICATION_SCOPE:属性可以被同一个Portal应用中的所有Portlet访问 4VgU\;F

PortletSession session = request.getSession(true);
URL url = new URL(“http://www.foo.com”);
session.setAttribute(“home.url”,url,PortletSession.APPLICATION_SCOPE);
session.setAttribute(“bkg.color”,”RED”,PortletSession.PORTLET_SCOPE);  

5、Request Dispatch & Portlet Tag
  在实现 Portlet 应用时,开发者往往会利用 Servlet 、 JSP 等资源,起码会有两个目的会这样做: 为了利用现有的资源,简单地将已经写好的 Servlet 、 JSP 应用转换成 Portlet ;  方便 Portlet 的表现层开发。 Portlet 规范类似于 Servlet 规范,在表现层开发上远远不如 JSP ,因此需要利用 JSP 来开发界面。JSR168 提供了类似 Servlet RequestDispatcher 的接口来实现利用 Servlet 、 JSP 等资源的功能。
例子如下: portal爱好者.c
oJ#m|7SJ,M2vh

String path = "/raisons.jsp?orderno=5"; portal爱好者'J0q|lh:Vu&[']
PortletRequestDispatcher rd = context.getRequestDispatcher(path); rd.include(renderRequest, renderResponse);  
当一个 JSP 页面需要作为 Portlet 应用的一部分, JSP 开发者需要获得相关的 Portlet 信息,为此 JSR168 提供了相应的 JSP Tag 来实现相关的功能。通过相应的 Portlet Tag , JSP 开发者可以获得相应的 Portlet Request/Response 对象,产生 ActionURL 或者 RenderURL 等等。

5、缓存qB&gWN(N_
www.portalfan.com/yza"x1g-PB1C
  在前面中我们知道,用户每次向Portal 应用发送一个请求,该页面中所有的 Portlet 都会被 Portlet 容器调用 render() 方法来产生相应内容。但是只有一个 Portlet 才会处理用户请求,其它不处理用户请求的 Portlet 可能每次的显示内容都是不变的。
因此 JSR168 定义了缓存机制来提供 Portal 应用的效率。在 portlet.xml 中可以定义缓存的失效时间,如下:
portal爱好者)y2C$\7m.E
<portlet> R`Xh M5co i
...
<expiration-cache>300</expiration-cache>
...
</portlet> 
这样 Portlet 容器在调用 Portlet 的 render() 方法之前就会检查有缓存是否已经有效,如果有效的话就直接使用缓存内容。 Portlet 缓存是跟客户端相关的,不同的客户端访问同一个 Portlet 分别有自己的缓存而不会混淆。JSR168 对缓存机制的实现不是强制性的, Portal 服务器厂商可以自行决定是否实现这个特性。

6、CSS Style Definition
  在一个 Portlet 应用中,所有 Portlet 应该具有显示上的一致性,例如使用相同的字体等等。为了到达这一点, JSR168 定义了一套 CSS 元素名称, Portlet 开发者都应该采用这套 CSS 来产生显示内容。这套 CSS 定义主要包含了 Fonts 、 Message (例如告警、通知等等)、 Sections 、 Forms 。

7、Portlet VS Servlet
  Portlet 和 Servlet 是十分类似的,只是由于 Servlet 无法达到 Portal 应用的要求 JCP 才定义了新的 Portlet 规范,为了尽可能与现有的 Servlet 结合达到重复使用的目的, portlet 的规范利用了 Servlet 的规范,许多观念都很相似的。在讲述了 Portlet 的特性后,我们再来看看他们直接的异同。相似之处:]3b        AC|Z2g
Portlet 也是 Java 技术的 web 组件 z&MBh[]        T6sEy
Portlet 也是有特定的 container 在管理
Portlet 可以动态产生各种内容 &X3Z$r0]W9J)_
Portlet 的生命周期由 container 所管理 bf;YKx
Portlet 和客户端的互动是通过 request/response 的机制wZ

不同之处: portal爱好者 D(e9g$MA2W{L
Portlet 只产生 markup 信息片段,不是完整的网页文件
Portlet 不会和 URL 有直接的关系
客户端必须通过 Portal 系统才能和 Portlet 互动
Portlet 有一些定义好的 request 处理, action request 以及 render request
Portlet 默认定义 portlet modes 及窗口状态
Portlet 可以在同一个 portal 网页之中存在多个

Portlet有的功能而Servlet没有:
Portlet 能够存取及储存永久配置文件及定制资料
Portlet 可以存取使用者数据
Portlet 具有 URL 的重写功能够在它的内容中动态建立连结
Portlet Session 的属性拥有两个不同的范围: application-scope 及 portlet-scope

Portlet不具备而Servlet提供的功能
Servlet 具有设置输出的文字编码 ( character set encoding) 方式
Servlet 可以设置 HTTP 输出的 header
Servlet 才能够接收客户对 portal 发出的 URL 请求

<!-- 日志内容 结束 --><!-- 日志来源 开始 --><!-- 日志来源 结束 --><!-- 日志信息 开始 -->
分享到:
评论

相关推荐

    portlet学习资料

    Portlet技术是构建企业级Web应用的重要组成部分,特别是在门户(portal)环境中,它允许开发者创建可重用、可组合的Web组件。...通过学习和实践,开发者能够创建出满足多样化需求的portlet,提升企业的数字化能力。

    struts2-portlet学习手册

    ### Struts2-Portlet学习手册 #### 一、引言 随着企业级应用的不断发展,门户技术在其中扮演了越来越重要的角色。Portlet作为门户技术的重要组成部分,它能够为用户提供个性化的内容和服务。而在众多Portlet开发...

    portlet源码,portlet Filter

    总的来说,portlet源码的学习涉及到portlet的生命周期管理、过滤器和拦截器的使用,以及portlet与门户服务器的交互方式。理解并熟练运用这些知识点,能帮助开发者创建出高效、可扩展且功能丰富的portlet应用。在实际...

    portlet入门介绍

    下面我们将深入探讨portlet的基本概念、工作原理以及如何入门学习。 一、Portlet概述 Portlet是Java Portlet API(JSR-168和JSR-286)定义的一种标准组件模型,用于构建可插入到门户中的交互式小应用程序。一个...

    portlet开发参考手册

    总之,"portlet开发参考手册"是理解、学习和实践portlet开发的宝贵资源,涵盖了从基础概念到高级特性的全面内容,对于希望在Web门户领域工作的开发者来说,是一份不可或缺的学习材料。通过深入阅读和实践手册中的...

    Portlet标准汉化手册

    【Portlet标准汉化手册】深入解析 在现代企业级Web开发中,Portal Server成为了构建复杂网站架构的重要基础。本文将详细介绍Portlet标准及其在Portal中的应用,帮助读者理解这一技术的核心概念。 **1. 什么是...

    IBM portlet api 和 中文教程

    通过学习IBM Portlet API和实践,你不仅可以掌握portlet开发,还能理解门户平台的工作原理,从而更好地设计和实现企业级的门户应用。无论你是初学者还是经验丰富的开发者,本教程都将是你提升技能的宝贵资源。

    portlet资料

    - 标签中的“源码”提示了这个资料可能包含了portlet的示例代码或者源码分析,这对于学习portlet的开发和调试非常有帮助。 - 通过阅读和理解源码,开发者可以深入理解portlet的工作原理,以及如何有效地利用...

    portlet详细例子

    开发者会从中学习到如何定义portlet的配置元数据,编写portlet的Java代码(包括服务端的Portlet类和客户端的JSP页面),以及如何处理用户的请求和响应。HelloWorld Portlet可能会简单地在页面上显示一句“Hello, ...

    Portlet规范介绍.rar

    Portlet是一种Web应用程序组件,主要用于构建企业级的门户系统。Portlet规范定义了这些组件如何在门户环境中交互、渲染...通过学习Portlet规范,开发者能够更好地利用portlet技术,打造满足用户需求的、高效的Web应用。

    jquery portlet

    **jQuery Portlet 知识详解** `jQuery Portlet` 是基于 jQuery UI 框架实现的一种portlet组件,它主要用于构建可自定义布局、具有拖放功能的Web应用程序界面。Portlet是Web应用中的一个模块化组件,常用于企业级...

    Stringbeans3.5 加载外部portlet应用

    同时,三个例子是实践操作的最佳教材,每个示例都对应不同的portlet功能和集成情况,通过学习和运行这些示例,你可以更深入地了解如何在Stringbeans 3.5中加载外部portlet。 在实际应用中,你可能还会遇到权限管理...

    Liferay portlet 工程示例代码

    开发者可以通过分析和修改这些示例来学习和实践Liferay Portlet开发。 以上知识点涵盖了Liferay Portlet开发的基础和关键点,通过深入研究和实践提供的"samples",开发者可以逐步掌握创建功能丰富的Liferay Portlet...

    Portlet

    **Portlet技术详解** Portlet是一种在Web应用程序中构建可重用、可组合组件的技术,尤其常见于企业级的...在实际项目中,结合源码分析和使用工具,如portlet开发框架和调试器,将进一步提高开发效率和代码质量。

    Spring mvc portlet demo

    Spring MVC Portlet Demo是一个学习和实践portlet开发的好资源。它展示了如何利用Spring MVC的强大功能来构建portlet应用,同时提供了注解配置和XML配置的示例,帮助开发者更好地理解和应用Spring框架。通过研究`...

    portlet 开发

    通过深入学习和实践这些知识点,开发者可以创建高效、灵活且适应性强的portlet,丰富企业门户的功能,满足用户多样化的需求。"portlet之开发详解_包含索引完整版.pdf"这份文档应能提供更详尽的信息,帮助开发者深入...

    portlet

    portlet是Web应用程序中的一个组件,它允许用户在门户页面上个性化和交互地访问信息和服务。Portlet技术主要应用于企业级的门户系统,如IBM ...通过学习和实践,我们可以构建出功能丰富、用户体验良好的portlet应用。

    Portlet 简单例子demo pluto

    - **Portlet配置**:学习如何在portlet.xml中配置Portlet,包括标题、参数、安全设置等。 通过这个“Portlet简单例子demo pluto”,你可以动手实践,深入了解Portlet的开发过程,从而更好地掌握这一重要的Web应用...

    在JetSpeed中开发portlet项目

    在JetSpeed中开发portlet项目是一项涉及Java Web技术的重要工作,主要基于JSR168(portlet规范1.0)标准。JetSpeed是一个开源的企业门户服务器,它支持portlet的开发和集成,提供了一个灵活且可扩展的框架来构建企业...

Global site tag (gtag.js) - Google Analytics