本文探讨了以下内容: portlet规范将portlet定义为一种“基于java技术的web组件,由处理请求和生成动态内容的portlet容器管理”。这段话听起来是不是有些费解?本文将说明portlets是什么以及能用它们做什么。
如果仔细查看浏览器里的页面,就会看到页面是由不同的“窗口”组成的。一个窗口用于刷新天气,另一个用于新闻,还有一个用于刷新股价,等等。这里的每一个窗口都代表了一个portlets。如果看得再仔细些,还会发现每个窗口都有一个标题条和一些按钮,包括最小化和最大化按钮。 在系统开发里,这些窗口是相互独立开发、各不同的应用开发。新闻portlet的开发者创建应用开发并打包成war格式的文件,随后portal服务器开发的管理员在服务器开发上部署该war文件并创建页面,接下来每个用户会选择在他的页面里有哪些应用开发。例如,如果用户对股价不感兴趣而对体育感兴趣,他可以用“体育”窗口替换“股价”窗口。 portlet技术需要学习许多新概念,本文不可能全都涵盖,因此本文分为两部分。在第一部分里我们详细说明portals和portlets,并开发一个简单的“hello world”portlet;在第二部分我们将探讨一些高级主题。 我们将用apache的pluto服务器开发(portlet api 1.0规范的参考实现)来测试我们的示例portlets,我们还会花些时间探讨如何安装和使用pluto服务器开发。 portal页面的元素 图2显示了portal页面的各种元素。
每个portlet页面由一个或多个portlet窗口组成,每个portlet窗口又分为两部分:一个是外观,它决定了portlet窗口的标题条、控制和边界的样式;另一个是portlet段,它由portlet应用开发填充。 portal服务器开发决定了portal页面的整体观感,像标识、标题条颜色、控制图标等。通过修改几个js p和css模板文件就可以改变portal的整个观感。我们将在“如何创建portal页面”部分对此做深入讨论。 portal是什么? 在了解portlet之前有必要先了解portal。在portlet规范里是这样讲的:“portal是一种web应用开发,通常用来提供个性化、单次登录、聚集各个信息源的内容,并作为信息系统开发表现层的宿主。聚 此文来自: 马开东博客 转载请注明出处 网址: http://www. 集是指将来自各个信息源的内容集成到一个web页面里的活动”。
portal的功能可以分为三个主要方面: 此文来自: 马开东博客 转载请注明出处 网址: http://www. 到mail服务器开发上。你对其它应用开发的访问也将照此处理。o个性化:个性化服务的基本实现使用户能从两方面个性化她的页面:第一,用户可以根据她的自身喜好决定标题条的颜色和控制图标。第二,用户可以决定在她的页面上有哪些portlets。例如,如果我是个体育迷,我可能会用一个能提供我钟爱球队最新信息的portlet来取代股票和新闻portlets。 一些在个性化服务方面领先的商业实现版本允许你建立为用户显示什么样的应用开发所依据的标准(如收入和兴趣)。在这种情况下,可以设定一些像“对任何收入为x的用户显示馈赠商品的portlet”和“对任何收入为x的用户显示打折商品的portlet”这样的商业规则。
此外还有一些公共服务,比如机器翻译,是由portal服务器开发将portlet生成的内容翻译为用户要求的语言。大部分的商业portal服务器开发都支持手持设备访问并具有针对不同的浏览终端生成不同内容的能力。 portlets是什么? 与servlet开发 s类似,portlets是部署在容器内用来生成动态内容的web组件。从技术角度讲portlet是一个实现了javax.portlet.portlet接口的类,它被打包成war文件格式部署到portlet容器里。 portlets在以下方面与servlet开发 s相似: portlets在以下方面与servlet开发 s相异: portlets还提供了一些附加的功能: 如果仔细想想其实这里面并没有什么新东西,它们反而大部分都是普通的业务需求。portlet规范的作用在于它提供了一个抽象层,这才是它对所有与之相关的人-最终用户、开发者和管理员-的价值所在。 作为一个开发者,我会将所有与view模式有关的业务逻辑放入doview()开发方法 ,将与应用开发配置有关的业务逻辑放入doedit()开发方法 ,将与帮助有关的逻辑放入dohelp()开发方法 这就简化了管理员对portlet应用开发的访问控制管理,因为他只需改变portlet的访问权限就能决定用户能做什么。例如,如果mail应用开发的一个用户能够在edit模式下设定用户名和密码,那么就可以断定他具有edit模式访问权限。 不妨考虑这样一种情形:我是一个intranet网站的管理员,我的公司买了一个能显示新闻信息的第三方portlet应用开发,该应用开发允许用户指定跟踪新闻更新的url地
此文来自: 马开东博客 转载请注明出处 网址: http://www. 址,我想借助它为用户显示公司的内部新闻。另一个需求是我不想让用户通过该应用开发来跟踪任何其它的新闻信息来源。作为管理员,我可以为所有的用户指定一个用于内部新闻更新的url地址,同时通过改变portlet应用开发的部署描述符来取消其它人修改该地址的权限。
由于所有的portlet应用开发都具有相似的ui界面,因此采用portlets可使网站对最终用户更具吸引力。如果她想阅读任何一个应用开发的帮助信息,她可以点击帮助按钮;她也知道点击编辑按钮能让她进入应用开发的配置屏。标准化的用户界面使你的portlet应用开发更引人。 4. 窗口状态:窗口状态决定了portal页面上留给portlet生成内容的空间。如果点击最大化按钮,portlet将占据整个屏幕,成为用户唯一可用的portlet;而在最小化状态,portlet只显示为标题条。作为开发者应当根据可用空间的大小来定做内容。 5. 用户信息:通常portlets向发出请求的用户提供个性化的内容,为了能更加行之有效,portlets需要访问用户的属性信息,如姓名、email、电话等。portlet api为此提供了用户属性的概念,开发者能够用标准的方式访问这些属性,并由管理员负责在这些属性与真实的用户信息其他数据库 (通常是ldap服务器开发)之间建立映射关系。 我们将在本文的第二部分深入讨论这些特点-请求处理、用户信息和portlet模式。 开发"hello world" portlet 现在我们就来开发一个简单的helloworld portlet。 2. 在build path里加入portlet-api-1.0.jar文件,该jar文件是pluto发行包的一部分。 3. 在source文件夹中按如下内容创建helloworld.java文件: public class helloworld extends genericportlet{ protected void doview(renderrequest request, renderresponse response) throws portletexception, ioexception { response.setcontenttype("text/html"); response.getwriter().println("hello portlet"); }} 每个portlet都要实现portlet接口,该接口为portlet定义了生命周期开发方法 。由于不想覆盖所有这些开发方法 ,我们只对genericportlet类进行扩展,它是一个实现了portlet接口的适配器类。genericportlet类提供了所有生命周期开发方法 的默认实现,所以我们只需实现我们所需要的开发方法 。 我们在 helloworld portlet里要做的只是显示“hello portlet”,所以我们将覆盖genericportlet类的doview()开发方法 ,该开发方法 以portletrequest 和 portletresponse作为参数。在doview()开发方法 中首先调用response.setcontenttype()以通知portlet容器该portlet将要生成何种类型的内容-如果不这样做就会导致illegalstateexception异常。一旦设置了内容的类型,就可以从response对象中获得printwriter并开始写入。 4. 每个portlet应用开发在/web-inf文件夹中都有一个portlet.xml文件,它是portlet应用开发的部署描述符。按以下内容创建portlet.xml文件: <portlet> <description>helloworlddescription </description> <portlet-name>helloworld </portlet-name> <display-name>hello world </display-name> <portlet-class>com.test.helloworld </portlet-class> <expiration-cache>-1 </expiration-cache> <supports> <mime-type>text/html</mime-type> <portlet-mode>view </portlet-mode> </supports> <supported-locale>en </supported-locale> <portlet-info> <title>hello world</title> <short-title>hello world </short-title> <keyword s>hello,pluto</keyword s> </portlet-info></portlet> <portlet-name>元素声明了portlet的名字,<portlet-class>元素指定了portlet的全限定类名,<expiration-cache>元素以秒为单位指定了内容超期的时间。这里面有一点需要注意:你在portlet上的某些动作可能会导致内容刷新,这与缓存时间无关。 5. 每个portlet应用开发都是一个web应用开发,因此除了portlet.xml文件之外还需要有web.xml文件。 <web-app> <display-name>hello world portlet </display-name> <welcome-file-list <welcome-file>index.js p </welcome-file> </welcome-file-list></web-app> 6. 接下来将这些文件进行编译并打包为war文件。你可以自己完成这些工作,或者下载带有build.xml 的示例代码(参见“资源”部分)来创建war文件。 pluto尚处于开发阶段的早期,因此还没有一套易于使用的管理开发工具。为了能使用pluto服务器开发,需要将编译和源代码两个版本都下载。需要注意的是以下说明是针对windows平台的,unix用户通过修改斜杠符号和执行sh shell脚本(不是bat批命令文件)会得到类似的结果。 1. 创建一个文件夹,比如c:\plutoinstallation。 <servlet开发 > <servlet开发 -name>helloworld</servlet开发 -name> <display-name>helloworld wrapper</display-name> <description>automated generated portlet wrapper</description> <servlet开发 -class>org.apache.pluto.core.portletservlet开发 </servlet开发 -class> <init-param> <param-name>portlet-class</param-name> <param-value>com.test.helloworld </param-value> </init-param> <init-param> <param-name>portlet-guid</param-name> <param-value>hellopluto.helloworld </param-value> </init-param></servlet开发 > <application id="5"> <definition-id>helloworld</definition-id> <portlet id="1"> <definition-id>helloworld.helloworld</definition-id> </portlet></application> <fragment name="p2" type="portlet"> <property name="portlet" value="5.1"/></fragment> helloworld portlet。 图3的右侧显示了helloworld portlet看上去的样子。
如何创建portal页面 图4显示了portal容器如何将分离的portlets组装为页面。
大部分的portal服务器开发基本上都是部署于应用开发服务器开发上的web应用开发,通过servlet开发 来处理访问portal服务器开发的请求。查看一下pluto的安装目录就会发现pluto不过是一个部署于tomcat服务器开发上的一个普通web应用开发,再看看c:\plutoinstallation\pluto-1.0.1-rc1\webapps\pluto\web-inf\web.xml会发现所有发往pluto服务器开发的请求都被映射到org.apache.pluto.portalimpl.servlet开发 上。 在本文开始部分“portal页面的元素”中,我们提到portal页面由两部分组成。一部分是由页面中的portlets生成的内容,另一部分是由portal服务器开发生成的内容。 在pluto里,只要用户发出请求,就会由servlet开发 进行控制,根据用户所请求的页面来确定需要显示的portlets的列表。一旦生成了列表,servlet开发 就将控制转给这些portlets线程并收集由它们生成的内容。 对于由portal服务器开发生成的内容(像portal网站的观感及每个portlet的外观和控制之类)则取决于c:\plutoinstallation\pluto-1.0.1-rc1\webapps\pluto\web-inf\aggregation文件夹下的js p文件。rootfragment.js p是主js p文件,它决定了整体的观感和对齐方式;它还包含了heads以定义在生成的页面中的<head>标签里的内容。tabnavigation.js p用来选择在banner中该显示什么(默认情况下在banner显示列表中也包扩了pluto.png图片)。tabnavigation.js p用来确定portal网站的导航方案。这意味着只需改动该文件夹下少量的几个js p文件,就能改变整个portal网站的观感。 pluto根据pageregis地理信息系统 try.xml中的设置确定页面中有多少行,并用rowfragment.js p去填充。columnfragment.js p用来填充每个栏目。portletfragmentheader.js p用来填充每个portlet的页头,像标题条及最大化和最小化控制。footer.js p用来填充js p 感谢你的支持,我会 |
|