网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.JavaServer Pages Second Edition.
.用javaZoom的uploadBean扩展requ.
.getTime 方法.
.第三讲 Java语言中的面向对象特.
.Hibernate 深入研究之 Criteria.
.Java Socket编程(四)-2.
.JAVA调试技术.
.Java应用者与IDE环境.
.Java Servlet 编程及应用之八.
.发掘身份证编号的潜力.
.Ubuntu 上利用 subcli.
.使用Javadoc标记你需要的信息.
.Reference不为人知的一面.
..NET跨平台的第一步.
.Pattens In Java(中文).
.java之旅(8)复用类 (续).
.在Eclipse 3.1体验J2SE 5.0新特性.
.Java 在Client/Server 网络中的应.
.使用EclipseSWT控件开发WEB应用.
.The Alloy Look And Feel 1.4.4破.

Portlet规范介绍

发表日期:2008-1-5


Portlet API参考实现的秘密

概要
 在Stefan Hepper和Stephan Hesmer的portlet系列文章的第二部分中,作者把着笔点从Portlet API的基础概要介绍转移到了Portlet API的参考实现(RI reference implementation也就是Pluto)的细节描述。作者还提供了一系列portlet的实例来说明怎样扩展Portlet API的标准函数。
企业portal提供商使用可插的用户接口组件(portlets)向信息系统提供表示层。不幸的是,以前的提供商都只定义了自己的portlet API,在整个行业之中互不相容。为了标准化整个行业进程,Java团体发布了Java规范要求(JSR)168:Portlet规范。
这篇系列文章的第一部分介绍了jsp 168的细节。第二部分重点放在portlet API的参考实现(RI)上,也就是Pluto。此外还提供了一个portlet的实例,读者可以通过这个实例来学习。
文章第一节描述了RI的体系结构,包括portlet容器的可拆卸性的概念和怎样在其他项目中重用portlet容器。第二节介绍了RI的安装和使用,以及怎样快速配置portlet。其中文章还包括一个逐步深入的实例。
注重:你可以通过文章之后的资源链接下载原代码

Pluto的体系结构
    让我们先来看一下Pluto的体系结构和一些基本的概念。我们先简要的说明portal的参考实现和portlet容器在整个portal体系结构中的位置。接下来我们在细节方面研究Pluto的体系结构。最后,我们看一下在portlet容器里很有趣的:portlet 展开。

关于portal
       Pluto一般用来演示Portlet API如何工作以及向开发者提供一个测试portlets的实例平台。然而,假如没有驱动来运行和测试portlet容器有点麻烦。Pluto的简单portal组件只是架构于portlet容器,它只满足了JSR 168的基本要求。(相比之下,Apache的开源项目Jetspeed就要专业的多。Jetspeed将着重中在了portal本身而非portlet容器之上,并且更多的考虑了其他团体的需求。)
图一描述了portal的基本体系结构。Portal的网络应用程序处理客户端请求,从用户的当前页面得到portlets,之后调用portlet容器以获得每个portlet的内容。portal使用Portlet 容器的 Invoker API来访问 portlet容器,从 portal看来,portlet 容器的主要接口是支持基于请求的方法调用 portlets。容器用户要想获得portal的相关信息则必须实现portlet容器的Provider SPI (Service Provider Interface)的callback接口。最终,portlet容器通过portlet API调用所有portlet。


 
图一:Pluto中的一个简单的portal的结构

Portlet容器
    
     Portlet容器是portlet的运行环境,也是每个portal的组成核心。它需要有关portal本身的信息,且它必须重用自身的公共代码。因此,portlet容器和其他portal组件是完全分离的。这就是说,你可以将独立的portlet容器嵌入任意的portal,只要你满足portlet容器的条件,比方说实现所有的SPI。
Portlet容器的 Invoker API,或者叫入口点,扮演了portlet容器的主调用接口的角色。Portlet容器的Invoker API将portlet容器的生存周期(init,destroy)和基于请求的调用方法(initPage(),performTitle(),portletService()等等)结合了起来。因为portlet容器最后调用portlet的方法名有点类似portlet API的主portlet接口,不同的是是否必须要传递portlet定义符。正是因为这个附加的portlet定义符,portlet容器才能正确的调用portlet。
除了要用API访问portlet容器之外,portal还必须扩展portlet容器定义的SPI。因此,RI引入了容器服务:在容器注册过的可拆卸组件提供基础功能并且可扩充。RI包含如下一些容器内的自建服务(前四个必须在运行portlet容器时实现,最后一个是可选的):
? 信息提供器:给portlet容器提供portal和portal框架的信息。通过这个接口来获得信息和存储portal信息。这些信息包括导航栏里的URL、portlet上下文、portlet模式和窗口状态控制。
? 工厂治理器:定义了怎么怎样通过工厂方法来获得一个具体实现。(一个标准的portal应该已经存在一个实现。)
? 日志服务:定义了一个日志工具(一个标准的portal应该已经存在一个实现)。
? 配置服务:定义了怎么样获得配置参数(一个标准的portal应该已经存在一个实现)。
? 属性治理器(可选):属性治理器接口的实现答应处理JSR168规范中定义的属性。
严格的说,portlet对象模型也是SPI中的一部分,只是它在SPI中占有一个非凡的地位。Portlet对象模型处理所有的potlet对象,他由一个交织在一起的接口集合组成。因此,不能把他和容器服务分开来考虑。
 
按此在新窗口浏览图片

图二:portlet容器结构
 
Portlet的部署

   portlet 容器 架构在servlet容器之上并且增强了它的功能。为了实现它,portlet 容器将原始servlet 加入每一个portlet应用程序的war文件中,这一点我们在图三3中有所描述。部署portlet组件时,先取得原始的war文件,然后向其中加入一个新的或者修改原有的web.XML,并且加入一个servlet作为一个调用点来包装每个portlet。之后, portlet的部署器(?这个原文是Then the portlet deployment passes the modified war file to the application server deployment)会传递一个修改过的war文件到应用服务器,将其部署到应用服务器系统。在portlet的调用过程中,portlet容器调用添加进去的servlet,作为部署portlet的war文件的入口点。
 
按此在新窗口浏览图片

图三:RI中portlet的部署

Pluto和WSRP标准

   正像第一部分所描述的那样,JSR 168与远程portlet网络服务(the Web Services for Remote Portlets (WSRP))标准紧密结合。几乎同时形成的这两种标准发布了开源实现,实现了在各自的规范中描述必要的功能。作为共有的目标,两种标准努力能够在一起更好的合作。现在,portlet容器可以很好的运行WSRP portlet。
Pluto可以在一个portal中运行多个portlet容器。从而Pluto的portlet容器可以被初始化多次。更重要的是,可以用不同的方式来初始化它。每一个portlet容器可以使用SPI的不同实现。

RI的安装
 
   你会发现Pluto的安装过程非常简单。执行install命令,build目录/build下的install.bat或者install.sh。接下来安装程序会提示你指定Tomcat的安装目录。(注重:在MS windows下文件分隔符不是反斜杠。)
在这之后,安装进程会创建RI和所有portlet,安装portlet到指定的Tomcat目录。安装完成后请查看文档以确定完成了所有必要的手工设置工作。
现在可以启动Tomcat,通过http://localhost:8080/pluto/portal来访问RI了。
就是这么简单!
 
怎样部署portlet
 
      在Pluto中部署portlet和它的安装一样的简单。只要记住你必须首先安装了Pluto,它正确的设置了prepareRun.properties。这是部署过程所必须的。在命令提示符下转到build目录,输入命令deployPortlet.bat , 用portlet war文件做参数,比如:
deployPortlet.bat C:\pluto\portlets\bookmark_04\driver\bookmark_04.war

Portlet实例
     我们来看一个portlet的例子,Bookmark。它充分利用了Portlet API并且阐明了我们学到的概念。我们以一个简单的例子开始,我们在每一节一步步扩展这个Bookmark portlet,最后我们将几乎用到所有的portlet API,把它做成一个高级的portlet。
Bookmark portlet:版本一
第一个Bookmark portlet用到了Portlet API中如下的一些特性:
? Portlet API 接口The Portlet API interface
? Java服务器页面(jsp)JavaServer Pages (JSP) pages
? Portlet API标签库The Portlet API tag libraries
? 部署描述符Deployment descriptors
第一个Bookmark portlet的两个JSP页面分别显示和编辑模式。每个JSP页面只是简单的显示了portlet的当前portlet模式和windwos状态。为了显示这些信息,我们用到了Portlet API标签库(只是部分程序代码,请下载全部代码,不然很难理解:译者注):

public void doView (RenderRequest request,
RenderResponse response) throws PortletException, IOException {
        response.setContentType("text/Html");        
        String jspName = getPortletConfig().getInitParameter("jspView");
PortletRequestDispatcher rd = 
  getPortletContext().getRequestDispatcher(jspName);
        rd.include(request,response);
    }
接下来的代码是例子中的一个简单的JSP 页面(即view.jsp:译者注):
<%@ page session="false" %>
<%@ page import="javax.portlet.*"%>
<%@ page import="java.util.*"%>
<%@ taglib uri='/WEB-INF/tld/portlet.tld' prefix='portlet'%>
<portlet:defineObjects/>

Hello,<br>
I am the bookmark portlet.<br>
<br>
Current Portlet Mode: <%=portletRequest.getPortletMode()%><br>
Current Window State: <%=portletRequest.getWindowState()%><br>
<br>
Bookmark portlet:版本二
 第二个Bookmark portlet进一步深入了Portlet API 的概念。除了第一例子所使用到的Portlet API 特性,它增加了:
? 动作处理Action handling
? Portlet 参数 Portlet preferences
? 验证参数 A preferences validator
? 在部署描述符中预定义参数 Predefined preferences in the deployment descriptor
在第二个Bookmark例子里,两个新的JSP页面替代了版本一中的。首先,edit.jsp答应通过portlet动作添加和删除书签。在这个JSP页面中输入的书签将作为portlet参数存放。其次,view.jsp 以超链接显示出作为portlet参数存放的书签。
Bookmark portlet:版本三
 新增用到的特性:
? 地区性部署描述符 Localizable deployment descriptor
? 资源包ResourceBundles
现在部署描述符和JSP页面从资源包里(ResourceBundles)获得可显示的字符集,他们都可以支持英文和德文了。
Bookmark portlet:版本四
 最终的这个portlet例子通过portlet API传递递交参量(render parameters)示范了导航的概念(the navigational state concept )。在版本四里有七个书签,但默认一页只显示四个,如图四所示。通过点击next和back的超链接,用户可以导航到向前或者向后的五个书签。初始点将被初始化为递交参量,使得用户可以使用浏览器的刷新、后退和前进按钮。


 
 Bookmark portlet版本四的界面

Portlet复习
   
   象你所看到的那样,portlet规范的参考实现包括两个部分:portal和portlet容器。Portal作为一个简单的运行portlet容器的测试驱动。Portlet容器作为一个能迅速使用到其他portal(比如jetspeed)里的普通组件。
    这个portlet实例用到了许多portlet API里的很重要的概念。你可以用所有portlet API和servlet API的特性来扩展这个实例。比方说你可以用一个servlet在新窗口中输出其他有用的信息,如一个打印预览。还可以通过Http会话与portlet进行交互。实际上,因为portlet是一个强大的技术,能用他实现的功能是无穷无尽的。


上一篇:Weblogic EJB 学习笔记 人气:591
下一篇:WEB 开发技术系列之一 人气:615
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐