




免费预览已结束,剩余20页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Portlet应用开发 (JSR168), Part 1使用Eclipse plus Pluto开发你的第一个与JSR168兼容的PortletBy Terry. LeeSpiritSeekerS本系列将介绍如何开发基于Portlet Specification v1.0 (JSR168) 的Portlet应用程序以及相关的概念. 这里使用Pluto v1.0作为Portal/Portlet Container. 并且可以将开发完成的Portlet应用程序发布到任何遵循JSR168规范的其他Portlet Container和Portal Server上.为什么要发布Portlet Specification? 什么是JSR168? 越来越多的公司开发了各自的Portal组件和基于其的Portal产品(如Bea, IBM, Oracle, Sun, Sybase, Vignette, Novell, SAP, Plumtree, Apache 等.这种互不兼容的接口实现带给软件开发商以及Web开发人员各种问题, 为了解决这些问题, JCP发布了JSP168 (Java Specification Request), Portlet Specification v1.0, 用以提供不同Portal和Portlets的实现之间的互通性.可能许多软件开发商 (如上所列) 提供更为强大的Portlet实现, 但是如果希望开发人员希望所开发的Portlet程序能够不依赖于某一种或者几种平台, 那么使用JSR168 Portlet毫无疑问是你的首选.什么是Portal?Portal是基于WEB的应用程序, 一个信息平台, 它将不同来源的各种资源进行整合并集中展现给客户.通常其有如下三个特点:a.Personalization (个性化) b.Single sign on (单点登陆)c.Content aggregation (内容聚合) Personalization是Portal提供的特性之一, 用来提供用户的个性化设置; Single sign on是J2EE的一个特性; 其中Content aggregation是Portal比较有特色的特性, 它将不同来源的信息整合到一个同一个页面中, 使得用户可以更便捷, 更快速的进行某些商业应用.这里举一个简单的商业应用的例子, 如果某一客户需要进行一次商业采购行为,以往需要访问不同的产品供应商的主页得到相关信息,这往往是一个耗时耗力的过程, 但如果使用Portal将所有经常使用的相关商品供应商的商品浏页面都整合到一个Portal页面中, 那么所有的供应商的商品都可以更快的被浏览,筛选, 加快了客户的商业运作效率.什么是Portlet?Portlet是一种基于WEB组件的JAVA技术, 由Portlet Container进行管理. 处理请求并动态返回页面, 可以作为Portal的可即插即用的界面组件. 什么是Portlet Container?Portlet Container用来管理Portlet的生命周期并且提供其运行所需要的必要环境, 并且给Portlet Preferences提供持久性(Persistent)存取服务. 但是其不支持Portlet的aggregation(内容聚合), 内容聚合由Portal组件提供, 这个概念需要弄清楚.注: Portlet Preferences是Portlet的一个新特性,提供类似数据库的功能. 但是不是用来取代数据库. 只能用来存取简单的Portlet配置参数.什么是WSRP?WSRP 是 OASIS Web Service for Remote Portlets的缩写. WSRP是Web service的一种新的商业应用, 一种新的标准, 主要用来简化Portal对于各种资源或者程序整合的复杂性, 可以避免编程带来的整合麻烦和问题. 而且Portal的管理员可以从海量的WSRP服务中选择需要的功能用以整合到目前使用的Portal中. 它有三种Roles:1) Producer - 提供Portlet2) Consumer - 使用Portlet3) End User - 最终用户它的特点在于Producer将Consumer所需要的信息通过WSRP返回给Consumer,这些信息是相对的标记Fragment(片段),例如HTML,XHTML等, 直接可以嵌入用户的Page中,而不用像Web service一样需要单独开发用户端接口.再举个WSRP的商业应用的例子:如果一个客户需要采购一些PC软件,那么这个客户通过互联网登陆某家PC软件代理供应商的网页,查询相关信息,但是做为软件代理公司,PC软件的高级使用指南及配置工具是非常缺乏或者是无法及时更新的,这样一来使得用户需要登陆软件开发商的站点上才能得到相关信息. 然后再回到代理商主页进行订购.而比较理想的商业应用应该是代理公司可以整合软件开发商提供的使用指南或者配置工具(可以由开发商及时更新).但是如果使用XML API, 那么需要针对不同软件提供商开发不同的接口实现. 而使用WSRP可以将相关的信息及工具直接嵌入到代理商的页面用以动态及时提供给客户.(cqz: RSS也可以实现基于XML的信息聚合;Web service也可)WSRP4J是Apache的WSRP标准实现, 请参考文章末尾的资源部分.Portlet and Servlet 比较摘自(Portlet Specs v1.0)相同点: Portlets are Java technology based web components Portlets are managed by a specialized container Portlets generate dynamic content Portlets lifecycle is managed by a container Portlets interact with web client via a request/response paradigm不同点: Portlets only generate markup fragments, not complete documents. The Portal aggregates portlet markup fragments into a complete portal page Portlets are not directly bound to a URL Web clients interact with portlets through a portal system Portlets have a more refined request handling, action requests and render requests Portlets have predefined portlet modes and window states that indicate the function the portlet is performing and the amount of real state in the portal page Portlets can exist many times in a portal pagePortlet特有: Portlets have means for accessing and storing persistent configuration and customization data Portlets have access to user profile information Portlets have URL rewriting functions for creating hyperlinks within their content, which allow portal server agnostic creation of links and actions in page fragments Portlets can store transient data in the portlet session in two different scopes: the application-wide scope and the portlet private scopeServlet特有: Setting the character set encoding of the response Setting HTTP headers on the response The URL of the client request to the portal什么是Pluto ?Pluto 是 Apache 的一个Open Source项目, 是基于Portlet Spec (v1.0) (JSR168) 的一个 Portlet Container 的实现. 它也提供了一个演示版的Sample Portal实现,用以进行Portlet Container的测试, 是功能相对简单: 例如: 1) 没有复杂的Layout实现. 2) 不是multi-user enabled, 比如, 不同User之间的Portlet Preferences互相是可以share的. 请记住Pluto只是一个Portlet Container的实现, 不是一个Portal的实现. 如果你需要功能更为强大的Portal,可以使用JetSpeed或者其他功能更强大的Portal , 它同样也是Apache的一个Open Source Project. 请参考文章末尾的资源部分.概念 如图: Figure 1.1a.Decorations and controls (修饰部分及控制部分)b.Portlet fragment (Portlet 片段)c.Portlet window (Portlet 窗口)d.Portlet page (Portlet 页面)Figure 1.1开发工具( Eclipse2.1, Pluto-plugin, Jakarta-tomcat-4.1.29)下载地址:Eclipse/downloads/index.phpPluto-plugin/plutoeclipse/org.eclipsefan.pluto.ui_1.0.0.zip?downloadTomcat4.1/pub//jakarta/tomcat-4/v4.1.29/bin/jakarta-tomcat-4.1.29.zipJDK1.4/配置开发环境 Step1 : 解压eclipse-SDK-2.1.1-win32.zip Step2 : 解压org.eclipsefan.pluto.ui_1.0.0.zip , 并将其拷入eclipseplugins目录下, 如下: eclipsepluginsorg.eclipsefan.pluto.ui_1.0.0IconLibSourceWebappStep3 : 解压tomat4.1到一目录. 并且配置好Tomcat服务器.配置完成.a. 使用Portlet Wizard 来创建Portal1) 选择File New Project Portal Pluto Portal application, 单击Next, 如图: Figure 1.22) 指定Project名称 (如图1.3), 这里使用pluto, 然后单击Next.Figure 1.33) 指定Tomcat路径, 单击Finish. 之后eclipse会将Pluto安装到tomcat上,并且自动配置好环境.Figure 1.4b. 创建Portlets Application1) 创建Pluto portlet application (如图Figure 1.5) Figure 1.52) 输入project名称 (如图Figure 1.6), 这里用portletsFigure 1.6c. 最后生成的工程如图 (Figure 1.7): Figure 1.7d. 通过portlet.xml 生成/更新 web.xml (如图Figure 1.8)注: 如果每次对Portlet.xml文件进行修改后,比如添加新的Portlet , 必须更新web.xml ,生成对应的Wrap Servlet , 否则 Portlet无法在Portal中加载.Figure 1.8e. 部署 Portlets1) 编译 portlets 工程.2) 在 your tomcat installation directory/webapps下, 新建目录portlets3) 将portlets工程下的web-root目录下所有文件, 拷入以上新建的portlets目录中.Tip: 如果在每次修改后你厌倦了Ctrl+C 和 Ctrl+V, 你可以在Portlets工程目录下自己编一个Bat文件, 然后你可以在eclipse里的Package Explorer中看到它, 双击就可以了. 如上图(Figure 1.8): 其中deploy.bat文件就是实现Deploy的.4) Start tomcat.5) 在IE 中输入: http:/localhost: 8080/pluto/portal, 你应该能看到portal 页面.Sample Portlet在Portlets工程文件创建过程中, 自动生成许多文件, 包括一个简单的Portlet小程序, 现在我们来简单观察一下生成的 sample portlet.1) 与Servlet非常类似, Portlet扩展自GenericPortletimport javax.portlet.*;public class SimplePortlet extends GenericPortlet2) 其三个方法对应了Portlet 标题栏中的三个链接(View, Edit, Help)所执行的功能.public void doView()public void doEdit()public void doHelp()3) 三个方法分别调用了三个JSP文件, 用以生成Portlet fragment, 同样也可以调用Servlet产生Portlet fragment, 或者不调用JSP或者Servlet,直接在方法中得到PrintWriter,用最简单的pw.println()打印出内容,类似Servlet,如下:PrintWriter pw=renderResponse.getWriter();pw.println(Hello, Portlet!);与Servlet应用类似,也可以使用getInitParameter(String s)方法,得到配置文件中Portlet的初始值. 只不过Servlet使用web.xml,而Portlet 使用portlet.xml文件.portlet.xml jspView /jsp/view.jspSimplePortlet.javaString jspName = getPortletConfig().getInitParameter(jspView);Portlet Tag library1)defineObjects Tag如果打开其中的一个JSP文件,你会发现,和Servlet一样,JSP中可以使用Portlet的一些variables.例如:renderResponserenderRequestportletConfig但是必须声名: ortlet:defineObjects/, 不可以定义任何属性或者包含任何内容.2) actionURL Tag属性值类型对应值windowStateStringminimizednormalmaximized.portletModeStringview, edit , helpvarStringsecureStringtruefalse创建一个action URL , 当访问它时将使portlet window变为normal 装态, 模式变为 edit.3) renderURL Tag属性值类型对应值windowStateStringminimizednormalmaximized.portletModeStringview, edit , helpvarStringsecureStringtruefalse 创建一个render URL , 当访问它时将使portlet window变为maximized状态, 模式变为 view. 4) namespace Tag为目前的Portlet产生一个唯一的Value. 防止和其他的Portlet 或者Portal页面上的value产生冲突.A HREF=”javascript: doFoo()”Foo5) param Tag属性值类型nameString注: param Tag不可以有body content.总结Pluto目前是v1.0, 有部分Portlet规范没有完全实现, 例如, renderResponse.setTitle (), 同时你可以从Apache的CVS下载最新的Pluto代码, 希望这编文章可以帮大家搭建一个简单的Portlet开发环境, 熟悉Portlet相关的知识.资源:Pluto/plutoPluto Mail List/p.jakarta.pluto.userWSRP Spec1.0/committees/tc_home.php?wg_abbrev=wsrpApache的WSRP实现 (WSRP4J)/wsrp4j/Apaches Portal, JetSpeed:/jetspeed/site/index.htmlJSR 168: /en/jsr/detail?id=168Portlet 规范介绍 By Stefan Hepper 和 Stephan Hesmer Part 1: Get your feet wet with the specifications underlying terms and concepts (August 2003) Part 2: The Portlet APIs reference implementation reveals its secrets (September 2003) Portlet应用开发 (JSR168), Part 2Pluto中添加新的Portal Page 和 PortletBy Terry.lee SpiritSeekerS本部分使用本系列中Part1搭建的开发环境,如果还没有搭建好开发环境,请参考Portlet应用开发(JSR168),Part1进行开发环境的搭建. 在Part1中,我们开发了一个简单的portlet程序,但是几乎所有的代码和文件都是由Eclipse的pluto plugin替我们完成的,如何配置用来在Pluto中的Portal中添加新的Portal Page并且将新的Portlet添加到新的Page中去呢? Part2将一步一步教你如何创建一个新Portal Page. Portal的设定Tomcat 中Webapps目录: 其中pluto是portal所在目录, 用以配置Portal Page的两个文件分别是pageregistry.xml和portletentityregistry.xml (如图Figure1_1)Figure1_1其中pageregistry.xml用来在Portal中配置Portal Page, 而portletentityregistry.xml 用来在Page中配置Portlet.portletentityregistry.xml打开pageregistry.xml, 内容如下 : portlets portlets.SimplePortlet 其中application 标签表明了目前的application 的 ID, portlet标签定义了一个Portlet , 如果你新开发了一个Portlet , 可以加入以下内容: portlets portlets.SimplePortlet portlets.IntroPortlet 这样一来你又在portal中注册了一个新的Portlet,接下来是将新注册的Portlet加入Page中.pageregistry.xml打开pageregistry.xml, 内容如下 : Sample Portlet Basic page to show the simple portlet 以上是sample portlet的配置.Fragment标签用来配置navigation(导航栏), Page,以及Page中的Column和Row. 分别用fragment标签的type属性来标识. Pluto自带的Portal使用fragment标签来配置及处理简单的Portlet Layout.中的value值是在portletentityregistry.xml中定义的. 分别对应application id 和portlet id, 将其值用”.”连接起来使用用以定义一个Portlet. 同样 , 如果使用,则将使用portlets.IntroPortlet.1)配置同一行中的两个Portlet, 如下: Sample Portlet Basic page to show the simple portlet 2)配置同一列中的两个Portlet, 如下: Sample Portlet Basic page to show the simple portlet Portlet Modes 和 Portlet window statesPortlet模式(Portlet Mode)是Portlet提供的用以区分 Portlet所执行功能的一个概念.通常情况下其拥有以下几种模式:1. VIEW2. EDIT3. HELP以上各模式分别对应GenericPortlet中的 doView() , doEdit() , doHelp() 方法,分别调用以上方法来产生各个模式中的Fragment内容. 非常类似Servlet中的doGet() , doPost() 方法,都是Helper方法, 但是概念不同.Portlet状态(Portlet window states)提供了对于Portlet窗口的控制功能 , 其中有如下三种最基本的状态:1.Normal2.Maximized3.MinimizedPortlet开发人员可以在处理ActionRequest (以后的章节将讲述其概念) 时使用代码实现Portlet模式, 及其Portlet状态的转变.注: 只能在处理ActionRequest时改变Portlet Modes和Portlet Window states.以上Portlet Modes和Portlet window states都可以配置成custom Portlet mode和custom portlet window state. 不同的地方在于对于Mode来说, 定制化的Mode需要对GenericPortlet的doDispatch方法进行重写(Overriding), 因为GenericPortlet类通过render方法按照不同的Portlet Mode将request分别分发给doView,doEdit,doHelp等辅助方法. 如果需要定制的Mode , 必须重写doDispatch 方法. 同时如果使用Portal提供商的Portlet Modes 或者 Portlet window States,都必须在部署描述中添加相关的设定.A.添加Custom Portlet Modes 以下使用代码实现了一个新的Portlet Mode: CONFIG , 当然也可以使用Portal提供商支持的Portlet Mode. 但是需要Mapping到Portal提供商所支持的Portlet Mode. 使用如下描述:Provides administration functionsCONFIG1. Portlet代码 (CustomPortletModeExample.java)package portlets.portletmode;/* * author terry * * To change the template for this generated type comment go to * Window>Preferences>Java>Code Generation>Code and Comments */import javax.portlet.*;import java.io.IOException;public class CustomPortletModeExample extends GenericPortlet public void doView(RenderRequest request, RenderResponse response)throws PortletException, IOException response.setContentType(text/html);String jspName = getPortletConfig().getInitParameter(all);PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(jspName);rd.include(request, response); public void doEdit(RenderRequest request, RenderResponse response)throws PortletException, IOException response.setContentType(text/html);String jspName = getPortletConfig().getInitParameter(all);PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(jspName);rd.include(request, response); public void render(RenderRequest request, RenderResponse response) throws PortletException, IOExceptiondoDispatcher(request,response); public void doDispatcher(RenderRequest request, RenderResponse response)throws PortletException, IOExceptionif(!request.getWindowState().equals(WindowState.MINIMIZED)if(request.getPortletMode().equals(PortletMode.VIEW)doView(request,response);else if(request.getPortletMode().equals(PortletMode.EDIT)doEdit(r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- poct院内管理办法
- 专案项目管理办法模板
- 药厂管理办法及考核
- 红缘灯维护管理办法
- 碳资产贷款管理办法
- 襄阳市建设管理办法
- 财务内部结算管理办法
- 设计bom管理办法
- 网格化风险管理办法
- 贷款业务检查管理办法
- 2025年高端酒店装修设计与施工合同范本2篇
- 个人健康个性化营养搭配与服务提供系统建设
- 房地产估价四假设开发法的应用案例
- 2023年政府采购评审专家考试题库(含答案)
- GB/T 45083-2024再生资源分拣中心建设和管理规范
- 大型运输车辆交通安全教育
- 《国有资产管理》课件
- 语文开学第一课课件 2024-2025学年统编版语文七年级上册
- 人教版高中生物必修1全册教学课件
- 青岛版小学数学五年级上册教案全册
- 连续性肾替代治疗抗菌药物剂量调整专家共识(2024年版)解读
评论
0/150
提交评论